2020年09月04日

疎開

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

2020年08月23日

新生・国民民主党の地方組織はどの様な役割を担えば良いか(私案)

答えそのものを書いてしまうと、いろいろ問題が生じるので、
様々な角度からヒントと言う形で表現してみようと思います。

玉木雄一郎代表の言葉です。

本日、75回目の節目の終戦記念日を迎えました。

先の大戦では多くの方が戦場で斃れ、一般国民も原爆、空襲、沖縄戦などの戦禍に
巻き込まれ尊い命を落としました。また、終戦後も、異国での抑留中や、原爆や傷病
の後遺症で亡くなられる方も多くいました。ここに、すべての犠牲者の方々に衷心よ
り哀悼の誠を捧げます。

(中略)

今日では国家間の戦争だけでなく、テロをはじめとした新しい紛争の脅威が出現し
ています。国民の安全や平和を守るための備えを万全としつつ、我が国の平和主義、
民主主義を守り、発展させるため、あらゆる努力を払つていくことを国民の皆様に
お誓い致します。


〈戦後75年の終戦の日にあたって(談話) 国民民主党代表 玉木雄一郎〉

客観的事実を言うと、日本国内において、過去20年間、いわ
ゆる“テロ”と呼ばれる事件によって命を落とした人の数は
数名程度、いやむしろ“テロ”と呼べる事件は一件も起きて
いないのではないか、と言う見方も出来る位、日本国内では
いわゆる“テロ”事件は起きていないし、命を落としている
人の数も、他の原因で命を落とした人の数がもっと多くいる
中で、あえて“テロ”に触れた理由を想像すると、まさかね、
との思いがよぎりギョッとしたのですけれども、浮足立った
気持ちが湧きたったのかも知れません。

とは言え、日本国外に出掛ける人にとってはまったく無関係
と言うわけではないのでありまして。テロに対する実効性の
ある備えについて考えてみる事にしましょう。

って考えて欲しいのです。テロの原因について。

ここではいろいろ飛ばして結論から言ってしまいます。とは
言っても、答えそのものを書いてしまうと、いろいろ問題が
生じるので、穴埋め問題の形にしました。

「テロは○○○○の機能不全によって起きる」

問題としては何のひねりも無い穴埋め問題です。良く企業が
会社名や商品名を答えさせる懸賞で穴埋め問題をやっている
と思いますけれどもそれと同じくらいひねりの無い問題です。

もし○○○○が正常に機能する様になったら、テロの原因が
無くなるわけですから、テロも無くなると期待出来ますよね。
言うのは簡単でも、やるのは簡単じゃないかも知れませんが。

あまりにも現実離れしていて、想像しにくい話をしてしまい
ました。ここまでの話は忘れても大丈夫です。ここから先は、
少し目の前の現実に関係ある話をしてみます。

日本から遠く離れた国、ベラルーシで政変が起こっています。
26年続いた独裁体制に亀裂が入っているとの事。いままさに
進行中の事で、今後どの様な方向に進んでいくのか、予断を
許さない状況です。

ベラルーシでは、選挙に立候補しようとしても認められない
事があるそうで。日本では高額との批判はあるものの、お金
を払えば立候補は出来る仕組みになっていますから、その点
恵まれている、と言えるのかも知れません。世界を見回せば
立候補さえ出来ない国もあるのですから。とは言え、実際に
当選できるかどうかの話になったら、日本の実態は、あまり
変わらない状況があるのかも知れません。

話によると、長い間独裁体制を維持して来た現職の大統領と、
対立候補(になるはずだった人物の妻)の一騎打ちになった
そうで、ある調査によると、現職大統領の支持は3%しか無い
のに、現職圧勝の結果が出てこれはおかしいと。ベラルーシ
の国民の怒りに火が付いた様です。

真相はいかに。

日本から遠く離れた国の出来事で、日本とは制度も国民性も
違うので、外国人である日本国民の一人が何か意見を言うの
もおかしいし、言ったところで空想の世界に消えていくだけ
の話しに過ぎないのですけれども、ベラルーシ国民が正義を
勝ち取る為に考えなければならない事について考えてみたい
と思います。

まず、大統領選挙の結果ですが、例え不正に書き換えられて
いたとしても、“確定した結果”として発表された選挙結果
に不正な操作が含まれていた事を証明する事は、最終的には
不可能なのではないか、と思います。不正な操作が含まれて
いた痕跡は数多く発見出来るかも知れません。しかし最終的
に、不正な操作が含まれていたと断定するに至る事はないで
しょう。何故ならば、当然の事ながら、証拠隠滅を図るはず
だからです。

となると、次の選挙を待つか、再選挙の実施を勝ち取るしか
ありません。では、次に行われる選挙には、「不正な操作が
含まれていない」と言えるでしょうか。

それはかなり怪しいのではないでしょうか。

もちろん、厳しい監視の目が注がれるでしょう。厳しい監視
の目があっても、最終的にはどこかで結果を書き換える余地
を与えてしまうのではないでしょうか。

もし、再選挙の実施を勝ち取り、国民の関心が高まっている
間に、選挙が行われれば、不正の可能性は小さく出来るかも
知れません。もし、次の選挙を待つ事になったとしたら同じ
事の繰り返しになる可能性が高いでしょう。

不正な操作を完全に防ぐ為には、為政者の息がかかった選挙
管理委員会から開票業務を奪い取るしかないでしょう。開票
作業が密室の中で行われる国は、さすがに珍しいかも知れま
せん。しかしながら、開票結果の伝達経路のどこかに密室が
含まれているかも知れません。

実際のやり方はいろいろな形態が考えられると思います。

開票業務を完全に奪い取ってしまったら、今度は奪い取った
側が不正を疑われる立場になります。二者、出来れば、三者
以上がそれぞれ開票作業を行うのが理想だと思います。

ここまで読むと、実行は不可能だと言う意見を言う人もいる
と思います。その様な制度変更を実現する政治的な取り組み
が成功するか以前に、ものすごい数の人手が必要だからです。

陣営にとって、選挙運動を実行する要員の他に、開票作業を
担う要員を確保する必要に迫られる様になるでしょう。それ
を何とかする備えが大切になってくるのではないでしょうか。

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

2020年08月14日

立憲民主党が示した新党の綱領案について

いまこの様な文書を書き記しても、うまく騙される為の嘘を
求める劣化した国民の声にかき消され、顧みられる事は無い
のでしょうけれども勇気を持って詳らかにしようと思います。

この時代にあっても希望を失わず真実を求める強さを持った
稀有な人々に届くかも知れないかすかな願いを込めています。

そもそも、年始の合流騒動に続いて、今回の合流騒動が急に
持ち上がったのは、7月15日でした。立憲民主党の動きをいま
からでも振り返ってみていただけたらと思いますけれども7月
15日を明らかな境として、合流に向けた発信を始めている事
が分かるのではないかと思います。ではなぜ7月15日なのか。

前日の7月14日に、当ブログの記事において、枝野幸男代表が
過去にTPP推進に前向きな姿勢を示していた事実を指摘した事
と無縁ではないでしょう。記事においては「過去の整理」を
期待する旨、書き記していたのですけれども、枝野幸男氏の
その後の行動は、「過去の整理」と言うよりは「過去の隠蔽」
を目論むものと言わざるを得ないでしょう。

つまり、TPP推進論者だった過去を覆い隠す為に、猛烈な合流
推進に舵を切ったと言う事です。ただし、本人がその意図を
意識しているとは限りません。

一日でも早く、過去を混乱の奥深くへ追いやる為に、一日も
早い合流が必要だったのでしょう。新党の綱領案は劣化した
折衷案と言うしかありません。

言うならば、鶏豚ハンバーグの様なもの、と言う表現が相応
しいと思います。屠殺(とさつ)された肉体組織の寄せ集め
に過ぎないと言う意味です。素材の味があるから、そこそこ
美味しく味わう事が出来るのかも知れません。しかし、最早
ひとつの秩序を持った生命体ではなく、捕食者の肉体の一部
となって、捕食者の意図に沿って条件反射する様になるだけ
の肉体組織の切れ端でしかありません。

TPP推進論者だった過去を覆い隠したまま、嘘をついて国民を
騙す試みが上手くいく様になれば、茶番劇の一翼を担う便利
な存在として、地位を確保する様になるでしょう。

そして、この秋、米国の大統領選挙で民主党の大統領が誕生
すれば、米国の民主党と双璧を組んで、TPP推進の一翼を担う
事になるかも知れません。それは、枝野幸男代表にとっては
居心地の良い立場でしょう。しかし、それは新党の綱領案の
一番最初に書いてある事を丸ごと否定する真っ赤な嘘を突き
進む道である事を、指摘しておかなければなりません。

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

2020年08月09日

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

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

前回6月24日の更新から随分時間が経ってしまいました。当時、
東京都知事選挙が行われていて、その流れに合わせた記事の
更新をしていたので、いろいろと必要な、時間の経過の事を
考えて、更新は控えていました。そろそろ、更新しても良い
のではないか、と思えたので、更新を再開したいと思います。

今回から、新しいプログラムの作成に取り掛かります。今回、
取り組むのは、誰もが知っている“あれ”をつくってみよう、
と言う試みです。今回の記事はとても分量が多いので、一度
に最後までつくってしまおうとはせず、途中で動作確認する
場面があるので、適宜中断して次の日に回す等の工夫をして
みて下さい。

Excelを起動してください。「Alt+F11」を押します。
「Microsoft Visual Basic」の画面が出て来ると思います。
ツールバーにある「ユーザーフォームの挿入」をクリック。

今回は、この画面で操作する事は、ひとつもありません。

そのまま「F7」を押して、「コード」画面を開きます。

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

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

End Sub

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

理由は進めていくうちに明らかになっていくので、特に触れ
ませんが、今回ここに直接プログラムを書く事はせず、別途
独立したプロシージャを作成して、そこにプログラムを書く
様にします。

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

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

Private Sub ProcessKeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyEscape
Unload Me

End Select
End Sub

KeyAscii変数には、呼び出されたときに押されたキーを示す
数字が入っています。vbKeyEscape 定数は、Visual Basicで
標準で定義された、特別なキーの数字を示す定数です。他に
どの様な定数があるか知りたい場合は、vbKeyEscape 上でF1
キーを押してヘルプを表示させると知る事が出来ます。

Unload Meは、フォームの動作を終了させるコードです。ESC
キーを押すとプログラムを終了させる、と言う意味です。

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

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
ProcessKeyPress (KeyAscii)
End Sub

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

数字キーを押すと、入力した数字が表示される様にしてみま
しょう。

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

Private strNyuryoku As String '入力中の数値を記憶

Private Sub ProcessCmdN(number As Integer)

strNyuryoku = strNyuryoku + CStr(number)

UpdateDisplay

End Sub

Private Sub UpdateDisplay()
UserForm1.Caption = strNyuryoku
End Sub

ProcessCmdNよりも前の場所でstrNyuryokuと言う変数が定義
されています。

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

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

Case Asc("C"), Asc("c")
strNyuryoku = ""
UpdateDisplay
Case Else
If Asc("0") <= KeyAscii And KeyAscii <= Asc("9") Then
ProcessCmdN (KeyAscii - Asc("0"))
End If

Cキーを押すと、入力中の内容を消去します。Asc関数を使用
している理由は、コンピュータの内部処理上の都合で、"C"と
KeyAscii変数が直接比較出来ないからです。

Case Elseは、Select内のどのCaseにも当てはまらない場合に
実行されます。"0"から"9"迄の数字はKeyAscii変数のコード
番号が連番になっているので、"0"から"9"迄の数字が押され
たら、ProcessCmdN プロシージャが実行される様になります。
このとき、キーコードではなく、キーコードから"0"から"9"
迄の数字キーを表す数値を計算してプロシージャに渡す様に
しています。

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

BackSpaceキー を押すと、入力した最後の数字が消える様に
してみましょう。

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

Case Asc("B"), Asc("b"), vbKeyBack 'Back
If Len(strNyuryoku) > 0 Then
strNyuryoku = Left(strNyuryoku, Len(strNyuryoku) - 1)
End If
UpdateDisplay

Len関数で、strNyuryoku変数の文字数を調べています。文字
数が0より大きければ、Left関数で文字数を1減らした長さの
文字列を取り出す様にしています。

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

"."キー を押すと、小数点が入力出来る様にしてみましょう。

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

Case Asc(".") '.
Select Case strNyuryoku
Case ""
strNyuryoku = "0."
Case Else
If InStr(strNyuryoku, ".") = 0 Then strNyuryoku = strNyuryoku + "."
End Select
UpdateDisplay

InStr関数で、strNyuryoku変数の中に、"."が含まれているか
どうか調べて、もし含まれていなければ文字列の最後に"."を
加える様にしています。

そして、特別な場合の動作も指定しています。Cキーを押した
直後等で、strNyuryokuが空("")だった場合、"."が含まれて
いないので、何も指定しなければ"."と入力されてしまいます。
これでも分からなくもないですが、分かりにくいので、"0."
と表示される様に指定しています。

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

マイナスの数値が入力出来る様にしてみましょう。具体的に
は、","キー を押すと、プラス・マイナスが入れ替わる操作
が出来る様にします。

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

Case Asc(",") '+/-
If strNyuryoku = "" Then
strNyuryoku = "-"
Else
If Left(strNyuryoku, 1) = "-" Then
strNyuryoku = Right(strNyuryoku, Len(strNyuryoku) - 1)
Else
strNyuryoku = "-" + strNyuryoku
End If
End If
UpdateDisplay

Left関数で、strNyuryoku変数の最初の1文字が、"-"であるか
どうか調べて、もし"-"であればRight関数で最初の"-"を取り
除く様にしています。もし"-"でなければ、"-"文字列の最初
に"-"を加える様にしています。

そして、特別な場合の動作も指定しています。Cキーを押した
直後等で、strNyuryokuが空("")だった場合、コードを見ると
何も指定しなくても"-"と入力される様に見えます。特にこれ
で問題ないのですが、Left関数に空白文字列("")を入力して
しまうと間違った動作が起きる可能性があります。Left関数
は、指定した文字数を取り出す関数ですが、指定した文字数
よりも短い文字列から指定した文字数を取り出す事は不可能
だからです。具体的には、エラーが起きる可能性があります。
実際、試してみたら、エラーは起きなかったのですが、なる
べく不可能な事はさせない様に心がけた方が良いと思います。

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

ここまでのプログラムで動作確認してみると、少しおかしな
表示をさせる事が出来てしまう事に、気付くかも知れません。

例えば、Cキーを押した後に、"."キー、","キーの順に押して
みたらどうなるでしょうか。特に問題は起きないと思います。
では、逆に、","キー、"."キーの順に押してみたらどうなる
でしょうか。おかしな表示になってしまうのではないかと思
います。これに対応する為に、以下のコードを書き加えます。

Case Asc(".") '.
Select Case strNyuryoku
Case ""
strNyuryoku = "0."
Case "-"
strNyuryoku = "-0."
Case Else
If InStr(strNyuryoku, ".") = 0 Then strNyuryoku = strNyuryoku + "."
End Select
UpdateDisplay

Case Elseの前に、strNyuryokuが"-"だった場合の動作を指定
するコードが書き加えられています。

例えば、Cキーを押した後に、"."キーを押して、"0"を2回以上
押してみたらどうなるでしょうか。これはおかしくないと思い
ます。では、Cキーを押した後に、何も押さずに"0"を2回以上
押してみたらどうなるでしょうか。同様に、Cキーを押した後
に、","キーを押して、"0"を2回以上押してみたらどうなるで
しょうか。おかしな表示になってしまうのではないかと思い
ます。これに対応する為に、以下のコードを書き加えます。

Private Sub ProcessCmdN(number As Integer)

If strNyuryoku = "0" Then
strNyuryoku = number
ElseIf strNyuryoku = "-" Or strNyuryoku = "-0" Then
strNyuryoku = -number
Else
strNyuryoku = strNyuryoku + CStr(number)
End If

UpdateDisplay

End Sub

strNyuryokuが特別な値だった場合の動作を指定しています。

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

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

一息ついたら再開しましょう。これまで何をつくろうとして
いるのか、誰もが知っている“あれ”と言うのみで、触れて
来なかったのですけれども、もうそろそろ、“あれ”が何か、
お分かりでしょう。正負や小数点がある数値を入力する機能
をつくりました。そうなると、次は四則演算(+-*/)をする
機能をつくりたくなりませんか。

四則演算する機能は、少し複雑で規模の大きなプログラムに
なります。順を追って少しずつつくっていきましょう。

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

'Kekka = Nyuryoku1 (Enzanshi) Nyuryoku2

Enum CalcMode
cmAllClear = 0 '何も入力していない状態
cmNyuryoku1 = 1 '演算子の左の数字を入力
cmNyuryoku2 = 2 '演算子の右の数字を入力
cmKekka = 3 '計算結果が表示されている
cmError1 = -1 'エラーが表示されている(左入力中)
cmError2 = -2 'エラーが表示されている(右入力中)
cmError3 = -3 'エラーが表示されている(結果表示中)
End Enum

Enumを使うと、数値に名前を付けて取り扱う事が出来る様に
なります。「CalcMode」と言うデータ型を指定して宣言した
変数は、コンピュータ内部では、数値として取り扱われるの
ですが、Visual Basicのコード上では、名前を付けた状態で
取り扱う事が出来ます。プログラム内で遷移する状態を数値
で記憶する手法は良く使われる手法なのですが数値に名前を
付けて取り扱う事が出来る様になると、コードが分かり易く、
間違いも起きにくくなります。

プログラムは、cmAllClearの状態から始まって、cmNyuryoku1、
cmNyuryoku2、cmKekkaの順に遷移していきます。cmNyuryoku1、
cmNyuryoku2、cmKekkaそれぞれの場面で、エラーが起きると、
cmError1、cmError2、cmError3へと遷移します。数値の正負
を逆転させると、正常な状態とエラー状態を行き来出来る様
になっています。

先頭行はコメントで、Kekka,Nyuryoku1,Nyuryoku2の関係性を
示しています(Enzanshiは後述)。行の"'"以降はコメントと
して扱われ、プログラムとしては無視される様になります。

続いて(コンボボックスに(General)(Declarations)と表示さ
れている状態で)、以下のコードを書き込みます。

Private cmJoutai As CalcMode
Private strNyuryoku As String '入力中の数値を記憶
Private strEnzanshi As String '数値の前に押した演算子を記憶(+-*/)
Private dblNyuryoku1 As Double '演算子の左の数字を記憶
Private dblNyuryoku2 As Double '演算子の右の数字を記憶
Private dblKekka As Double '結果の数値を記憶
Private strError As String 'エラーとして表示する文字列

strNyuryoku は既に定義した変数と被るので、複数定義して
しまわない様、気を付ける様にして下さい。

続いて、UndateDisplayを以下の様に書き換えます。

Private Sub UpdateDisplay()
Select Case cmJoutai
Case cmAllClear '何も入力していない状態
UserForm1.Caption = "0"

Case cmNyuryoku1 '演算子の左の数字を入力
If strNyuryoku = "" Then
UserForm1.Caption = "0"
Else
UserForm1.Caption = strNyuryoku
End If

Case cmNyuryoku2 '演算子の右の数字を入力
If strNyuryoku = "" Then
UserForm1.Caption = CStr(dblNyuryoku1)
Else
UserForm1.Caption = "[" + strEnzanshi + "] " + strNyuryoku
End If

Case cmKekka '計算結果が表示されている
UserForm1.Caption = CStr(dblKekka)

Case cmError1, cmError2, cmError3 'エラーが表示されている
UserForm1.Caption = strError

End Select
End Sub

先程定義した「モジュール レベルで宣言された変数」がほぼ
すべて使われているので、それぞれの目的を網羅的に理解し
易くなっているのではないかと思います。

1行目、cmJoutaiの数値によって、場合分けしたコードが実行
される様にするコードです。

3行目、cmJoutaiがcmAllClearのとき、"0"が表示される様に
しています。

7行目、cmJoutaiがcmNyuryoku1のとき、strNyuryokuが空("")
なら、"0"が表示される様にしています。

9行目、cmJoutaiがcmNyuryoku1のとき、strNyuryokuが空("")
以外なら、strNyuryokuの内容が表示される様にしています。

14行目、cmJoutaiがcmNyuryoku2のとき、strNyuryokuが空("")
ならdblNyuryoku1の数値が表示される様にしています。四則
演算の演算子キー("+-*/")を押したとき、その時点の計算
結果がdblNyuryoku1に保存される様にプログラムを組みます。

16行目、cmJoutaiがcmNyuryoku2のとき、strNyuryokuが空("")
以外なら、strEnzanshiとstrNyuryokuを組み合わせた内容が
表示される様にしています。

20行目、cmJoutaiがcmKekkaのとき、dblKekkaの数値が表示さ
れる様にしています。

23行目、cmJoutaiがcmError1,2,3のとき、strErrorの内容が
表示される様にしています。

続いて、AllClearの処理を追加します。

ProcessKeyPressの Select Case KeyAscii と End Selectの
間のCase vbKeyEscapeの次に、以下のコードを書き込みます。
(Unload Meの次の行)

Case Asc("A"), Asc("a") 'AC
dblKekka = 0
strEnzanshi = ""
strNyuryoku = ""
cmJoutai = cmAllClear
'★→cmAC: "A", "a" 押したときcmAC
UpdateDisplay

続いて、C/CEの処理を追加します。

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

Case Asc("C"), Asc("c") 'C/CE
If cmJoutai < 0 Then
cmJoutai = cmJoutai * -1
'★→cmN1, cmN2, cmK: エラー状態解除
ElseIf cmJoutai = cmKekka Then
ProcessKeyPress (Asc("A"))
Exit Sub
End If
strNyuryoku = ""
UpdateDisplay

1-7行目が新たに書き加えられた内容です。

1行目、cmJoutaiが0未満のとき(エラー状態のとき)、
2行目、数値の正負を逆転させてエラー状態を解除しています。
4行目、cmJoutaiがcmKekkaのとき、
5行目、AllClear処理を実行する様、改めてProcessKeyPress
を呼び出しています。

続いて、cmNyuryoku1 に遷移する処理を追加します。全部で
3カ所あります。cmJoutai が cmAllClear, cmKekkaのときに、
数値入力を始めるとcmNyuryoku1に遷移します。

ProcessCmdNを以下の様に書き換えます。

Private Sub ProcessCmdN(number As Integer)
Select Case cmJoutai
Case cmAllClear, cmKekka
strNyuryoku = CStr(number)
cmJoutai = cmNyuryoku1
'★→cmN1: cmAC, cmKのとき、数値入力を始めるとcmN1
Case cmNyuryoku1, cmNyuryoku2
If strNyuryoku = "0" Then
strNyuryoku = number
ElseIf strNyuryoku = "-" Or strNyuryoku = "-0" Then
strNyuryoku = -number
Else
strNyuryoku = strNyuryoku + CStr(number)
End If
Case cmError1, cmError2, cmError3

End Select

UpdateDisplay
End Sub

1-6,14-16行目が新たに書き加えられた内容です。

2行目、cmJoutai が cmAllClear, cmKekkaのときに、
3行目、数値入力を始めると、
4行目、cmNyuryoku1に遷移します。

次の呼び出しからは5行目に処理が移ります。
14行目、エラー状態の時は何もしません。

ProcessKeyPressの Select Case KeyAscii と End Selectの
間の Case Asc(".") と Case Asc(",") の内容を以下の様に
書き換えます。
UpdateDisplayの直前に以下の内容を書き加えます。(2カ所)

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

続いて、四則演算と結果表示の処理を追加します。

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

Case Asc("+"), Asc("-"), Asc("*"), Asc("/") '+-*/
If ExecuteCalc(KeyAscii) Then
strNyuryoku = ""
cmJoutai = cmNyuryoku2
'★→cmN2: "+-*/"押したとき、正常であればcmN2
ElseIf strError <> "" Then
cmJoutai = cmJoutai * -1
'★→cmE: エラーが発生したときcmE
End If
UpdateDisplay
Case Asc("="), vbKeyReturn '=
If ExecuteCalc(Asc("=")) Then
strNyuryoku = ""
cmJoutai = cmKekka
'★→cmK: "="押したとき、正常であればcmK
ElseIf strError <> "" Then
cmJoutai = cmJoutai * -1
'★→cmE: エラーが発生したときcmE
End If
UpdateDisplay

ExecuteCalc関数は、四則演算を実行する関数です。

処理が成功し続行可能な場合は、Trueを返します。
処理を中断した場合は、Falseを返します。
エラーが発生した場合は、strErrorにエラーとして表示する
文字列が代入されています。エラーではない場合はstrError
は空文字列("")が代入されています。

ProcessKeyPressプロシージャの書き換えは以上です。
ここで一息つきましょう。ここから先も長いです。

一息ついたら再開しましょう。ExecuteCalc関数の作成です。

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

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

Private Function ConvertNyuryoku() As Double
Select Case strNyuryoku
Case "", "-"
ConvertNyuryoku = 0
Case Else
If Right(strNyuryoku, 1) = "." Then
ConvertNyuryoku = CDbl(Left(strNyuryoku, Len(strNyuryoku) - 1))
Else
ConvertNyuryoku = CDbl(strNyuryoku)
End If
End Select
End Function

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 "+-*/" "=" Exit 1◇ △ △=の後AC押さずに数値入力、続いて=
'cmN1 "+-*/" "+-*/" NoTouch 1◇ ▽ △=の後AC押さずに数値入力、続いて+-*/
'cmN2 "" 2◆   ―有り得ない
'cmN2 "+-*/" "=" K =N1opN2 2◇ △ ○通常操作
'cmN2 "+-*/" "+-*/" N1=N1opN2 2◇ ▽ ○通常操作
'cmK "" 3◆   ―有り得ない
'cmK "+-*/" "=" Exit 3◇ △ △=の後すぐに=
'cmK "+-*/" "+-*/" Exit 3◇ ▽ △=の後すぐに+-*/

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

ConvertNyuryoku 関数は、strNyuryoku 変数を一発で数値に
変換する関数です。複数個所で呼び出される為、別途関数に
しました。

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

☆1からの4行では、cmJoutaiがcmAllClear又はcmErrorのとき、
処理を中断します。

☆1からの4行に続く4行では、strNyuryokuが空("")のとき、
処理を中断します。

☆2からの3行はプログラム中で使用する変数の初期値を設定
しています。

☆3、☆4、☆5、☆6にはプログラムを追加します。(後述)

☆7、処理が成功し続行可能な場合は、strEnzanshi変数に演
算子を記憶します。今回の呼出のあと、数値を入力し、再び
演算子キーが押され、次回の呼出があった際には、記憶した
演算子を使って演算を行います。

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

If intEnzanshi = Asc("=") Then
'1◆ △ ×無効操作
ExecuteCalc = False
Exit Function
End If
dblNyuryoku1 = ConvertNyuryoku()

4つの可能性があります。
cmAllClearからcmNyuryoku1に遷移した場合、strEnzanshiは
空("")です。cmKekkaから遷移した場合は、strEnzanshiには
演算子("+-*/")が代入されています。cmNyuryoku1では演算子
の左の数字を入力するので、演算子の右の数字は、まだ入力
されていない状態です。この状態で"="を押しても、まだ結果
は計算出来ません。従って"="を押す操作があった場合は無効
操作として処理を中断します。一方、演算子キー("+-*/")を
押す操作があった場合はdblNyuryoku1に入力した数値を記憶
して処理を続行可能にします。

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

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

2つの可能性があります。
演算子キー("+-*/")を押す操作があった場合と"="を押す操作
があった場合です。前回の呼出があった時点までの計算結果
がdblNyuryoku1に記憶されています。演算子キー("+-*/")を
押す操作があった場合は、dblNyuryoku1に今回の呼出で入力
された数値を使って演算した結果を代入して記憶します。"="
を押す操作があった場合は、dblKekkaに今回の呼出で入力さ
れた数値を使って演算した結果を代入します。

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

ExecuteCalc = False
Exit Function

いまの時点ではこの操作に対応しないので処理を中断します。

☆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
End Select

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

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

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

End Select

strEnzanshi が"/"で dblNyuryoku2 が0の場合、0で除算する
事になってしまい、Visual Basicのエラーとなってしまう為、
そうならない様に、プログラム内でエラーとして処理される
様にしています。

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

――◇◆◇――

6月頃から、「IT化」をただ別の言葉で言い換えただけの単語
「DX(デジタル・トランスフォーメーション)」が新聞上に
良く登場する様になりました。誰が最初に言い始めたのかは
分かりませんが、突然登場し様々なプロパガンダで使用され
はじめ政府が打ち出す方針にも書き込まれる様になりました。

6月に投稿した記事の中で「危険な革新思想の持ち主が、勢力
を拡大する上で国民を騙す方便として好んで使う嘘のひとつ
が、『IT化』なのです」と書いた為、これ迄通り「IT化」と
表現していたら簡単に嘘だとばれてしまうと思って、慌てて
別の表現に変更したのかも知れません。

その「DX」を掲げて新しい方向性を打ち建てよう、と目論み、
国民民主党が模索を始めている様です。

――◇◆◇――

思うに、この国の政治が停滞に直面している要因のひとつは
保守派の人間が受け入れる事が出来、かつ自民党が真似する
事が出来ない方向性(保守非自民)を打ち建てる事に失敗し
続けている事だと思います。

保守を標榜する人間は数多くいます。ただ保守と言うだけで
無く、改革保守だったり中道保守だったり穏健保守だったり
色々な言葉をくっつけて独自性を打ち出す事に挑戦している
様ですが、日本人の中に保守の人間が何種類もいるわけでは
無く、同じ人間を食い合っているのです。

保守派の人間を取り込もうと思ったときに出来る事の種類は
あまり多くありません。誰もが同じ様な一つの考え方、行動、
見た目の、いわゆる“王道”に収斂していくからです。

保守派の人間が受け入れる事が出来る方向性を打ち出そうと
したとき、もし自民党よりも優れた方向性が見出す事が出来、
打ち出したとしても、自民党は、すぐに真似する事が出来て
しまうでしょう。そうなると政治家が違いを生む要因として
考えられるのは政局くらいでしょう。つまり、政権を握る者
が抱える不備を指摘する人間が相対的に優れて見えると言う
現象です。それさえも突き詰めていくと、最後にはルールを
無視した行動をする人間が一歩先んじる様になるのでしょう。

自民党が現実化不可能な方向性を、自民党には出来ると嘘を
ついて打ち出す事はいとも簡単な事です。嘘に騙される国民
がいるからです。そうなったらもう、考えられる限りの嘘を
つくでしょう。どんな嘘をついても騙されてくれるからです。

保守を標榜しながらも、新しい方向性を打ち出す事を試みた
人間はこれまで数多くいました。しかしその多くが自民党に
取り込まれて終わりました。自民党に入党した者、自民党の
補完勢力に成り下がった者、自民党には取り込まれなかった
けれども、自民党の補完勢力に取り込まれた者もいました。

――◆◇◆――

国民民主党の模索は、どの様な結末を、迎えるのでしょうか。

(前略)国民民主党は(6月)24日、新型コロナウイルスの感染拡大を踏まえた新たな社会像を検討する「コロナ後の(中略)社会構想本部」(本部長・玉木雄一郎代表)の初会合を開いた。(中略)玉木氏は会合の冒頭「来るべき衆院選で、私たちの考えとして世の中に問うものになる。与党に負けない立派なものを示したい」と述べ(中略)た。(後略)

〈産経新聞 6月25日 朝刊 4面〉

こういう事を言うと言葉のあげ足とりに聞こえてしまうかも
知れませんが「与党に負けない」何かを考えようとしている
時点で、与党に良い様に利用されて、与党に取り込まれてし
まう運命が決まってしまう様に思います。

コロナ後の社会構想本部は(7月)10日、党本部で4回目の会議を開催した。冒頭、玉木雄一郎本部長は、「政府が骨太方針を出すので、それに負けないような、政府の骨太方針よりもっと骨太なものをしっかり出していきたい」とあいさつした。会議終了後、泉健太同本部事務局長は記者団の取材に応じ、「政府の骨太の方針原案に、玉木代表がアフターコロナの国家戦略で挙げたキーワードを使われている。『効率性を重視したジャスト・イン・タイムのみでなく、リスクが顕在化した際にジャスト・イン・ケースの対応も可能になるよう』とかデジタルトランスフォーメーションが入っていて驚いた。6月10日の予算委員会を経て、よく言えば政府が採用したということだ。(中略)」(後略)

〈国民民主党(公式サイト) 7月10日 ニュース
 「政府の骨太方針よりもっと骨太な政策を」 コロナ後の社会構想本部で玉木代表〉

政府・与党と比較可能な内容で、もし政府・与党より優れた
方向性が見出す事が出来、打ち出したとしても、政府・与党
は、すぐに真似する事が出来てしまうのではないでしょうか。

(前略)「コロナ後の(中略)社会構想本部」(中略)では、(1)グローバリズム(2)東京一極集中(3)富の偏在―の3点の見直しが検討の柱となる。

〈産経新聞 6月25日 朝刊 4面〉

国民民主党は(7月)17日午後、国会近くで両院議員懇談会/全国幹事会・自治体議員団等役員合同会議を開催し、新型コロナウイルス感染症対策とコロナ後の社会構想(中略)について党所属国会議員、地方議員が意見交換を行った。(中略)最初の議題「新型コロナウイルス感染症及びコロナ後の社会構想」について、泉健太政務調査会長が党としての取り組み、「コロナ後の社会構想本部」での議論の経過を報告した。続いて同本部長をつとめる玉木代表から、これまで議論をまとめた「コロナ後の社会像〜日本列島回復論〜」と題する基調報告を受け、意見交換を行った。(後略)

〈掲載された写真から読み取れるスライドの内容〉

コロナ後の国家戦略
【効率重視(ジャスト・イン・タイム)】から
【備え重視(ジャスト・イン・ケース)】の国家へ
(1)グローバリズムの見直し(中略)
(2)東京一極集中の見直し(中略)
(3)富の偏在の見直し(中略)
【(中略)DXを推進】


〈国民民主党(公式サイト) 7月17日 ニュース
 コロナ後の社会構想、政党間協議について意見交換 両院議員懇談会/全国幹事会・自治体議員団等役員合同会議〉

切り口に対する施策の組み合わせが、「デジタル・トランス
フォーメーション」を意味する「DX」であるならば、それは
「適切ではない組み合わせ」と言わざるを得ません。

「IT化」は、情報網によって意思決定を助ける材料を提供し、
迅速化、利便性向上等の、生活やサービスを変革する結果を
もたらしますが、「IT化」の概念そのものの中には「どの様
な情報を、誰に届けるか」と言う、結果そのものの方向性を
決定付ける考え方は、一切含まれていないからです。

「IT化」は、かつて、旧民主党政権の時代に、多くの提案が
なされました。IT産業が盛り上がっていた時代背景もあった
と思います。しかし、権力を伴う分野へのITの導入はあまり
進んでいません。

例えば、私たちは税金を支払うと、なぜ損した気分になるの
でしょうか。税金は社会に必要な分野に使われるお金になる、
と(うまい嘘で)納得して(させられて)いますね。だった
ら、なぜ慈善事業に寄付したときの様なすがすがしい気分に
ならないのでしょうか。

かつて、旧民主党政権の時代に政策立案に関わっていた人間
が、いま「今度こそは」とばかりに同じ様な提案をしようと
している様ですが、うまい嘘で納得させられている仕組みの
本当の姿を暴き、害悪の実態を、国民ひとりひとりがつかみ
とれるようにしなければなりません。

「IT化」は、様々な社会変革をもたらす可能性はありますが、
社会変革を成し遂げる手段のひとつに過ぎない事を忘れては
ならないでしょう。社会変革の方向性を決定付ける考え方は
巧妙な嘘に塗り固められ、隠されているからです。

権力に巣食い、うまい嘘で国民を騙して富を掠め取り、その
富を、自分を中心とする親しい仲間に分配する活動を通して
利権共同体をつくり、その利権共同体を中心とする独裁体制
を維持する為に、自分以外の他人が、その仕組みに気付いて
盾つく事の無い様に、その様な行動につながる考えを持つ者
を発見し、監視し、脅迫する装置として、果てしなく高度化
した「IT機器」を、街中に張り巡らせる事だって「IT化」な
のです。

「どの様な情報を、誰に届けるか」と言う、結果そのものの
方向性を決定付ける考え方が含まれていない「DX」はむしろ
害悪そのものである
と言えるのではないでしょうか。

――◆◇◆――

ここで、より現実に近付ける為に、ある特定の条件下で数値
が「中抜き」されていくプログラムを導入しようと思います。

次のファイルをダウンロードします。

modFlatElephant.bas
(厚みが無い様に見えて実は大ごと)

Visual Basicの画面でメニューから「ファイルのインポート」
を選ぶか、「Ctrl+M」キーを押します。

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

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

☆が新たに書き加えられた内容です。

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

ファイル名は、内容を表す相応しい名前をつけます。

「den-dentaku.xlsm / den-dentaku.xls」
(den x2 1x taku)

等が相応しいのではないでしょうか。

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

2020年08月06日

犯罪者を本気で辞めさせようなんて少しも思っていない

犯罪者による独裁が終わりません。その原因はもしかしたら、
犯罪者を本気で辞めさせようなんて少しも思っていない集団
に淡い期待を寄せ続けているからなのかも知れません。

犯罪者による独裁が終わるとしたら、それを実行する可能性
があるのは、いま国会で議席を持っている野党の人間だ、と
多くの国民が考えるでしょう。常識を以って考えればそうと
しか考えられないし、実際その可能性が一番高いのだろうと
思います。そして、支持率は高くないけれども、その実現に
最も近いのが、野党第一党の立憲民主党と、次ぐ国民民主党
だろうと。これまでの政治の常識を踏まえればそうなります。

だから、支持率は高くないけれども、淡い期待を寄せざるを
得ないと言う国民は多くいるのではないかと思います。その
淡い期待を集める立憲民主党と国民民主党の、一部ではある
のかも知れないけれども、少なからぬ数の議員が淡い期待を
寄せるのが「連合」と言う集団なのです。

立憲民主党も国民民主党も、「連合」と言う集団を支持母体
としていた政党を源流とする政党です。「連合」という集団
が持つ組織票を頼りにして当選した国会議員が少なからぬ数
所属しているのです。だから、いまも「連合」と言う集団が
話を持ちかけたら耳を傾ける、と言うのが暗黙の決まりなの
です。

その「連合」について、驚きの知らせが飛び込んで来ました。

(前略)立憲民主党と国民民主党、両党の支持母体である連合の3トップが(6月)26日、会談した。新型コロナウイルス収束後の社会像を議論し、次の衆院選の共通政策にすることを決めた。(後略)

〈朝日新聞 6月27日 朝刊 4面〉

(前略)経済財政・再生相は(7月)28日の記者会見で、(中略)未来投資会議(中略)の新たな議員に(中略)9人を選んだと発表した。(中略)経済閣僚や(中略)経団連会長、(中略)東大学長ら現行メンバーはそのまま残る。

〈日経新聞 7月29日 朝刊 5面〉

(前略)政府は(7月)30日、首相官邸で成長戦略を議論する未来投資会議(議長・安倍晋三首相)を開いた。(中略)感染症の専門家や労使の代表を新たなメンバーに加えた。(中略)新たなメンバーは(中略)連合の神津里季生(りきお)会長らが出席した。(中略)未来投資会議は安倍政権が成長戦略を議論する場として16年に設置した。首相は6月の記者会見で、会議を拡充して「コロナの時代、その先の未来を見据えながら新たな国家像を大胆に構想する」と表明した。

〈日経新聞 7月31日 朝刊 4面〉

何と、「連合」の代表者が組み込まれています。当該会議は、
犯罪者達が国民を騙して掠め取った富を利権共同体の構成員
の間でどの様に分け合うか、を話し合う場
であり、犯罪者達
の利権共同体の一員として「連合」が組み込まれてしまった、
と言わざるを得ない、一線を超えてしまった出来事でしょう。

ときの政権に意見を求められたら何か答える事がこれまでの
習慣だったから、その前例に従っただけなのかも知れません。
それにしても、政権交代を目指す国政政党を応援する集団と
して、深刻な裏切り行為となる可能性に無頓着な脇の甘さに
愕然とせざるを得ません。

少なくとも「連合」と言う集団は、犯罪者を本気で辞めさせ
ようなんて少しも思っていない、と言う事が明らかになった、
と言えるのではないでしょうか。

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