2021年05月26日

10万円ではじめるプログラミング講座 9

全ての国民に10万円が行きわたると言う事で、様々な事情の
方がいらっしゃるかと思いますが、それが出来る人に向けて、
Excelを活用したプログラミング講座を執筆する事にしました。
「ゲームをやった時間を記録して集計出来るプログラム」を
自分で作れるようになる事を目標にしています。

今回は、前回つくったプログラムに細かな改善を加えようと
思います。前回と同様に、誰もが知っている“あれ”を取り
出して、前回つくったプログラムと、比べてみましょう。

例えば、"1" "+" "1" "="と入力して 2 が表示された後に","
キーを押すと、どうなりますか。一方“あれ”を取り出して、
"1" "+" "1" "="と入力して 2 が表示された後に"+/-"キーを
押すと、どうなりますか。違う結果になると思います。

いつも使い慣れている“あれ”ならば"1" "+" "1" "="と入力
して 2 が表示された後に"+/-"キーを押せば、"1+1="の結果
のプラス・マイナスを入れ替えて計算を継続させる事が出来
るのに、前回つくったプログラムにはその機能がありません。

前回つくったプログラムを開きます。ファイル名は
「den-dentaku2.xlsm / den-dentaku2.xls」として
保存したと思います。

ファイルを開くと、まっさらなExcelブックに「セキュリティ
の警告 マクロが無効にされました。」と言う表示(表現は
バージョンによって違うかも知れません)が出現している事
が確認出来ると思います。忘れずマクロを有効に設定します。

プログラムの改造を始める前に、前回つくった内容を消して
しまう事のない様、ファイル名を変えておきましょう。

ツールバー等にある「名前を付けて保存」をクリックします。

ファイル名は「den-dentaku3.xlsm / den-dentaku3.xls」等
が良いでしょう。

ファイルを開いた状態で、「Alt+F11」を押します。
「Microsoft Visual Basic」の画面が出て来ると思います。
そのまま「F7」を押して、「コード」画面を開きます。

書き換えが必要なのは、ProcessKeyPress関数です。

ProcessKeyPressの Select Case KeyAscii と End Selectの
間のCase Asc(",")のコードを探します。

このCase Asc(",")から始まる部分の先頭行(Case Asc(",")
の直後)に、次のコードを挿入します。

If cmJoutai = cmKekka Then strNyuryoku = CStr(dblKekka)

Case Asc(",")から始まる部分の後方部に、以下の様なコード
があると思います。

Select Case cmJoutai
Case cmAllClear, cmKekka
cmJoutai = cmNyuryoku1
'★→cmN1: cmAC, cmKのとき、数値入力を始めるとcmN1
Case cmNyuryoku1, cmNyuryoku2
Case cmError1, cmError2, cmError3
End Select

これを次の様に書き換えます。

Select Case cmJoutai
Case cmAllClear
cmJoutai = cmNyuryoku1
'★→cmN1: cmACのとき、数値入力を始めるとcmN1
Case cmKekka
dblKekka = CDbl(strNyuryoku)
Case cmNyuryoku1, cmNyuryoku2
Case cmError1, cmError2, cmError3
End Select

cmJoutaiが、cmKekkaのとき、新たに数値入力を始める操作を
するのではなく、dblKekkaのプラス・マイナスを入れ替える
操作を行う様にしています。

「F5」キーを押して動作確認してみましょう。

どうでしょう。正しく動作しましたか。

例えば、"1" "+" "1" "="と入力して 2 が表示された後に","
キーを押すと、どうなりますか。良さそうですね。

では、その直後に"."キーを押すと、どうなりますか。続けて、
"3" "4" "5" "6"と押すと、どうなりますか。 "+" "2" "="と
押すと、どうなりますか。悪くは無いですね。

でも、ちょっとおかしくないですか。

例えば、"1" "+" "1" "="と入力して 2 が表示された後に","
キーを押し、続けて"b"キーを押すと、どうなりますか。何も
起きませんね。続けて、"3" "4" "5" "6"と押すと、どうなり
ますか。これが本来の正しい動作なのではないでしょうか。



忘れないうちに、ここまでつくって来たプログラムを保存し
ましょう。ツールバー等にある「保存」をクリックします。



前回の講座では、ある特定の条件下で数値が「中抜き」され
ていくプログラムについて、「中抜き」された数値が分かる
様な改造をしましたが、特殊な操作をすると、それ迄に「中
抜き」された合計が分かる様な改造をしようと思います。

ProcessKeyPressの Select Case KeyAscii と End Selectの
間のCase Elseの前に、以下のコードを書き込みます。

Case vbKeyUp '↑
If strNyuryoku = "93" Then
strNyuryoku = ""
dblKekka = GetChildrensWallet
cmJoutai = cmKekka
UpdateDisplay
End If

このプログラムはこのままでは動作しません。KeyPressイベ
ントプロシージャでは、上キー(vbKeyUp)に反応しない為です。

そこで、上キーに対応する様に、若干の修正を施します。

コンボボックスの左側(オブジェクト)には「UserForm」と
表示されていると思います。右側(プロシージャ)を開いて、
「KeyDown」を選びます。すると以下のプロシージャが自動
的に挿入されていると思います。

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

End Sub

KeyPressイベントプロシージャは、フォームでキーボードが
押されたときに呼び出されるイベントプロシージャです。

KeyDownイベントプロシージャには以下の様に書き込みます。

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyUp Then ProcessKeyPress (KeyCode)
End Sub

忘れないうちに、ここまでつくって来たプログラムを保存し
ましょう。ツールバー等にある「保存」をクリックします。

 
続きを読む...

posted by miraclestar at 04:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月25日

あの証言の信ぴょう性

「お金で票を買う事が出来る」

そのやり方を実行した人間が逮捕されてから、約一年。真相
と黒幕を確定させるのに充分な事実と証言が、詰まって来て
います。参院選広島選挙区で起きた大規模買収事件の事です。

これ迄黒幕は、トカゲの尻尾を切り続け逃げのびて来ました。
ところが、最早切る尻尾が無いところまで来てしまいました。

(前略)2019年の参院選をめぐる公職選挙法違反の罪で有罪が確定し、当選無効になった(中略)元参院議員の陣営に党本部から1億5000万円の選挙資金が投入されていた問題で、自民党の(中略)幹事長が17日の会見で突然、「私は関与していない」と言い出した。しかも、会見に同席した(中略)幹事長代理が(幹事長)の説明を補足し、「当時の選対委員長が広島を担当していた」と爆弾発言だ。(中略)

名指しされた(元選対委員長)はきのう(18日)、記者団に「1ミリも、正確に言えば1ミクロンも関わっていない」と釈明。(中略)(元選対委員長)は「党から(1.5憶円が)給付された事実も知らない」と関与を全否定している。(後略)


〈日刊ゲンダイ 5月20日(5月19日 夕刊) 2面〉

幹事長の発言を受け出て来た幹事長代理の発言は、経緯から
推察するに「口を滑らせた」と言う種類の発言ではないかと
思います。すなわち、事実である可能性が高いと言う事です。

翼賛体制に協力するテレビの報道番組は、一連の発言を報道
しましたが、真相の確定につながる情報に触れる様子は無く、
あやふやなままです。いつも通りの「尻尾切り」で、国民が
忘れてくれる事を期待しているのでしょう。

しかしながら、今回の発言は「尻尾切り」には、なりません。

(前略)(幹事長)はきのう(18日)の会見でも「全般の責任は私にあるが、個別選挙区の戦略や支援方針はそれぞれの担当」と、改めて直接の関与を否定。(中略)幹事長も選対委員長も知らないなんてあり得ないし、本当に2人とも知らなかったのなら、党のカネ1.5憶円を自由に動かせるのは総理総裁しかいない。(後略)

〈日刊ゲンダイ 5月20日(5月19日 夕刊) 2面〉

今回の幹事長、幹事長代理、元選対委員長の発言は、ただの
責任のなすりつけ合いで、いつも通り「真相は闇の中」だと
思ったら、いや、思わされたら間違いです。

幹事長、幹事長代理、元選対委員長の発言を受け、その真偽
について様々な憶測が飛び交っている様です。確信犯の虚偽、
隠蔽、逃亡等によって国民を欺いて来た面々ではありますが、
今回の発言に関しては、概ね事実を述べているのではないか
と思います。何故なら、“口裏合わせの無い不用意な嘘”が
使用出来る人間は限られているからです。

幹事長の発言が、もし確信犯の虚偽であるとしたら、緻密な
口裏合わせをしているはずです。しかも、もし確信犯の虚偽
であるなら、自らあえて発言する人間は限りなく絞り回数も
抑えるはずです。人数が増えれば、回数が増えれば、綻びが
露呈する可能性が高まるからです。振り返ってみましょう。

(前略)(幹事長)は十七日の会見で、送金に関し「私は関係していない」と主張。十八日の会見でも「党全般の責任が私にあるのは当然だが、収入、支出の最終判断をしており、個別の選挙区の選挙戦略や支援方針はそれぞれ担当で行っている」と述べた。(中略)(幹事長代理は十八日に)(元選対委員長)の説明責任について問われ「根掘り葉掘り、党の内部のことまで踏み込まないでほしい」と記者に「逆ギレ」した。(後略)

〈東京新聞 5月19日 朝刊 2面〉

お気付きでしょうか。送金に関し「関係していない」と主張
している一方で、翌日の発言では「収入、支出の最終判断を
して」いると言っています。最終判断をする唯一無二の役職
だと言っているのです。

“口裏合わせの無い不用意な嘘”が使用出来る立場ではない
人間が、口裏合わせをする余裕無しに発言を求められた場合
にとる行動とは、隠蔽や逃亡なのです。したがって、今回の
幹事長の発言、そして同じ場で幹事長代理が「口を滑らせた」
事によって出た発言は、事実にもとづいた発言である可能性
が高いのです。

“口裏合わせの無い不用意な嘘”が使用出来る立場の人間は、
何故“口裏合わせの無い不用意な嘘”が使用出来るかご存知
でしょうか。口裏合わせが無くとも、不用意な嘘に合わせて
周りが忖度するからです。それで命を絶った者もいましたね。

ところで、件の事件の実行犯で逮捕・起訴され公判中の身で
ありながら、黒幕に忖度し、仰々しい反省の弁を隠れ蓑にし
つつ、真相を語らず、いまも黒幕に合わせた新しい嘘を騙り、
国民を欺き続ける者が目の前にいる事にお気づきの方はどれ
くらいいるのでしょうか。

仰々しい反省の弁を隠れ蓑にして新しい嘘を騙ると言う行動
が、常識的な国民の想像を遥かに超越した悪意であり、なか
なか見抜く事は難しいのかも知れません。

(前略)2019年の参院選広島選挙区を巡る買収事件で、公職選挙法違反(買収など)の罪に問われた(元衆院議員)の公判が18日、(中略)結審した。(中略)判決は6月18日に言い渡される。(中略)(元衆院議員)はこの日の意見陳述で「私が行ったことはいかなる理由でも許されず、政治不信を招き深くおわびする。事件の責任を一身に背負ってこれからの人生を歩んでいきたい」などと謝罪した。弁護側は最終弁論で、地元議員らへの現金供与の大半が買収にあたると認めた上で「党勢拡大活動や自身の政治基盤の確立といった、より主となる目的があって、買収一辺倒の行為ではない」などと執行猶予付き判決を求めた。(後略)

〈日経新聞 5月19日 朝刊 38面〉

(前略)買収に約三千万円を使ったとされ、(元衆院議員)は公判で「(原資は)私の手持ち資金」と主張したものの、党本部からの資金が原資になったとの疑惑がくすぶり続けている。(後略)

〈東京新聞 5月19日 朝刊 22面〉

「私の手持ち資金」から買収に使ったお金を出して、「私の
手持ち資金」から出すはずだった他の用途に、「党本部から
の資金」を使ったって事でしょう。

 
続きを読む...

posted by miraclestar at 03:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月21日

同窓会には、もう行かない

同窓会って、行った事ありますか。

本日はちょっとした身の上話をしてみたいと思います。もし
興味がありましたら、お付き合いください。

自分は、一回だけ、行った事があります。でも、正直あまり
楽しくはありませんでした。これから先どうなるかは分かり
ませんが、もう参加する事は無いのではないかと思います。

そもそも、大学に入ってから参加するようになった飲み会も、
最後の頃には楽しめなくなっていて参加するだけ苦痛でした。

そんな自分が同窓会に参加したからと言って、楽しめるわけ
がありませんでした。仲の良い友達がいたわけでもないのに。

そもそも、自分には友達がたくさんいるわけではありません。
幼稚園、小学校の時代からずっとそうです。中学校に入った
ばかりの頃は、同じクラスの人達が中庭でボール遊びをして
いて、「友達の輪に加われるかな」と期待して参加していた
時期もあったのですけれど、自分は運動神経がゼロで、特に
球技系はまったくセンスが無くて、ついていけなかったので、
すぐに挫折しました。それだけが原因ではありませんでした
けど、仲の良い友達は多くありませんでした。

部活はパソコン部に入りプログラミングに没頭していました。
パソコン部の中でもバカにされていたなぁ。人知れずやって
いた事は、学校の帰り大きな図書館に寄ってコンピュータ書
コーナーに行って、プログラミング関係の本をひたすら読み
漁っていた事です。

勉強はあまり上手ではありませんでした。集中力は生み出す
事に成功していたと思うけど、力技で積み上げていった感じ。
いま、様々な受験テクニックに触れる機会を得て、「そんな
やり方があったのか」と驚かされる事が多いけれども、いま
から振り返ると、遠回りをいっぱいしていたと思います。

大学に入ってから色々経験して、志が変わり、ある本の影響
を受けて映画館で映画をいっぱい見ていた時期がありました。
それがいまにつながっている事は間違いありません。

あるインターネット映像配信の先駆け的サービスが、かつて
ありました。そのサービスを使い一回だけ生配信をやった事
がありました。観客はゼロでした。とは言うものの、挫折感
はありませんでした。それまでの経験から、どうすればこれ
が上達するか、イメージが出来ていたからです。あとはそれ
に沿って実践していくだけだ、と思っていたのです。

その後、まったく関係無い理由で、活動は休止に追い込まれ、
生配信をやったのは、その一回きりとなってしまいましたが、
いまからでも、実践すれば上達するとは思っています。

まあ、でもね。とは言うものの、しゃべりに関してまったく
素養がなかった人間が、成人してから始めたところで、少し
でも素養があった人間と競争してみて、勝負になるのか、と
言う問題はあるのかも知れません。

 
続きを読む...

posted by miraclestar at 00:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月16日

本当にこのやり方でいいのか

本当にこのやり方でいいのかと、日本人の皆さまには、腰を
落ち着けて、じっくり考えてみて欲しいと思います。

(前略)コンビニ大手「セブン―イレブン」本部と東大阪南上小阪店(大阪府東大阪市)の元オーナーが契約解除を巡り対立している問題で、休業している同店の併設駐車場にセブン側が建設した仮店舗が4日、営業を始めた。(中略)時短営業をして契約を解除された(元オーナー)は、「物言うオーナーをつぶすためにここまでやる。嫌がらせ以外の何ものでもない」と批判した。(後略)

〈サンケイスポーツ 5月5日 (朝刊) 21面〉

本部側が強気に出る事が出来る背景には、対立を巡って本部
に、元オーナー側を批判するクレームが寄せられている事が
ある様です。

(前略)加盟店はセブン本部から年中無休・24時間営業を義務付けられているが、(元オーナー)は人手不足から2019年2月に深夜営業を中止。本部は同年12月に契約を解除し、翌年に店舗明け渡しを巡り大阪地裁に提訴。(元オーナー)も契約解除無効を求めて提訴した。(後略)

〈サンケイスポーツ 5月5日 (朝刊) 21面〉

まず最初に気をつけなければならない事は、その店舗の行く
末を決定付ける上で、誰の意見を採用するのが適切かと言う
論点です。本部にクレームを寄せる人の意見は、確かに店に
関係する意見のひとつである事は間違いありませんが、それ
がすべてではありません。クレームを言う人の意見が大きく
聞こえてしまうかも知れませんが、それを理由に強行手段に
打って出るのは都合の良い解釈に過ぎないでしょう。

ところで、クレームを言う人が現れる背景には、何があるの
でしょうか。ひとつには、出る杭を打ちたくなる日本の空気
がある事は間違いないでしょう。

ところで、日本の空気はこれだけではありません。

件の店舗が建つ土地のオーナーは、加盟店のオーナーとは別
で、土地のオーナーは本部の側についた様です。クレームを
言う人だけではなく、土地のオーナー迄切り崩された様です。

この問題の根の深さを理解して頂く為に、過去の事例を振り
返ってみましょう。かつて日本の幹線鉄道は国有で日本国民
の共有財産でした。それがいまから30年ちょっと前に民営化
されてしまい、国民共通の価値がある財産が、私有財産とさ
れてしまいました。国民共通の価値がある財産から得られる
収益が外国人に搾取される構造へと転換してしまったのです。
このとき、転換を進めた政治家は、何を追い風にして国民を
言いくるめる事に成功したか、ご存知でしょうか。

クレームを言う人が現れる背景にある日本の空気は、過去の
この事例から変わらない“日本社会に蔓延し続ける空気”と
言えるのではないかと思います。

 
posted by miraclestar at 03:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

欧州ではAI顔認識カメラが街中に張り巡らされている

欧州連合(EU)が“裏システム”の存在を公式に認めました。

(前略)欧州連合(EU)欧州委員会は(四月)二十一日、人工知能(AI)利用を巡るEU初の規制案を発表した。(中略)公の場での顔認証システムも厳しく規制し、捜査当局によるリアルタイムの利用を原則禁止した。(中略)顔認証など遠隔での生体認証システムの捜査利用は「行方不明の子供の捜索」「特定の差し迫ったテロの阻止」などを禁止の例外とした。(後略)

〈東京新聞 4月23日 朝刊 7面〉

人権や民主主義に配慮して「公の場での顔認証システム」の
規制をするフリをしながら、シレッと“裏システム”の合法
化を忍び込ませて来ました。

「行方不明の子供の捜索」や「特定の差し迫ったテロの阻止」
が出来ると言う事は、捜査当局に接続されたAI顔認識カメラ
(=遠隔での生体認証システム)が街中に張り巡らされている
と言う事です。この事実を欧州市民は知っていて、なおかつ
市民権を得ていると言う事なのでしょうか。

日本と欧州では犯罪の発生状況等、市民が置かれている状況
が異なり、日本人の感覚と欧州市民の感覚がまったく同じで
あるとは言えない状況があるのかも知れません。

それにしても、遠隔での生体認証システムが街中に張り巡ら
されている事は、欧州市民が望んだ事だったのでしょうか。

 
続きを読む...

posted by miraclestar at 02:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月08日

隠蔽された独裁権力

国会は「国権の最高機関」であると、憲法に謳われています。

では、与野党の国会議員が、ある議題について意見の一致が
あり、超党派の議連をつくったとするならば、それが内政の
課題である限り、動かせない事は何一つ無い、はずです。

在日韓国人元BC級戦犯の李鶴来(イハンネ)さんが先月(三月)、九十六年の生涯を閉じた。日本軍の捕虜監視員に動員されて戦犯として裁かれたうえ、戦後は「外国人」扱いされて援護の対象外に。(中略)

(四月)一日、東京・永田町の衆院第二議員会館で開かれた集会。李さんが会長を務めた在日韓国・朝鮮人元BC級戦犯関係者でつくる「同進会」の副会長で、父親が戦犯だった朴来洪(パクネホン)さん(六五)が哀悼の言葉を述べた。同進会の元戦犯で最後の一人だった李さんは先月(三月)(中略)二十八日に帰らぬ人となった。集会は同進会結成六十六年を記念し、元戦犯の問題解決を進める救済法制定のために企画されたが、急逝した李さんの追悼会のようになった。(中略)

李さん(は)(中略)日本支配下の朝鮮半島で生まれ、一九四二年、十七歳のときに日本軍の捕虜監視員としてタイに渡った。当時の日本総督府は朝鮮や台湾の青年を動員し、約三千人がアジアの戦場に送られた。泰緬鉄道の建設現場に配属された李さんは英国や豪州の捕虜を監視したが、二年の契約が過ぎても帰らせてもらえず、終戦を迎えた。

待っていたのは連合国による戦犯法廷。捕虜虐待の罪で死刑判決を言い渡された。約八カ月、シンガポールの刑務所で死刑囚として過ごした後に減刑され、五一年に東京の巣鴨プリズンに移された。翌五二年、サンフランシスコ平和条約の発効で、李さんら朝鮮半島出身者らは日本国籍を失った。

日本人として戦争の罪を裁かれながら、「外国人」とみなされて日本政府の援護から排除される―。(中略)差別的な扱いを許せず、五五年、仲間と「韓国出身戦犯者・同進会」を設立。(中略)

生前、李さんは「日本人戦犯の場合は自分の国のために死んでいくんだとまだ思えるのだろうが、韓国人の場合はそういう気持ちさえ持てなかった。だれのために、何のために死ななければならなかったのか」と語っていた。(中略)

(超党派の議連)は特別給付金を支給する法案をまとめたが、成立していない。(後略)


〈東京新聞 4月2日 朝刊 20面〉

記事にはありませんが、件の集会には与野党の有名どころが
一通り参加していた様です。与野党の国会議員が、この議題
について意見の一致があり、超党派の議連をつくったのにも
かかわらず、事態は動かず、当事者の死を迎えると言う結末
に至ってしまったのです。これは明らかに内政の課題である
にもかかわらず、事態は動かなかったのです。

国会は「国権の最高機関」である、との謳い文句は嘘であり、
茶番なのです。では、国会が「国権の最高機関」ではないと
するならば、国会の上に君臨する「隠蔽された独裁権力」は
どこで生まれ、どの様にして受け継がれて来たのでしょうか。

 
posted by miraclestar at 20:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月07日

謎の動画、一本2500万円(最大)也

最近、動画投稿サイトで、目的が分からない謎の動画が投稿
されているのを数多く見かけるようになりました。その多く
は五分強の長さで、五分を切るものは無い様です。タイトル
にある共通の文字列が含まれているのが特徴です。文字列は
アルファベット1文字と7文字の組み合わせで、有りそうな英
単語を当てはめてみると「ライブ・オン・デマンドのライブ」
であるかのように納得させられてしまいそうになります。

しかしながら、これこそ巧妙に練られた戦略が狙った通りの
誤認と言えるでしょう。これ、何だかご存知ですか。

動画の説明欄には、目的の説明等無く、ある共通の文字列が
何を意味するのか理解出来るWebサイトへのリンクも見当たり
ません。動画に関連するWebサイトを一通り見まわしてみても
遂に説明が見当たらなかった為、意を決して、件の文字列を
検索にかけてみたところ、驚きの事実が分かりました。

この動画を投稿すると、何と国から最大2500万円の給付金が
貰えると言うのです。ある共通の文字列はこの給付金制度の
名称でした。いわゆる新型コロナウイルス関連の給付金です。

その250分の1の支援さえ充分に届かない者がいる中、天と地
程の格差がある世界が広がっていた様です。しかも一見した
だけではそれと分からない様な名称迄考えられていた様です。

いまのところ情報が不足している為、この制度の善し悪しに
ついて直接言及する事は控えますが、実態としてこの給付金
を誰がどれだけ受け取っているのか、制度が始まって充分な
時間も経ち、統計を出す事が出来るだけの実績が、公開情報
として積み上がっているのではないでしょうか。

 
続きを読む...

posted by miraclestar at 21:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月05日

「こども庁」が出来たら何が起きるのか

自民党が新たな利権の創出に向けて早くも次の動きを始めて
いる様です。もちろん、推進者として役割を演じている議員
にとっては、それなりの意義を感じて取り組んでいる事なの
かも知れませんが、これを機会と捉えて動向を見守っている
利権共同体の構成員達は違う事を考えているでしょう。

自民党が目論む「こども庁」は、新たな自民党の利権となる
事は間違いありません。大義名分は後付けでしかありません。

ところで、ここ迄は、自民党がこれ迄行ってきた行動の前例
から、容易に類推出来る事だと思うのですが、断言出来る人
はあまり多くないのではないかと思います。「こども庁」が
出来たとして、様々な政策が実行に移されたとして、実行を
担う民間人や民間企業の参加があったとして、しばらくして
から、実行を担う民間人や民間企業が利権共同体の構成員で
ある事が明らかとなり、何かしらの告発で癒着が裏付けられ
「やっぱり自民党の利権だったね」と言う事が確認出来る様
になる、と言う流れになるのではないでしょうか。ここ迄の
結果を事前に断言出来る様になるには、どの様にしてこれが
自民党の利権になるのか、その仕組みを理解し説明出来る様
になる必要があると思います。

では、「こども庁」が一体どう言う仕組みで自民党の利権と
なるのでしょうか。「こども庁」が出来たら何が起きるのか、
想像を膨らませてみましょう。

 
続きを読む...

posted by miraclestar at 23:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2021年05月01日

10万円ではじめるプログラミング講座 8

全ての国民に10万円が行きわたると言う事で、様々な事情の
方がいらっしゃるかと思いますが、それが出来る人に向けて、
Excelを活用したプログラミング講座を執筆する事にしました。
「ゲームをやった時間を記録して集計出来るプログラム」を
自分で作れるようになる事を目標にしています。

前回8月9日の更新から随分時間が経ってしまいました。当時、
AI顔認識カメラと赤外線カメラの増加速度が頂点に向かって
上昇し続けており、更新作業を中断せざるを得ませんでした。

状況の変化が多少あった事と、GW期間中に巣籠りをしている
皆様に少しでも暇つぶしを提供出来ればと思い、続きを更新
する事に決めました。

前回の作業内容を忘れてしまったと言う方は、復習を兼ねて、
前回の作業を最初からやり直してみると良いかも知れません。
講座は、前回の作業内容の続きから始まります。

前回つくったプログラムが何だったか、お分かり頂けました
でしょうか。誰もが知っている“あれ”です。ところでもし、
ご自身が“あれ”をお持ちでしたら、“あれ”を取り出して、
前回つくったプログラムと、比べてみてください。

何か違いは見当たりますか。

前回つくったプログラムは、計算して答えを出した後、その
答えを使って、続きの計算をする事が出来ない事に気付くの
ではないかと思います。

例えば、"1" "+" "1" "="と入力して 2 が表示された後に"+"
"1" "="を入力して 3 を計算させる事が出来ません。改めて
"2" "+" "1" "="と入力しなければならないのです。

また、いつも使い慣れている“あれ”ならば"1" "+" "2" "="
と入力して 3 が表示された後に"="を押せば、"3+2="の結果
を計算させる事が出来るのに、前回つくったプログラムには
その機能がありません。

機種によって違いがある様ですが、“あれ”には"1" "+" "2"
"="と入力して 3 が表示された後に"4" "="を押せば、"4+2="
の結果を計算させる機能があるのに、これもありません。

前回つくったプログラムを開きます。ファイル名は
「den-dentaku.xlsm / den-dentaku.xls」として
保存したと思います。

ファイルを開くと、まっさらなExcelブックに「セキュリティ
の警告 マクロが無効にされました。」と言う表示(表現は
バージョンによって違うかも知れません)が出現している事
が確認出来ると思います。忘れずマクロを有効に設定します。

プログラムの改造を始める前に、前回つくった内容を消して
しまう事のない様、ファイル名を変えておきましょう。

ツールバー等にある「名前を付けて保存」をクリックします。

ファイル名は「den-dentaku2.xlsm / den-dentaku2.xls」等
が良いでしょう。

ファイルを開いた状態で、「Alt+F11」を押します。
「Microsoft Visual Basic」の画面が出て来ると思います。
そのまま「F7」を押して、「コード」画面を開きます。

書き換えが必要なのは、ExecuteCalc関数とその関連部分です。

enmEnzanHoの定義を書き換えます。

「コード」の先頭にカーソルを持っていき(コンボボックス
から (General)(Declarations) を選ぶ操作でも良い)、以下
のコードを探します。

Enum enmEnzanHo
enzNoTouch = 0 'NoTouch 何もしない
enzN1eqN1opN2 = 1 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
enzKeqN1opN2 = 2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
End Enum

これを次の様に書き換えます。

Enum enmEnzanHo
enzNoTouch = 0 'NoTouch 何もしない
enzN1eqN1opN2 = 1 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
enzKeqN1opN2 = 2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
enzKeqKopN2 = 3 'Kekka = Kekka (+-*/) Nyuryoku2
enzN1eqK = 4 'Nyuryoku1 = Kekka
End Enum

enzKeqN1opN2 と enzN1eqK が新たに書き加えられた定義です。

ExecuteCalc関数を書き換えます。

以下に、前回の講座でも示したExecuteCalc関数の骨格を示し
ます。コードは同じですが、コメントが若干異なります。

Private Function ExecuteCalc(intEnzanshi As Integer) As Boolean

Dim EnzanHo As enmEnzanHo

If cmJoutai <= cmAllClear Then '☆1
ExecuteCalc = False
Exit Function
End If

If strNyuryoku = "" Then
ExecuteCalc = False
Exit Function
End If

'strEnzanshi 数値の前に押した演算子を記憶(+-*/)
'intEnzanshi 今回の呼出で押した演算子キー(+-*/=)

'Joutai strEnz intEnz EnzHo
'cmN1 "" "=" Exit 1◆ △ ×無効操作
'cmN1 "" "+-*/" NoTouch  1◆ ▽ ○通常操作
'cmN1 "+-*/" "=" K =N1opN2 1◇ △ △=の後AC押さずに数値入力、続いて= ☆8
'cmN1 "+-*/" "+-*/" NoTouch 1◇ ▽ △=の後AC押さずに数値入力、続いて+-*/
'cmN2 "" 2◆   ―有り得ない
'cmN2 "+-*/" "=" K =N1opN2 2◇ △ ○通常操作
'cmN2 "+-*/" "+-*/" N1=N1opN2 2◇ ▽ ○通常操作
'cmK "" 3◆   ―有り得ない
'cmK "+-*/" "=" K =K opN2 3◇ △ △=の後すぐに= ☆8
'cmK "+-*/" "+-*/" N1=K 3◇ ▽ △=の後すぐに+-*/ ☆8

ExecuteCalc = True '☆2
strError = ""
EnzanHo = enzNoTouch

Select Case cmJoutai
Case cmNyuryoku1 '演算子の左の数字を入力
'☆3
Case cmNyuryoku2 '演算子の右の数字を入力
'☆4
Case cmKekka '計算結果が表示されている
'☆5
End Select

Select Case EnzanHo
Case enzNoTouch 'NoTouch 何もしない

Case enzN1eqN1opN2, enzKeqN1opN2
'☆6

End Select

If ExecuteCalc Then '☆7
Select Case intEnzanshi
Case Asc("+"), Asc("-"), Asc("*"), Asc("/") '+-*/
strEnzanshi = Chr(intEnzanshi) '数値の前に押した演算子を記憶(+-*/)
Case Asc("="), vbKeyReturn '=

End Select
End If
End Function

☆8が書き換えられたコメントです。

ExecuteCalc 関数内、☆1〜☆7について説明します。

☆1、☆2、☆7は、前回の講座で示した解説と同じです。

☆3には、以下のコードを書き加えます。

If strEnzanshi = "" Then
'1◆

If intEnzanshi = Asc("=") Then
'1◆ △ ×無効操作
ExecuteCalc = False
Exit Function
End If
Else
'1◇
If intEnzanshi = Asc("=") Then
'1◇ △ =の後AC押さずに数値入力、続いて=
EnzanHo = enzKeqN1opN2
Else
'1◇ ▽ =の後AC押さずに数値入力
'EnzanHo = enzNoTouch
'数値入力をして"+-*/"押した
'⇒AC押した事にして動作継続
End If
End If

dblNyuryoku1 = ConvertNyuryoku()

太字が今回追加したコードです。

cmAllClearからcmNyuryoku1に遷移した場合、strEnzanshiは
空("")です。cmKekkaから遷移した場合は、strEnzanshiには
演算子("+-*/")が代入されています。前回の講座では、二者
の場合分けをコードに反映しませんでしたが、今回は、後者
について処理するコードを追加しました。

cmKekkaからcmNyuryoku1に遷移した場合、演算子の右の数字
は、dblNyuryoku2に記憶されている状態です。この状態で"="
を押す操作があった場合は、dblNyuryoku1に入力した数値を
記憶して、dblKekkaにdblNyuryoku1と「dblNyuryoku2に記憶
されている数値」を使って演算した結果を代入します。一方、
演算子キー("+-*/")を押す操作があった場合はdblNyuryoku1
に入力した数値を記憶して処理を続行可能にします。

☆4には、以下のコードを書き加えます。

dblNyuryoku2 = ConvertNyuryoku()
If strEnzanshi = "" Then
'2◆

Else
'2◇

If intEnzanshi = Asc("=") Then
'2◇ △ ○通常操作
EnzanHo = enzKeqN1opN2
Else
'2◇ ▽ ○通常操作
EnzanHo = enzN1eqN1opN2
End If
End If

太字が今回追加したコードです。

ここでstrEnzanshiについて、確認して頂きたい事があります。

strEnzanshiを選択状態にしてから、「Ctrl+F」キーを押して
みてください。「検索」ウインドウを表示されると思います。
このウインドウを使って、コード内でstrEnzanshiが使われて
いる場所を確認する事が出来ます。

strEnzanshiに値を代入するコードは、ふたつしか無いと言う
事が分かるのではないかと思います。ひとつは、ExecuteCalc
関数の末端部、そしてもうひとつは、ProcessKeyPress関数の
"A", "a"キーを押したときに実行されるコードだと思います。

この事から、strEnzanshiが空("")となるのは、cmAllClearに
遷移したときに限られる事が分かります。

続いてcmNyuryoku2について、確認して頂きたい事があります。

cmNyuryoku2を選択状態にしてから、「Ctrl+F」キーを押して
みてください。「検索」ウインドウを表示されると思います。

cmJoutaiにcmNyuryoku2を代入するコードは、ひとつしか無い
と言う事が分かるのではないかと思います。

これらの事から、cmNyuryoku2に遷移する前にはExecuteCalc
関数がintEnzanshiに"+-*/"のうちどれかが代入された状態で
実行されており、しかも必ず処理が成功している事が分かり
ます。この事からcmNyuryoku2に遷移したとき、strEnzanshi
には、必ず演算子("+-*/")が代入されている事が分かります。

前回の講座では、分量が多かった事もあり、strEnzanshiが空
("")となる事は有り得ないとして、strEnzanshiの場合分けを
コードに反映しませんでしたが、今回追加しました。

例えば、将来の改造で前提が崩れる事は十分有り得る事です。

☆5には、以下のコードを書き加えます。

If strEnzanshi = "" Then
'3◆

Else
'3◇
If intEnzanshi = Asc("=") Then
'3◇ △ =の後すぐに=
EnzanHo = enzKeqKopN2
Else
'3◇ ▽ =の後すぐに+-*/
EnzanHo = enzN1eqK
End If
End If


☆6には、以下のコードを書き加えます。

If strEnzanshi = "/" Then
If dblNyuryoku2 = 0 Then
ExecuteCalc = False
strError = "0で除算できません"
Exit Function
End If
End If

Select Case strEnzanshi
Case "" '◆
'EnzanHo = enzNoTouch となり、ここのコードは実行されない

Case "+" '◇+ △▽
Select Case EnzanHo
Case enzN1eqN1opN2 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
dblNyuryoku1 = dblNyuryoku1 + dblNyuryoku2
Case enzKeqN1opN2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
dblKekka = dblNyuryoku1 + dblNyuryoku2
Case enzKeqKopN2 'Kekka = Kekka (+-*/) Nyuryoku2
dblKekka = dblKekka + dblNyuryoku2

End Select

Case "-" '◇- △▽
Select Case EnzanHo
Case enzN1eqN1opN2 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
dblNyuryoku1 = dblNyuryoku1 - dblNyuryoku2
Case enzKeqN1opN2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
dblKekka = dblNyuryoku1 - dblNyuryoku2
Case enzKeqKopN2 'Kekka = Kekka (+-*/) Nyuryoku2
dblKekka = dblKekka - dblNyuryoku2

End Select

Case "*" '◇* △▽
Select Case EnzanHo
Case enzN1eqN1opN2 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
dblNyuryoku1 = dblNyuryoku1 * dblNyuryoku2
Case enzKeqN1opN2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
dblKekka = dblNyuryoku1 * dblNyuryoku2
Case enzKeqKopN2 'Kekka = Kekka (+-*/) Nyuryoku2
dblKekka = dblKekka * dblNyuryoku2

End Select

Case "/" '◇/ △▽
Select Case EnzanHo
Case enzN1eqN1opN2 'Nyuryoku1 = Nyuryoku1 (+-*/) Nyuryoku2
dblNyuryoku1 = dblNyuryoku1 / dblNyuryoku2
Case enzKeqN1opN2 'Kekka = Nyuryoku1 (+-*/) Nyuryoku2
dblKekka = dblNyuryoku1 / dblNyuryoku2
Case enzKeqKopN2 'Kekka = Kekka (+-*/) Nyuryoku2
dblKekka = dblKekka / dblNyuryoku2

End Select

End Select

Case enzN1eqK 'Nyuryoku1 = Kekka
dblNyuryoku1 = dblKekka


太字が今回追加したコードです。

「F5」キーを押して動作確認してみましょう。



動かない、ですね。

忘れないうちに、ここまでつくって来たプログラムを保存し
ましょう。ツールバー等にある「保存」をクリックします。

ここで一息つきましょう。ここから先は少し長くなります。



今回追加したコードが、正しく実行されているか、確かめて
みましょう。☆3で追加したコードを確認します。

If strEnzanshi = "" Then
'1◆

If intEnzanshi = Asc("=") Then
'1◆ △ ×無効操作
ExecuteCalc = False
Exit Function
End If
Else
'1◇
● If intEnzanshi = Asc("=") Then
'1◇ △ =の後AC押さずに数値入力、続いて=
EnzanHo = enzKeqN1opN2
Else
'1◇ ▽ =の後AC押さずに数値入力
'EnzanHo = enzNoTouch
'数値入力をして"+-*/"押した
'⇒AC押した事にして動作継続
End If
End If

dblNyuryoku1 = ConvertNyuryoku()

●で示した行にカーソルをもっていき「F9」キーを押します。
行全体が赤く反転された状態に変化すると思います。

「F5」キーを押します。

"1" "+" "2" "="キーを順番に押します。3 が表示されました
か。そのまま続いて"4" "="キーを順番に押します。この操作
では、"4+2="の結果が表示されれば正しく実行されていると
言えます。

突然画面が切り替わり、コード画面が表示されたのではない
かと思います。先程赤く反転された行にカーソルがあり黄色
い矢印と一部黄色く反転された範囲が確認出来ると思います。

これは、実行中のコードを一時中断して、一行一行、動作を
追う事が出来る様にする機能です。

intEnzanshiにマウスポインタを合わせてみてください。する
と、ツールチップが表示されて、「intEnzanshi = ○」等と
intEnzanshiに代入されている値が確認出来ると思います。

intEnzanshiには「今回の呼出で押した演算子キー("+-*/=")」
が代入されているはずです。ところでここで表示されるのは、
コンピュータの内部処理でキーを示すものとして付けられて
いる数値です。今回の呼出では"="キーを押しているので"="
キーを示すものとして付けられている数値が代入されている
はずです。Asc関数は、コンピュータの内部処理でキーを示す
ものとして付けられている数値を得る関数で、Asc("=")関数
が返す値は"="キーを示すものとして付けられている数値です。

そうなると、正しく実行されているか確かめる為にAsc("=")
関数が返す値が知りたくなりますが、マウスポインタを合わ
せても、Asc("=")を選択状態にしても、Asc("=")関数が返す
値は表示されません。

これを表示するには、「イミディエイト」ウィンドウを使い
ます。コード画面で「Ctrl+G」キーを押すと、表示されます。

「イミディエイト」ウィンドウで「print Asc("=")」と入力
し「Enter」キーを押してください。Asc("=")関数が返す値が
表示されます。「print Asc("=")」の代わりに「? Asc("=")」
や「?Asc("=")」と入力しても同じ結果が表示されます。

表示された数値はintEnzanshiと一致しましたか。

続いて「F8」キーを押します。「F8」キーを押すとコードを
一行だけ実行して再び実行を中断します。正しく実行されて
いればIf内の1行目に黄色い矢印が移動するはずです。

先程と同様にして、マウスポインタをEnzanHoとenzKeqN1opN2
に合わせるとそれぞれの値が表示されると思います。

再び「F8」キーを押します。再びマウスポインタを合わせて
それぞれの値を確認します。値は変化しましたか。

どうやら正しく実行されている様だと言う事が確認出来たら
「F5」キーを押して実行を再開します。

次に、"a" "1" "+" "2" "="キーを順番に押します。そのまま
続いて"4" "+"キーを順番に押します。この操作では、"4+"の
演算子の右の数字の入力待ち状態になれば正しく実行されて
いると言えます。

どうやら正しく実行されている様だと言う事が確認出来たら
「F5」キーを押して実行を再開します。

続いて"5" "="キーを順番に押します。この操作では、"4+5="
の結果が表示されれば正しく実行されていると言えます。

「ESC」キーを押してプログラムを一旦終了します。



☆5で追加したコードを確認します。

If strEnzanshi = "" Then
'3◆

Else
'3◇
● If intEnzanshi = Asc("=") Then
'3◇ △ =の後すぐに=
EnzanHo = enzKeqKopN2
Else
'3◇ ▽ =の後すぐに+-*/
EnzanHo = enzN1eqK
End If
End If


●で示した行にカーソルをもっていき「F9」キーを押します。
行全体が赤く反転された状態に変化すると思います。

「F5」キーを押します。

"1" "+" "2" "="キーを順番に押します。3 が表示されました
か。そのまま続いて"="キーを押します。この操作では、"3+
2="の結果が表示されれば正しく実行されていると言えます。

次に、"a" "1" "+" "2" "="キーを順番に押します。3 が表示
されましたか。そのまま続いて"+"キーを押します。この操作
では、"3+"の演算子の右の数字の入力待ち状態になれば正し
く実行されていると言えます。

続いて"4" "="キーを順番に押します。この操作では、"3+4="
の結果が表示されれば正しく実行されていると言えます。

突然画面が切り替わり、コード画面が表示されたのではない
かと思います。先程赤く反転された行にカーソルがあり黄色
い矢印と一部黄色く反転された範囲が確認出来ると思います。

ところで、何か様子がおかしくありませんか。☆3で追加した
赤●の行に黄色い矢印がついているのではないかと思います。

☆5で追加した赤●の行には一度も止まらなかったと思います。

おかしいですね。

「ESC」キーを押してプログラムを一旦終了します。



原因追究の為、ProcessKeyPressの"="キーを処理するコード
を確認します。

Case Asc("="), vbKeyReturn '=
● If ExecuteCalc(Asc("=")) Then
strNyuryoku = ""
cmJoutai = cmKekka
'★→cmK: "="押したとき、正常であればcmK

Call Senmonkakaigi(dblKekka, True)

ElseIf strError <> "" Then
cmJoutai = cmJoutai * -1
'★→cmE: エラーが発生したときcmE
End If
UpdateDisplay

●で示した行にカーソルをもっていき「F9」キーを押します。
行全体が赤く反転された状態に変化すると思います。

「F5」キーを押します。

"1" "+" "2" "="キーを順番に押します。

突然画面が切り替わり、コード画面が表示されたのではない
かと思います。先程赤く反転された行にカーソルがあり黄色
い矢印と一部黄色く反転された範囲が確認出来ると思います。

ここから先の処理は追究対象外なので「F5」キーを押します。

3 が表示されましたか。そのまま続いて"="キーを押します。

突然画面が切り替わり、コード画面が表示されたのではない
かと思います。先程赤く反転された行にカーソルがあり黄色
い矢印と一部黄色く反転された範囲が確認出来ると思います。

「F8」キーを押すとExecuteCalc関数内の1行目に黄色い矢印
が移動するはずです。

「F8」キーを二回押します。☆1からの4行は、問題無く実行
されるのではないかと思います。

続いて「F8」キーを押すと、そこでExecuteCalc関数が処理を
中断して終了してしまう事が分かると思います。strNyuryoku
が空("")である為です。

☆1からの4行に続く4行は、演算子キー("+-*/")や"="キーを
連続して押す操作を、無効として処理を中断する為に設けた
コードでした。例えば、演算子キー("+-*/")を押した後連続
して演算子キー("+-*/")を押すとか、演算子キー("+-*/")を
押した後数字を入力せずに"="キーを押すとかの操作をすると、
strNyuryokuが空("")である為、処理を中断する様になって
いるのです。

しかしながら、実際のところ、この4行がなくともプログラム
は異常を来す事無く動きます。strNyuryokuが空("")のとき、
ConvertNyuryoku()関数は0を返すので、その後の処理を続け
ても、0で演算する事を試みるだけだからです。

この4行が追加された経緯を言うと、実は今回の講座でつくる
プログラムの正しく動作する版が先にあって、そこから不要
不急のコードを削る事で前回の講座でつくるプログラムをつ
くった経緯があり、☆5のコードを削った結果、ExecuteCalc
関数で、演算子キー("+-*/")や"="キーを連続して押す操作に
反応する必要が無くなった為、後から追加したコードでした。

前回の講座でつくったプログラムでは、この4行が追加された
事によって、演算子キー("+-*/")を押した後連続して演算子
キー("+-*/")を押すとか、演算子キー("+-*/")を押した後数
字を入力せずに"="キーを押すとかの操作をした場合に、0で
演算する事を試みる無駄を省く効果がありました。



ここで、前回の講座で導入した、ある特定の条件下で数値が
「中抜き」されていくプログラムについて、「中抜き」され
た数値が分かる様に改造しようと思います。

ProcessKeyPressの Select Case KeyAscii と End Selectの
間のCase Asc("="), vbKeyReturnの内容を、以下の様に書き
換えます。

Case Asc("="), vbKeyReturn '=
If ExecuteCalc(Asc("=")) Then
strNyuryoku = ""
cmJoutai = cmKekka
'★→cmK: "="押したとき、正常であればcmK

Dim dblKekkaKaigimae As Double
dblKekkaKaigimae = dblKekka


Call Senmonkakaigi(dblKekka, True)

If dblKekkaKaigimae - dblKekka > 0 Then
strError = dblKekkaKaigimae - dblKekka
strError = strError + "億円中抜きされました(Press C key.)"

cmJoutai = cmError3
End If


ElseIf strError <> "" Then
cmJoutai = cmJoutai * -1
'★→cmE: エラーが発生したときcmE
End If
UpdateDisplay

太字が今回追加したコードです。

忘れないうちに、ここまでつくって来たプログラムを保存し
ましょう。ツールバー等にある「保存」をクリックします。

 
続きを読む...

posted by miraclestar at 05:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする