2019年6月22日土曜日

配列の挙動について、分かった振りして教えを垂れる痴れ者共が、なんと多いことよ - VBA配列関数群(そのほか)

画像はイメージです
   
またまた、以前の投稿に続けてVBA絡みのプログラミングで、考えて見ますね。
配列関数は、Array関数が代表的なのですが、次の通りコードを書いてみました。

Sub ArryFnctn()
Dim Fctr As Variant

Fctr = Array("", "", "", "")

MsgBox IsArray(Fctr)

End Sub

それで、IsArray関数と言うのは、変数値が配列なのかブール型の解を返します。
つまり、配列なら”True”で、そうでなければ”False”ですが、上の式はどうかな。

””と書くと、値が何も無いことを意味しますが、関数の記述には則っています。
実際、変数はString型に型強制されてしまい、長さ0の文字列("")になるんだ。

それで、答えを言うと、”True"と返して、全く値がなくても配列になりました。
これは、要素に実データがあろうと無かろうと、配列の構造にしたということ。

だから、一つの配列を表示するのに、”MsgBox Fctr(2)”で動かすとどうなるか。
答えは、空データだから、メッセージボックスだけしかない表示になるのです。

つまり、配列関数は、実行すると配列する要素を問わず、実行されるだけなの。
前回の投稿では、空の配列と言いましたが、関数の挙動はお構い無しでした。

もっと、すごいのはFctr = Array(, "", "", "")と書いても、”True”を返します。
この関数は、要素をカンマで区切る書式ですが、一つ目は要素も記述しないよ。

それでも、”True"と出るのだから、関数は配列構造のでっち上げ感が半端無い。
代りに、Fctr = Split(",a,b,c", ",")と書き、”MsgBox Fctr(0)”の表示はどうか。

同様に空データだから、メッセージボックスだけしか出ない表示になるのです。
これを、LBound(変数)で指定して表示しても、ゼロが出るのはなんじゃらほい。

配列は、分解された要素が0番目から始まると見たけど、何か違うような気が。
それにLBound(変数)はいつもゼロだから、変数(0)で指定して構わないなんて。

要するにさ、本来の配列概念を話さずに、実用上の動作だけ話しているのかな。
そういう風にも思えて考えてみましたが、結論としてはこんな自己流概念です。

先ず区切文字で区切れなくても、0番目の要素は必ず吐き出されて配列になる。
このため、区切文字が使われなかったら、LBoundとUBoundの値は両方0です。

つまり、区切文字で最初に区切られると変数(1)で、その直後の値が要素になる。
それ以降、区切られた文字の次の値が要素になり繰り返すけれど、注意が一つ。

Fctr = Split("a,b,c", ",")と、Fctr = Split("a,b,c,", ",")では結果が違うからな。
区切文字の数を数えた結果が2と3で、要素自体は空だろうが関係ありません。

というわけで、配列の構造が成立さえすれば、結果オーライの関数なのでした。
この配列の流れを見ていると、通信規格のプロトコル手順にも似ていて、区切り文字(デリミッター)の後に何バイト続くとか英訳していましたので、規格によっては、区切り文字の後に0バイトの空データになり、その後すぐに区切り文字が来るようなケースもあるのではないかと、思ったのでした。

おまけ:Split関数の実行結果をJoin関数で結合した際に面白い現象が発生
Dim Fctr As Variant, Fctr2 As Varinat
Fctr = Split("a,b,c", ",")
Fctr2 = Join(Fctr, ",")
MsgBox Fctr2  'a,b,c と表示(区切文字なし)

Fctr = Split("a,b,c,", ",")
Fctr2 = Join(Fctr, ",")
MsgBox Fctr2 'a,b,c, と表示(区切文字付き)

注:最後尾に区切文字があるかないかで、関数の用い方に注意



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



2019年6月19日水曜日

二重国籍疑惑のバカ女政治家が、どんなに政府を追求したって、すでにテレビのワイドショーでおなじみネタだったのを知らないのかタコ野郎 - 老後資金二千万問題(そのほか)

   
R4は、両親が外省人で北京大学まで留学したから、レッドチャイナの間諜だ。
政府に対する意味不明の貶める言動や攻撃を見る限り、認定間違いなしだなあ。

おらは、未だにR4が台湾国籍を放棄していないと確信していて、理由はある。
先ず、親が金持ちで小学校の頃は台北のホテルプールで泳いでいたとか、贅沢。

だから、不動産など資産をしこたま親から譲り受けたはずで持ってるんだろう。
台湾の法律では、国籍を放棄すると不動産の所有権も自動的に消滅してしまう。

そんなことはもったいなくて、絶対にしないだろうから二重国籍保持のままね。
と、疑われても仕方が無いほど、メディアに提示した証拠が、嘘くさかったな。

国籍喪失許可証書だけど、写真が斜め向きに撮影した選挙用写真らしいんだな。
実際、台湾人から「写真審査が厳しくて斜め向き写真は許可されない」だって。

    
政治家だから特別な便宜が図られた可能性もあるが選挙ポスターの写真って変。
しかも、台湾のパスポートを「中華民国駐韓大使館(京)」で取得している事。

台湾国籍が残っていたと公表した蓮舫のパスポートに、なぜ韓国が関係するの。
なぜ、台北で取れなかったのか分からんが、疑念は、次々浮き上がって来ます。

今まで、ご本人はスルーしたままだから、真実は闇の中に葬り去られる分けよ。
そんな姉御が、予算委員会で老後の二千万円資金がなぜ必要と騒がれてもねえ。

本人自身が怪しいのだから、追求自体は裏に何かあると、勘ぐるだけなんだな。
だって、これまで、散々、テレビのワイドショーで取上げて来た問題でしょう。

視聴者には周知の事実だったわけで、何で今頃、政府攻撃のネタにするのかね。
しかも、年金だけで老後の生活が送れるなんて、国民は思ったりしていません。

だから、ネットでも老後にどれぐらい貯蓄が必要かって、記事が見つかるんだ。
少なくとも三四年前から紹介されてきたことで、金融庁が再説しただけでしょ。

といわけで、野党の国会議員は、痴れ者がなんと多いことかと思ってしまった。
次に参考になるサイトを挙げておきますが、記事では一人二千五百万円とかね。

それ以上に多額の金子を説明するサイトもあり、ジジババが老後を贅沢に暮らしたいのなら、あればあるほど良いのだと言うことが、あっけらかんと分かるほどの詰まらん茶飲み話で、それで国政を紛糾させる日本国は、なんと平和なのかと思ってしまったのでした。


老後資金はいくら必要か 60歳夫婦で2500万円あれば… (2ページ)
定年後 難民にならない生き方 (2017.10.5)

2016.7.20 水曜日20:55
【専門家の方程式】『老後収入』ー『老後支出』=『老後資金』です【音声あり】

毎日が祝日。仕事に疲れた人たちへ贈る、頑張らない生き方・セミリタイアのすすめ。 老後資金はいくら必要?実は1000万円で十分足りる?
2018年9月14日2018年10月24日

日本と愉快な仲間たち
老後資金の必要額!独身ではいくら貯めれば良いの?
2016/10/19



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



2019年6月16日日曜日

もし建て直すとしたら、百万円ぐらいは軽く掛かるから簡単には済まないので、損害賠償で犯人を捕まえたいぐらいだよ - バス停上屋(栄区・横浜市)

立ち入り禁止のコーンが置いてあった

早朝の五時ごろでしたか、戸外でガシャーンとどでかい音がして驚きました。
つんざくような金属音で、目覚める前の浅い眠りだから、叩き起こされたんだ。

でも、眠気だけは未だ残っていて、ウトウトしながらも少し時間が経ちました。
やがて、程なく寝入ってしまいましたが、それだけ衝撃音が大きかった分けよ。

それで、その結果は冒頭の写真で、バス停の上屋(ルーフ)が傾いていました。
何かが支柱の根元にぶち当たって大きへし折られ、屋根の傾きが不安定なんだ。

このバス停はマンションの前にあって通勤に便利そうですが、自分は関係ない。
だって、徒歩で通勤しているし、最寄りのJR駅までは歩ける範囲の距離です。

なので、バス停の利用する頻度が少なく関心が薄かったのですが、今回は違う。
写真を見てもらうと分かりますが、自動車が反対車線から突進したかのようだ。

   
しかも、縁石を乗り上げてぶち当たっているところを見ると、かなりの速度か。
路面には、タイヤの擦ったブレーキ痕が全く見られず、余裕もなかったのかな。

となると、すぐそばの交差点を猛スピードで左折し、車線に戻れなかったのか。
恐らくハンドル操作を誤って、上屋の柱に突撃した印象がぬぐい切れないんだ。

自動車なのか大型バイクなのか、なぜかというと支柱に油がこびりついている。
要するに、ぶち当たってエンジンが破壊されてオイルが漏れだしたような感じ。

車両は、すぐに引き出されたみたいですが、地面におが屑がまかれていました。
茶色い顆粒状で吸着剤だと気が付いて、あたりを見回すと路面もうっすら黒い。

だいぶ油が流出したんだと思いますが、運転した人は怪我しなかったのかなあ。
へし曲がった支柱には、赤い塗料辺までこびりついていて、赤い車体なのかな。

   
最近でも、二つ先のバス停上屋が何かに衝突されて、基礎がグラつきました。
この結果、建て替えが必要になりましたが、同じバス路線で二か所も破壊だよ。

このバス路線の県道は、壊されたバス停の間が、カーブのある上り下りの坂道。
峠道みたいになっていて、夜間だと爆音を鳴らす暴走族も駆け抜けて行きます。

横浜市内の道路にしては、交通信号機の間隔も長いし、スピード出せるんだよ。
だから、速度違反のネズミ捕りで臨検も行われたりして歩行者は気を付けよう。

というわけで、この交差点の近辺は、交通事故がよくあるので危険なんだよな。
自分なんか、横断歩道で青信号になって渡ろとしたら、左折車が歩行者を確認もせずにスピードを出して曲がって通り過ぎていくような物騒なご時世ですから、人身事故でなくて物損事故程度なら、これ幸いと思わずにはいられないのでした。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



2019年6月13日木曜日

配列が空かどうかを調べるのに、自作の関数を実装するなんて、わざと凝ったつ くりで自己満足するだけよ - VBA・Split関数(そのほか)

Split関数ならぬ、スプリット変化球の握り

前回の投稿では、セル内で改行されたデータを置換するのに工夫してみました。
コードの動きも繰り返しで実験して、Split関数の吐き出す配列で確認したのよ。

コード的には、置換の文言とループ関数で取得したセル値の文言を比較します。
ただ、何もデータのない空白セルだけは、If構文で特定することにしました。

Dim Cll As Range
For Each Cll in Selection
If Cll.Value = "" Then GoTo EndTsk
~そうでない時に、配列が合うか比較するコード~
End Tsk
Next Cll

そのロジック部分を抜き出すと上の通りですが、詳細は前の投稿を参考下さい。
GoToステートメントを使って、条件外になると次のステップを飛ばす算段です。

本当は、Split関数で条件の配列と比較する配列が、完全に比較できると思った。
ところが、ターゲットのセル値が空白だと配列が比較できずに置換してしまう。

実験用のシートが、一面で置き換わってしまって、これはいかんと思いました。
なのでセル値が空であれば、シンプルに無駄な作業をスキップさせてみました。

コードの動きを何度か実証してみましたけれど、実用範囲だからOKでしょう。
ただ、空白セルでSplit関数がどのような結果を吐き出すのか、よく分からない。

ネットで調べてみましたが、配列が空なのかどうかを調べる関数はないらしい。
変数が配列なのかを調べる関数(IsArray)はありますが、配列を作った結果だ。

だから、この関数による結果が、空の配列であっても結果的には"True”になる。
ならば、空の配列なら値が無いと思い、IsEmpty関数で確認しても結果が違う。

Split関数は、配列の要素順番が、LBbound(開始値)UBound(最終値)です。
でも、IsEmptyにぶち込んでも、”False”とでるので空とは認識していなさそう。

    Dim tmp As Variant
    tmp = Split(Cells(1, 1), Chr(10)) ’空白セル・区切り文字は改行コード
    If IsEmpty(LBound(tmp)) = "True" Then MsgBox "True"
    If IsEmpty(LBound(tmp)) = "False" Then MsgBox "False"

となれば、Split関数は区切文字が見つからなくても 配列はでっち上げるんだ。
これが分かっただけでも御の字で、ネットを当たると自作関数を紹介するほど。

Functionプロシージャを設定する説明だったけど、もっと簡単じゃないのか。
そう思って、どんな開始と最終の値を出力するか、しつこく調べてみたんだよ。

Dim tmp As Variant
tmp = Split(Cells(1, 1), ”※”) ’区切り文字は”※”
If UBound(tmp) = -1 And LBound(tmp) = 0 Then MsgBox "空のセル"
If UBound(tmp) = 0 And LBound(tmp) = 0 Then MsgBox "区切文字無し"
If Len(Cells(1, 1)) > 0 And InStr(Cells(1, 1), ”※”) = 1 Then MsgBox "先頭が区切文字"
If Len(Cells(1, 1)) > 1 And Len(Cells(1, 1)) = InStrRev(Cells(1, 1), ”※”) Then MsgBox "末尾が区切文字"

  
シートの先頭セルに、メッセージボックスにある条件で入力してみてください。
一番目のIf文は空白セルの場合、二つ目はデータに区切文字が見当たらない。

三番目は、末尾が区切文字で、四番目は、先頭が区切り文字になるという事例。
まあ、三番目と四番目は、区切文字が入っているセルなので配列には違いない。

このため、字数を調べて区切り文字が先頭か末尾かを条件式で判断しています。
まあ、四つの条件を満たすセルの内容は、作業をスキップしまえばいいんだ。

つまり、この関数は区切文字でデータを仕切ることしか想定していないような。
というわけで、区切る位置がイレギュラーな場合を想定しない関数なのでした。

実際、この関数を使うとしたら、区切り文字で要素に配分してから、必要な配列順番のデータを取得して、次の作業ステップに移行しますが、先頭に区切り文字が出るようなケースは、データの羅列として考えられそうもなく、ありえるのはデータ末尾に区切り文字が入ってしまうことぐらいでして、そういう事例はプログラミングの工夫で操作も出来そうだと思ったのでした。

おまけ:
とてもイレギュラーだけど、セルの値が複数の区切り文字だけだとしたら、、、
   
Dim i As Long
Dim tmp As Variant
   
i = 0
tmp = Split(Cells(1, 1), "※")
   
Do While i < UBound(tmp) + 1
If Not tmp(i) = "" Then GoTo WithData
i = i + 1
Loop
   
MsgBox "要素が空"
GoTo Finish
   
WithData: MsgBox "要素が存在"
Finish:
   
End Sub
   
   
コメント:結果は、”要素が空”と表示。一個でも文字が挟まっていると存在。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村