2020年06月21日

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

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

今回も、つくってみたプログラムを改造して、Excelを使った
プログラミングの理解を深める事をやってみようと思います。

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

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

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

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

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

今回は、テキストボックスに数値を入力し終わると、自動的
に“%”の表示を追加して、入力した数値が%の単位である事
がわかる仕組みにしてみようと思います。

今回は、ちょっと大掛かりな改造が必要になります。

まず、テキストボックスに二種類のイベントプロシージャを
組み込みます。「Enter」と「Exit」です。

コード画面を表示させると、画面の上部にコンボボックスが
二つ付いているのが確認出来ると思います。左にあるコンボ
ボックス(オブジェクト)を開いて、「txtRatioA」を選択し
ます。すると、右にあるコンボボックス(プロシージャ)の
内容が更新され、編集ボックスには、プロシージャのコード
が自動的に挿入されているのではないかと思います。ここで、
プロシージャとして「Enter」を選びます。

自動で以下のコードが挿入されていると思います。

Private Sub txtRatioA_Enter()

End Sub

ここで、txtRatioA_Enter の Enter の部分だけを選択状態に
して「F1」を押すと、Enter イベントプロシージャの説明を
閲覧する事が出来ると思います。説明していませんでしたが
コード画面のコードの中で、プログラムが理解出来る単語に
カーソルを合わせて「F1」を押すと、単語の説明を閲覧する
事が出来ます。ほとんどの単語は、カーソルを合わせて「F1」
を押すだけで説明を閲覧する事が出来るのですが、イベント
プロシージャだけは、単語の部分だけを選択状態にしないと
説明を閲覧する事が出来ないので注意が必要です。

そのまま連続して、プロシージャとして「Exit」も選びます。

自動で以下のコードが挿入されていると思うので、

Private Sub txtRatioA_Exit(ByVal Cancel As MSForms.ReturnBoolean)

End Sub

「txtRatioA_Exit」に以下の様にコードを書き加えます。

Private Sub txtRatioA_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim strText As String
strText = txtRatioA.Text
If Right(strText, 1) = "%" Then strText = Left(strText, Len(strText) - 1)
If IsNumeric(strText) Then
RatioA = CSng(strText)
txtRatioA.Text = strText + "%"
Else
txtRatioA.Text = CStr(RatioA) + "%"
End If
End Sub

「Exit」イベントプロシージャは、テキストボックスの編集
が終了し、他のテキストボックス等に編集可能な状態が移る
とき、その前に実行される仕組みです。

3行目、Right関数は、文字列の右側から指定した文字数だけ
取り出す関数です。右側から1文字取り出して“%”がついて
いるかどうか確認します。これは、利用者が入力した数値の
最後に“%”をつけたときに起こり得る出来事です。“%”が
ついていると、コンピュータは数値として認識する事が出来
ないため、“%”を取り除く事をしています。Left関数は左側
から指定した文字数だけを取り出す関数、Len関数は文字列の
長さを知る関数です。Then以降の右辺は、If内でRight関数を
使ってやった事の逆です。文字列の長さから1文字だけ少ない
文字数を割り出して、左側からその文字数だけを取り出して、
左辺に代入する、と言う意味です。

4行目は、入力された文字列が数値として認識出来るか、判別
しています。文字列が数値として認識出来れば、Then以降の
内容を、認識出来なければ、Else以降の内容を実行します。

5行目、テキストボックスに入力された数値を変数に代入して
保持し、後で参照出来る様にしています。後ほど改めて説明
します。

6行目、テキストボックスに入力された数値に“%”を加えて、
テキストボックスに表示しています。

8行目、テキストボックスに入力された文字列が、数値として
認識出来ない場合には、変数の更新はせず、保持してあった
古い数値を使って改めてテキストボックスに表示しています。

「txtRatioA_Enter」に以下の様にコードを書き加えます。

Private Sub txtRatioA_Enter()
Dim strText As String
strText = txtRatioA.Text
If Right(strText, 1) = "%" Then txtRatioA.Text = Left(strText, Len(strText) - 1)
End Sub

「Enter」イベントプロシージャは、テキストボックスが編集
可能な状態になるとき、その前に実行される仕組みです。

「txtRatioA_Exit」でテキストボックスに入力された数値に、
“%”の表示を追加しましたが、テキストボックスが編集可能
な状態になり利用者が入力を始める前に、この表示を取り除
く事をしています。

ここで、「計算」ボタンを押したときに実行されるコードを
含めて、プログラム全体でちょっと大掛かりな改造をしよう
と思います。

改造する前の状態では、「計算」ボタンを押したときに実行
されるコードは以下の様になっていると思います。

Private Sub CommandButton2_Click()
Dim RatioA As Single, RatioP As Single
Dim RatioAP As Single, RatioAE As Single
Dim RatioPP As Single, RatioPE As Single

RatioA = CSng(txtRatioA.Text)
RatioP = CSng(txtRatioP.Text)
RatioAP = CSng(txtRatioAP.Text)
RatioAE = CSng(txtRatioAE.Text)
RatioPP = CSng(txtRatioPP.Text)
RatioPE = CSng(txtRatioPE.Text)

txtAnsP.Text = (RatioA / 100 * RatioAP / 100 + RatioP / 100 * RatioPP / 100) * 100
txtAnsE.Text = (RatioA / 100 * RatioAE / 100 + RatioP / 100 * RatioPE / 100) * 100

End Sub

1〜3行目で変数を宣言しています。

5〜10行目で、テキストボックスに入力された数値を文字列型
から小数点以下を含む数値型に変換し変数に代入しています。

12・13行目で計算を実行し、結果を表示しています。

このうち、5〜10行目にある、テキストボックスに入力された
数値を変数に保持する機能は「Exit」イベントプロシージャ
で追加したプログラムと被るので削除しなければなりません。

そして、1〜3行目にある変数の宣言についてですがこの宣言
の仕方には問題があります。なぜなら、プロシージャの中で
宣言した変数は、プロシージャの中でしか使う事が出来ない
からです。しかも、(この宣言の仕方だと)プロシージャを
一度抜けると、変数は削除されて、次回プロシージャが実行
されるときまで内容が保持されないのです。

そこで、1〜3行目をカット&ペーストして、別の場所で宣言
する様に改造します。具体的には、コードの一番先頭で宣言
する様に改造します。1〜3行目をカットし、カーソルを一番
先頭に迄持っていきます。いくつもの Private Sub が並んで
いると思いますが、それらすべてより前にカーソルを持って
いきます。すると、左のコンボボックスには「(General)」と
右のコンボボックスには「(Declarations)」と表示されるの
ではないかと思います。そこでペーストします。

ここで宣言された変数は、「モジュール レベルで宣言された
変数」と呼ばれ、宣言したモジュール(同じ編集ボックスで
表示できる範囲内の事です)内のすべてのプロシージャから
参照出来る様になります。しかも、プログラムの実行中常に
内容が保持される様になります。

ここまで改造が済んだら、残りの作業を実行しましょう。

「txtRatioA」で「Enter」「Exit」イベントプロシージャを
追加しましたが以下に示す他のテキストボックスについても、
同様に追加します。

「txtRatioP」
「txtRatioAP」「txtRatioAE」
「txtRatioPP」「txtRatioPE」

「txtRatioA」をコピー&ペーストして、「RatioA」を
「RatioP」に書き換えるやり方で作業する事も出来ます。

その場合、「Enter」プロシージャには3カ所、「Exit」プロ
シージャには6カ所も書き換える場所があるので間違えない様、
気をつけてください。

雰囲気としては以下の様になっていると思います。

Private Sub txtRati0A_Enter()
Dim strText As String
strText = txtRati0A.Text
If Right(strText, 1) = "%" Then txtRati0A.Text = Left(strText, Len(strText) - 1)
End Sub
Private Sub txtRati0A_Exit(ByVal Cancel As MSF0rms.ReturnB00lean)
Dim strText As String
strText = txtRati0A.Text
If Right(strText, 1) = "%" Then strText = Left(strText, Len(strText) - 1)
If IsNumeric(strText) Then
Rati0A = CSng(strText)
txtRati0A.Text = strText + "%"
Else
txtRati0A.Text = CStr(Rati0A) + "%"
End If
End Sub

Private Sub txtRati0P_Enter()

End Sub
Private Sub txtRati0P_Exit(ByVal Cancel As MSF0rms.ReturnB00lean)

End Sub

Private Sub txtRati0AP_Enter()

End Sub
Private Sub txtRati0AP_Exit(ByVal Cancel As MSF0rms.ReturnB00lean)

End Sub

Private Sub txtRati0AE_Enter()

End Sub
Private Sub txtRati0AE_Exit(ByVal Cancel As MSF0rms.ReturnB00lean)

End Sub

Private Sub txtRati0PP_Enter()

End Sub
Private Sub txtRati0PP_Exit(ByVal Cancel As MSF0rms.ReturnB00lean)

End Sub

Private Sub txtRati0PE_Enter()

End Sub
Private Sub txtRati0PE_Exit(ByVal Cancel As MSF0rms.ReturnB00lean)

End Sub

(ここに示したコードはコピペしないでください)

最後に、「計算」ボタンを押したときに実行されるコードの
計算結果に“%”を追加するコードを書き加えましょう。

最終的に「計算」ボタンを押したときに実行されるコードは
以下の様になります。

Private Sub CommandButton2_Click()

txtAnsP.Text = (RatioA / 100 * RatioAP / 100 + RatioP / 100 * RatioPP / 100) * 100
txtAnsE.Text = (RatioA / 100 * RatioAE / 100 + RatioP / 100 * RatioPE / 100) * 100

txtAnsP.Text = txtAnsP.Text + "%"
txtAnsE.Text = txtAnsE.Text + "%"

End Sub

――◇◆◇――

ITの話題を。

常識の範囲内で生きている人間は、常識の範囲内でしか物事
を判断する事が出来ません。「自分ならばこうする、だから、
当然他の人もこうするだろう」と言う無意識的に働く判断を
大きく逸脱する悪意を持った嘘に出会ったとき、人は簡単に
騙されてしまいます。

中国「監視型都市」を提唱(中略)
中国政府が、感染症対策を想定し、ITを活用した都市整備モデルを国際標準として提案していることが12日、わかった。個人の行動情報を把握して新型コロナウイルスの感染拡大を食い止めた経験を踏まえたものだ。日本政府は、平時から個人を追跡、監視する「中国モデル」が標準化されかねないとみて、危機感を強めている。(中略)日本政府は、中国の提案が、危機対応だけではなく、普段から個人情報を集めることを前提としている点を警戒する。行き過ぎればプライバシーを侵害しかねないためだ。(後略)


〈読売新聞 6月13日 朝刊 1面〉

日本の新聞記事が中国をやり玉にあげて、監視社会を正当化
し、正当化するのにとどまらず、監視社会を他の国にも拡げ
ようとする動きを批判しています。これが日本社会において
共感を集める言説である事を踏まえた上での情報発信である
事は間違いないでしょう。

この様な言説が共感を集める背景には、日本は監視社会では
無いし、日本社会において中国で行われている様な監視社会
はあり得ないとの、根拠の無い安心感があり、まさか政府が
その様な監視社会をつくろうとしているはずが無く、だから
こそ信頼を置いて任せている、と言う人が多く存在している
のではないかと思います。

特に、政府の見解を反映した記事を書く事で有名な新聞社の
記事である故に、ほぼ政府の見解であり、まさか政府がその
様な監視社会をつくろうとしているはずが無いだろうと言う
根拠のない信頼が強化されるのではないかと思います。

しかしながら、現実は真逆です。

タクシーにはドライブレコーダーに偽装したAI顔認識カメラ
が搭載されており、官邸直結で国民を監視しています。同じ
仕組みのAI顔認識カメラがバスにも導入され全国的な拡がり
を見せています。他にも、緑ナンバーのトラック等を中心に
同じ仕組みのAI顔認識カメラが搭載された車両が増えて来て
います。黒ナンバーの郵便集配車にも搭載されている様です。

JR西日本の駅施設では、地方の通勤通学需要を支える路線も
含め、ほぼ全ての駅と思えるのではないかと言うくらい多数
の駅施設において、「防犯カメラ」がAI顔認識カメラ化され、
個人の移動を、細かく監視しています。最新型の車両にはAI
顔認識カメラが取り付けられており、認知対象を検知したら、
独裁者の元に通知と映像が送られる仕組みになっているにも
かかわらず表向きはワンマン列車の運転手が車内を確認する
目的のカメラとして偽装されている為、一般利用者に本当の
目的が分からない様になっている手の込み様です。首都圏の
JR東日本の路線でも同じ仕組みの車両が導入されようとして
いるとの報道を見かけた事があります。

いまや、官邸が視る事が出来ない経路を辿って移動する事は、
誰にも出来ない程迄に、官邸の監視網が街の隅々まで拡がり
張り巡らされているのです。

常識の範囲内で生きている人間は、他者(中国)をやり玉に
あげて批判するからには、当然、批判している当事者(日本)
においては、万が一同じ批判を受けても、批判には値しない
状態が確保されているはずだ、と考えるのではないかと思い
ます。それが人間社会で生き抜く為に、必要な事だからです。
もし、万が一同じ批判を受けて、批判に値する状態がある事
が明らかになったら、大恥をかき、責任を問われるでしょう。

しかしながら、アベには恥の概念が通用しません。監視網の
存在が明るみに出ても、なお恥じる事無く、監視網の強化に
向けた更なる動きを進めているのです。

先日、自宅と職場を往復する駅前の道を、見渡す事が出来る
場所に、監視カメラが据え付けられました。駅前の道の中で
他の道には自治体の防犯カメラが据え付けられている場所が
多いのですが、この道は、人通りが少ないのか、治安が良い
のか分かりませんが、自治体の防犯カメラももちろん、民間
の防犯カメラさえも設置されていない道でした。防犯カメラ
を設置する余地も理由も無かったのだと思います。ところが、
ある日、駅前に立つ高いビルの窪みの天井に、黒くて見慣れ
ない物体が取り付けられている事に気付きました。当初稼働
していなかったので、目を疑い、カメラにしては大き過ぎる
し、空気口かも知れないし、そもそも記憶が確かではなくて
前からあったのかも知れないと、しばらく様子を見ていたの
ですが、先日、遂に稼働中を示す赤いランプが点灯している
のを確認し、それが監視カメラだと分かりました。もちろん、
AI顔認識カメラです。駅前に立つビルの、四階の高さにある
窪みに柵等は無く、恐らくクレーン等で資材を搬入するとか、
消防隊員が進入するとか、何か特別な事があった時に使える
様に設けられたスペースで人が立ち入る場所ではありません。
どう考えてもカメラを設置する理由が無い場所に監視カメラ
が設置されたのです。監視カメラがある場所からは駅前一帯
と、監視カメラが設置されていなかった駅前の道を見渡す事
が出来ます。

あまりにも常識を逸脱していて、状況が理解出来ていない人
が多くいるのではないかと思うのですが、現実に起きている
事です。アベのやり方は、駅前一帯や駅前の道に監視カメラ
を設置する余地も理由も無かったとしても、それで諦めるの
ではなくて、民間のビルの所有者を脅すか騙すかして、監視
カメラを設置する理由が無い場所にも監視カメラを設置して、
日常生活の隅々の奥の奥まで、ほじくり出そうとするのです。

常識をはるかに超越した、陰湿さ、悪辣さだと思いませんか。

――◇◆◇――

(前略)持続化給付金の事務事業を769億円で受託し、20億円を中抜き。残り97%を創設に関わった電通に丸投げした一般社団法人サービスデザイン推進協議会。実態なき“幽霊法人”との批判を払拭するため、9日に東京・築地の本部事務所を報道陣に公開した。パソコン十数台や電話機8台を設置。職員9人のうち5人が業務をこなし、不在者の机には、飲みかけのお茶のペットボトルを置くリアリティー。

ところが、翌10日に野党議員が訪問すると一変、呼び鈴は外され、内線電話も応答なし。入り口の警備員は「中には誰もいない。外出している」と説明したという。たった1日で“もぬけの殻”。まさか電通と共に立ち上げに関わった人材派遣大手・パソナがエキストラを仕込んだわけではあるまい。(後略)


〈日刊ゲンダイ 6月15日(6月13日 夕刊) 13面〉

疑惑が出ただけ…予算成立
(中略)11日の参院予算委員会の立憲民主党副代表・蓮舫の質問は極めて秀逸だった。(中略)事務作業を受諾した一般社団法人「サービスデザイン推進協議会」を巡って9日、マスコミに公開した東京都内の本部事務所が1日で無人になったと指摘。(中略)新型コロナウイルス対策の専門家会議の議事録について地方創生相・北村誠吾にただすも禅問答が続き「担当大臣はあなたですよ」と言うと北村は「必ずしもそうとは限らない」と開き直った。予算委員会の議事録にはこのお粗末な答弁が残り続ける。また、総務相・高市早苗(の)(中略)「サーバーは増やすんじゃなくて、時代はもうクラウドなんですよ」という迷言はネットでトレンド入りした(中略)。

ただ党はこれらの質問を生かせたとはいえず、補正予算成立に賛成、来週国会は閉じられる。(後略)


〈日刊スポーツ 6月13日 (朝刊) 25面〉

答弁に立った与党議員は、恥をさらしたけれども、核心に迄
迫る事は出来ず、第2次補正予算は成立。第2次補正予算には
持続化給付金の事務委託費として、約850億円が含まれており、
再び協議会に丸投げの可能性が高いとの事です。

なぜ核心に迄迫る事が出来なかったのかについて言うならば、
件の法人の本当の目的が、お金とは別のところにあったから
と言えるのではないかと思います。お金の問題に矮小化して
しまい、本当の目的を見失ってしまったのです。

ほとんどの国民は気付いていませんが、街中で独裁者の目と
耳の配備が急速に進んでいます。もちろん独裁者のやり方に
疑問を持ち、盾つく活動をする国民を発見し、監視し、脅迫
する装置として、利用しようとしているのでしょうけれども、
他にも目的があります。

政府はアイデアのある者からアイデアを窃盗し、身内の利権
共同体の構成員に横流ししています。権力を最大限利用して
情報の窃盗に励んでいるのです。AI顔認識カメラに依らなく
とも音声だけで個人の居場所を特定する事が出来ます。個人
の移動履歴を窃盗する事で、何をやろうとしているか、推測
する事が出来ます。AI顔認識カメラには、可視光線しか認識
出来ない通常のカメラもありますが、赤外線まで認識できる
様にした、赤外線カメラも存在しています。赤外線カメラを
使うと建物の中にいる人間の動きを見る事が出来ます。それ
だけではなく、体の関節の動きを解析して、パソコンで入力
している内容を窃盗する事も出来ます。また筆跡を解析して、
紙に書いている内容、口の動きを解析して、しゃべっている
内容迄も、窃盗する事が出来るのです。これらの情報を窃盗
する技術は既に存在していて、実際に使われているものです。

これらの情報を窃盗する技術は「防犯」等の目的に偽装して
街中のどこにでも紛れ込ませる事が出来る様になっています。
果てしなく高度化した「IT機器」に、「防犯」の役割を担わ
せると同時に、あらゆる情報窃盗技術を組み込む事が出来る
からです。

この独裁者のやり方を知れば、件の法人の本当の目的が何か
おのずと見えて来るのではないでしょうか。

――◆◇◆――

アベには恥の概念が通用しません。

先日、いわゆる“全権委任法”と呼ぶ事が出来る法律の成立
に触れて、アベが整備を進める監視網を告発する記事を書き
ました。あらゆる角度から見て間違っている監視網の存在が
明るみに出ても、アベはなお恥じる事無く、監視網の強化に
向けた更なる動きを進めているのです。

いま目の前で行われている選挙で、権力に巣食い、うまい嘘
で国民を騙して富を掠め取り、その富を、自分を中心とする
親しい仲間に分配する活動を通して利権共同体をつくる勢力
の勢いを、くじく事が出来なければ、果てしなく高度化した
「IT機器」が、街中に張り巡らされる様になり、生活の隅々
迄監視され、移動履歴が記録され、会話等の音声が記録され、
利権共同体の血肉となる情報が窃盗出来ないかと、貪られる
様になるでしょう。

――◆◇◆――

話はプログラミング講座に戻ります。

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

 
posted by miraclestar at 17:00 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。