こんばんは。
今日は「犬神製作所」として記事を書きます
いぬがみです(今日は超・長いのでご了承ください)。
いきなり書きます。以下、ものすごい長い文章が続きます。
だから、それだけ長い文章を読むくらいの時間がある方だけ読んでください。今日は特別編です。いつもビールを飲んでいるのに、日本酒を飲んじゃってるくらいですから。日々ため込んでいた思いを爆裂めいっぱい書きますから。ついでに言えば、明日の朝には書いた私自身が忘れている可能性だってありますから。
……と、このあと何があってもいいやと免責事項を並べ立てた犬神製作所代表の私。本当は冗談で代表取締役の向こうを張って代表「戸締役」です、とツカミを書こうと思ったのですが、先にそういう名前でWikipediaにも掲載されるくらい活躍してる方がいらっしゃるようなので、不肖犬神、戸締役を退任いたします。就任したこともありませんが。……いや~私が思いつくような冗談を、もう、本気でやってる方がいらっしゃるんですね。けっこー本気でマイッタマイッタです。
それはともかく「犬神製作所」というのは、何のことはありません。私が2003年ごろ、ビデオゲーム系のホームページを作成するときにファミ通でジョイスティックなどを自作する編集者が「梶原製作所」と呼ばれているのを見て、「製作所って響きが格好いいなあ」という憧れを込めて自称「犬神製作所」と名乗ったにすぎません。実際のところ所長は(こうやってインターネット上で公表する口八丁ぶりはともかく)手先は不器用の極みであり、同じ製作所という名前を掲げている日立製作所島津製作所それからそれから……とにかくすべての人たちにDoGeNeで詫びる用意はありますが、とりあえず今日の記事を書きます。お酒の勢いもありますが、もう今生の別れになってもいい――それくらいの気持ちで書きます。そういう内容であることをご了承いただける方だけ、続きをご覧ください(免責事項)。
今日は「犬神製作所」として記事を書きます
いぬがみです(今日は超・長いのでご了承ください)。
いきなり書きます。以下、ものすごい長い文章が続きます。
だから、それだけ長い文章を読むくらいの時間がある方だけ読んでください。今日は特別編です。いつもビールを飲んでいるのに、日本酒を飲んじゃってるくらいですから。日々ため込んでいた思いを爆裂めいっぱい書きますから。ついでに言えば、明日の朝には書いた私自身が忘れている可能性だってありますから。
……と、このあと何があってもいいやと免責事項を並べ立てた犬神製作所代表の私。本当は冗談で代表取締役の向こうを張って代表「戸締役」です、とツカミを書こうと思ったのですが、先にそういう名前でWikipediaにも掲載されるくらい活躍してる方がいらっしゃるようなので、不肖犬神、戸締役を退任いたします。就任したこともありませんが。……いや~私が思いつくような冗談を、もう、本気でやってる方がいらっしゃるんですね。けっこー本気でマイッタマイッタです。
それはともかく「犬神製作所」というのは、何のことはありません。私が2003年ごろ、ビデオゲーム系のホームページを作成するときにファミ通でジョイスティックなどを自作する編集者が「梶原製作所」と呼ばれているのを見て、「製作所って響きが格好いいなあ」という憧れを込めて自称「犬神製作所」と名乗ったにすぎません。実際のところ所長は(こうやってインターネット上で公表する口八丁ぶりはともかく)手先は不器用の極みであり、同じ製作所という名前を掲げている日立製作所島津製作所それからそれから……とにかくすべての人たちにDoGeNeで詫びる用意はありますが、とりあえず今日の記事を書きます。お酒の勢いもありますが、もう今生の別れになってもいい――それくらいの気持ちで書きます。そういう内容であることをご了承いただける方だけ、続きをご覧ください(免責事項)。
どうしてわざわざ前もって「長い」と宣言したかというと、今日は犬神製作所始まって以来のというか。あるいは今までで最大にというか。いずれにしても、
「ひょっとしたらご覧になる方の『ビジネス』の部分で、役に立つかもしれない」
そんな文章だからです。
すなわちExcel(あるいは、それに準ずるオフィススイート的な表計算ソフト)で作った、日々の業務がチョッピリだけラクになるかもしれないマクロの詳細について、ってことです。もしかしたら検索サイトでアレコレさまよって、こんな辺境のブログにたどり着いた方もいるかもしれませんが……そして、いつまで経っても知りたいことを語らなくてイライラしている方がいるかもしれませんが……大丈夫です。このサイトは、私が知っていることを全部、語ります。ついでに言えば、私自身が苦労してアレコレ思ったことも、残さず語ります。
「今生最後のブログ」そうなっても悔いはないよう、精いっぱい語ります。自分が、とりあえず助けてもらったことをすべてさらけ出すために。
と、まあブログとしてはすでにメチャクチャ長く文章を書いてしまいましたが、今日の話はこういうことです。すなわち、
『私はいかにしてVBA互換のアレコレを使いつつ、LibreOfficeを使って、飲食店の細かいメニューごとの細分をしつつ一日ごとのカウントを、できるだけラクをすることができるExcelマクロっぽいものを作ったか」
ということです。ええ、精いっぱいGoogle検索で引っかかってくれることを祈りつつ書きました。果たして内容が、私のように「あ~面倒くせえなあ、こういうのもっと簡単にできねえかなあ何とかしてよドラえも~ん又は何とかならんのかね大門く~ん」と嘆く二宮係長ないしは野比のび太君に応えられるかどうかわかりませんが……私もインターネットという世界に飛び込んで20年以上経ちましたし。時にはこうやって、狙ってみてもいいかなって。そう思った次第です。
まあ私のような人間は、すでに何度も書いていますが真島の兄さんふうに言えば「アマいな~アマアマや」と言われるかもしれません。ですがネット掲示板とか「わからないことがあったら質問しましょう!」と言って開かれている掲示板めいた場所において、私と同じような「〇〇がしたいんですけど、どうやったら出来るでしょうか!」という率直な質問を投稿した方に対して、「詳しい人に聞いたらいいと思います」とか「質問の意味が分かりません」とか何とかって……
……あえて言います。初めていいます。すでに日本酒を3合(ワンカップ3つ)飲んでしまった勢いをエクスキューズして言います。20世紀末に初めてインターネットの世界に入り込んだアラフォーのオッサンとして言います。……そろそろ、言い訳、いいかな? あえて言います。ずっとずっと我慢していたことを言います。この先ずっとインターネットの世界で死んでしまってもいい、という覚悟で言います。
まず。質問を質問で返すなーッ!(吉良吉影ふうに)
あと、「詳しい人に聞いたらいいと思います」とか「質問の意味が分かりません」とかっていうのは、答えになってないから! 質問をわざわざインターネットの世界に打ち出した人っていうのは、「不特定多数の人が見ているインターネットの世界なら、答えが見つかるかもしれない」と思って書き出しているのだから、それに対して、そんな意味のない書き込みをするなってことですよ! そんな質問するなんてクダラナイって思うのは結構ですが(私も、何かのきっかけでYahoo!知恵袋の記事を見て、そう思うことは少なくないですから)、それに対して真面目に答えるなって! そういうことですよ! そう思うことは勝手ですし、理解もできるし共感も(時々)できますけど、そんなものいちいち書くなーッ!(再び、吉良吉影ふうに)
……てな感じでね。まあ、そういった人たちの論理に従えば、インターネット上の世界のアレコレ不満があるのなら「回線切って首つって死ねボケ」って話であり、私もただちに部屋のベランダで首をつって死ねばいいと思うんですが、その前にこのブログを書いているのは、実際にインターネットの世界で助けられた部分があるからです。それが今日の記事です。
(ここから本題です。
なお、以下の記事は「こんなこともあろうかと」酔っぱらう前に書き溜めておいたテキスト記事を、ほぼそのまま掲載します。文体の不確かなところなどは、リアルタイムに書いた文章ではないということ、そして公開した後、それを逐一修正する余裕がないくらい酔っぱらってしまったとご了承ください。って、もう今現在この記事を読んでいる時点で免責事項に同意したものとみなしますが)。
1.概要
毎日の飲み物の売り上げを「できるだけラクに(=間違いの少ないように)」登録をしたいと思い作成。とりあえず出来上がったものは、こんな感じ。
・商品別に、クリックするとカウントが一つずつ上がる計算シート
・それを日ごとに集約していっぺんに登録するためのボタンをつけた集計表シート
・計算シートの数字は一括ですべての数字をクリアできるようなボタンを搭載
もっとできるかもしれないけれど、とりあえず今の私はこのくらいが限界。あとは使いながら、「こうすればもっとやりやすいよな」っていうのがあれば、それに向かってどうすればいいかを考えればいい。そういうこと。
2.計算シートについて
そもそも最初は月ごとのトータル数が分かればいいや、ということだったので、単純なカウントアップ用のマクロを作成した。初めから表計算ソフトに搭載されているボタンを貼り付けて、「1クリックすると、数字が1上がる」という超プリミティブなマクロ。こんな感じ。
Sub G_RED
Range("C2") = Range("C2").Value + 1
End Sub
これを集計したい項目分だけひたすら量産する。シンプルだけと地味に時間がかかった。難しいことはないけれど地味に地道に時間がかかる作業だった。
ともあれ、これで基本的なものはできた。あとは月ごとにシートを丸ごとコピーするなり、元々あった集計表にコピペするなりしてやれば、最低限の目的は達成できるだろう。さてビールでも飲むか。
……と思っていたのだが、もう少し詳しく情報が分かるなら、その方がいい。たとえば(どういう意味があるかわからないけれど)日ごとに集計を取れれば、さらにいいだろう。データは精度が高ければ高い方がいいものだ。さあ、もうちょっと頑張ってみよう。
3.1日単位での集計のために
とりあえず、品目ごとに1か月分の日付を入れたリストを作った(多すぎるのでワインとそれ以外にわけた)。問題はカウントした数字を、ここにどうやって入力していくかだ。数字をコピペするか? それとも一つずつ手入力するか? そりゃあもちろん、そうやって手間を惜しまなければできるだろうけれど、せっかくこうして単純な作業をスイッチ一つで勝手にやってくれるマクロというものを知ったんだし、それを使って何とかならんのかね大門君、というわけでアレコレ考えてみました。
理想としては、
「数字を入力するシートにスピンボタンか何かをつけて、そこで日付を変更すれば、入力した数字がそのまま各日付のセルに代入される」
というのがいいのかもしれないけれど(今思いついた)、果たしてどうすればできるのか。そこに至る道のりがちょっとピンとこない。さすがにちょっと時間もない。そこで、ひとまず、
「その日の数字をコツコツとカウントして、1日分すべてカウントが終了したら、とりあえずその日の分をすべて反映させるボタンを作る(次の日の数字は、カウント表をいったん白紙に戻して、またカウントし直す)」
ということから始めることにした。これでもまだちょっと手間がかかるが、一項目ずつコピペするよりはマシだろ。
さて今度は、「ほかのシートの数字を、ここのセルに引っ張ってくる」ためにはどうするか、ということだった。アレコレと調べた結果、以下のようなマクロで、とりあえず実現した。
Sub senodon
Worksheets("nikkei_uriage").Range("B5").value = Worksheets("drink_counter").Range("C2").value
Worksheets("nikkei_uriage").Range("B6").value = Worksheets("drink_counter").Range("C4").value
Worksheets("nikkei_uriage").Range("B7").value = Worksheets("drink_counter").Range("C6").value
Worksheets("nikkei_uriage").Range("B8").value = Worksheets("drink_counter").Range("C8").value
(中略)
end sub
マクロの名前は「クイズダービー」の名台詞から。一斉に数字が表示されるのは「倍率ドン」であり「せーのドン!」は回答者のこたえを表示させる時だけど、まあいいや。この場合、左側のWorksheetsの項目に反映させたい先のシート名とセルの場所を入力し、右側には反映させたい元のシート名のセルと場所を入力するといい。どうして右左があるのか? そう言われると、ちょっとわからないけれど……とにかくそういうものだと知って、ほとんど丸写ししたら、実際にうまくいったので。
こんな感じの文言を3000行くらい打ち込んで、ようやく、
「〇月×日、ドリンクがコレコレくらい売れた。カウントした。反映させた」
という道のりが出来上がった。カウントするのはアナログ手書き伝票を見て入力するものだから、それなりに時間がかかるが、これでだいぶん打ち間違いとか手間とかが、省けるんじゃないかな。
4.一斉削除ボタンと「本当にいいですか?」
カウント用のページについては、日ごとにいちいちすべての数字をリセットしなければならない。いくら列ごとの指定をして云々と言っても、1クリックで終わらせられる方法があるのなら、その方がいい。というわけで新しいボタンを作り、こんな感じで一発削除ボタンを作った。
Sub OKdelete2
Dim rc As VbMsgBoxResult
rc = MsgBox("入力した数値をすべてクリアします。" & vbCrLf & "処理を続行しますか?", vbYesNo + vbQuestion, "削除の確認")
If rc = vbYes Then
Range("C2:C24").ClearContents
Range("F2:F24").ClearContents
Range("I2:I29").ClearContents
Range("L2:L24").ClearContents
Range("O2:O23").ClearContents
Range("R2:R25").ClearContents
Else
MsgBox "処理を中止します", vbCritical
End If
End Sub
別に1クリックして、いきなり全部の数字がクリアされたとしても、いいと思うのだけれど。「何となくこうすると、アプリっぽいかな」と色気を出し、問い合わせダイアログを作成した。こういうこともできるっていうのを知れば、試したくなってしまうのである。
IfとかThenとかって構文を見て、いよいよBASICっぽくなってきたなと思った。25年前、MS-DOSベースのBASIC環境で作った実習プログラムのことを思い出した。とりあえず、単語を見て、何をしようとしているのか雰囲気が分かるしね。
「Dim rc As VbMsgBoxResult」
丸ごと例文をコピペしただけだが、何とか意味を理解しようと思って、この一文だけを抜き出し、じっと見つめてみる。技術の授業であり、英語の授業でもあるようだ。Asってのは「~として」って意味だよなあ? で、2行目にrcとは……って言葉を入れた。Dimっていうのは変数を宣言するための言葉らしい。
つまり、ええと、その……一連の文章を翻訳すると、こういうことになるのかしら。
「おれにもどうなるかわからない要素rcがあることを宣言するよ。rcの内容は
MsgBox("入力した数値をすべてクリアします。" & vbCrLf & "処理を続行しますか?", vbYesNo + vbQuestion, "削除の確認")
っていうことだ。問いかけに対してYesというのなら、Then Range…以降の処理をするし、elseすなわち『それ以外』であれば「処理を中断します」というメッセージを発するだけでオシマイ、ってね」
MsgBoxというのは、Windowsを使っていれば何回も目にするダイアログですね。いきなりポンと出てきて「〇〇しますか?」というメッセージとともにYesかNoかのボタンが出るアレです。そしてYesかNoか、どっちのボタンを押したかによってその後の展開が分岐する。おなじみのアレです。
すげぇ~な、と思いました。ほんの一行、特定のキーワードをポチポチと打ち込むだけで、まるで商業アプリを作っている人のような雰囲気の真似事ができるんですね。いやもう、本当に感動レベルです。私が好きな文章でポーンと問い合わせダイアログを表示させることができるなんて(あ、ポーンと鳴ってダイアログが出るのは、もしかしたらWindows9Xの時代かもしれません古くてゴメンナサイ)。
そんなわけで、まだまだ改良の余地はあるけれど、とりあえず今の時点ではこんな感じのツールができた。まだまだ改良の余地はいっぱいあるけれど、それは今後「こうしたら、もっと良いだろうな」っていうのが出てきてからだろうな。「こうしたいと思ったことをそうする」のが、手打ちの自家製アプリだろうし。「やろうと思えば(何でもとは言わないけど、けっこー色々なことが)できる」っていうことがわかっただけでも、いいかな。
……きっと私のように、「VBAとかマクロとか全然知らねえよ! エクセルっていうのは会社で使ってるから何となくわかるけどさ!」という人は、この世にたくさんいると思います。私もそうです。そして、そのうえで「こういうことしたいんだけど、どうすればいいんだろう?」と自分がやりたいことをポチポチと検索候補として打ち込みあれこれ苦労している方は、たくさんいると思います。
だからといって誰かにネット上で質問したところで、要領を得ない答えばかりが返ってくるだろうと思って(というか、私自身がそういう思いをして)。そんな中でも親切な人が公開している記事をアレコレと参照して作り上げました。
私もきめ細かく皆様のピンポイントな「やりたいこと」にズバリと回答することはできませんが、一方で微力ながら、そういう風に思っている方の力になりたいと思っています。そういうわけで今回、メチャクチャ長い文章を公開しました。
今回、私が書いた内容というのは、文章の長さのわりに……大したことじゃありません。酔いの勢いもあって、無駄なことがいっぱいあります。もしかしたら、せっかく何かしら検索して来ていただいた方とっても、役に立たないかもしれません。
でも、とりあえず私が知っている精いっぱいを発信したくて、この記事を書きました。これは私が自分で調べて、色々な人に助けてもらって、ようやく作り上げた「自分のもの」――そのすべてを書いています。あまり上手じゃないので、わかりづらいかもしれませんが、そういうことです。
このブログを書いた後、たとい私がこの世を去ったとしても、後悔はありません。
私が生きているうちに、せめて、この文章を読んで――2021年内にはいなくても、2029年までに、あるいは2030年代、なんだったら2000年代のうちに(900年後にこのブログが残っているとは思えませんが)誰かが見て、「ああ、そうか! こうすればいいんだ!」と思ってもらえる人が、ひとりでもいれば。
それでこのブログの役目、ひいては私がこの世に生まれてきた役目というのは、果たせたのかな。そう思えます。
ここまで読んでくださって、ありがとうございました。
まだ生きていることができたら、またブログを更新します。
そうでありたいと願いつつ、今日はこの辺で。
良い夢を。おやすみなさい。
そして、明日も明後日もその先も、皆様の人生が、これからずっと良い日でありますように。
さようなら。
グッバイアディオス再見また会う日までララララ~ヘイ!
PR
追記を閉じる▲
どうしてわざわざ前もって「長い」と宣言したかというと、今日は犬神製作所始まって以来のというか。あるいは今までで最大にというか。いずれにしても、
「ひょっとしたらご覧になる方の『ビジネス』の部分で、役に立つかもしれない」
そんな文章だからです。
すなわちExcel(あるいは、それに準ずるオフィススイート的な表計算ソフト)で作った、日々の業務がチョッピリだけラクになるかもしれないマクロの詳細について、ってことです。もしかしたら検索サイトでアレコレさまよって、こんな辺境のブログにたどり着いた方もいるかもしれませんが……そして、いつまで経っても知りたいことを語らなくてイライラしている方がいるかもしれませんが……大丈夫です。このサイトは、私が知っていることを全部、語ります。ついでに言えば、私自身が苦労してアレコレ思ったことも、残さず語ります。
「今生最後のブログ」そうなっても悔いはないよう、精いっぱい語ります。自分が、とりあえず助けてもらったことをすべてさらけ出すために。
と、まあブログとしてはすでにメチャクチャ長く文章を書いてしまいましたが、今日の話はこういうことです。すなわち、
『私はいかにしてVBA互換のアレコレを使いつつ、LibreOfficeを使って、飲食店の細かいメニューごとの細分をしつつ一日ごとのカウントを、できるだけラクをすることができるExcelマクロっぽいものを作ったか」
ということです。ええ、精いっぱいGoogle検索で引っかかってくれることを祈りつつ書きました。果たして内容が、私のように「あ~面倒くせえなあ、こういうのもっと簡単にできねえかなあ何とかしてよドラえも~ん又は何とかならんのかね大門く~ん」と嘆く二宮係長ないしは野比のび太君に応えられるかどうかわかりませんが……私もインターネットという世界に飛び込んで20年以上経ちましたし。時にはこうやって、狙ってみてもいいかなって。そう思った次第です。
まあ私のような人間は、すでに何度も書いていますが真島の兄さんふうに言えば「アマいな~アマアマや」と言われるかもしれません。ですがネット掲示板とか「わからないことがあったら質問しましょう!」と言って開かれている掲示板めいた場所において、私と同じような「〇〇がしたいんですけど、どうやったら出来るでしょうか!」という率直な質問を投稿した方に対して、「詳しい人に聞いたらいいと思います」とか「質問の意味が分かりません」とか何とかって……
……あえて言います。初めていいます。すでに日本酒を3合(ワンカップ3つ)飲んでしまった勢いをエクスキューズして言います。20世紀末に初めてインターネットの世界に入り込んだアラフォーのオッサンとして言います。……そろそろ、言い訳、いいかな? あえて言います。ずっとずっと我慢していたことを言います。この先ずっとインターネットの世界で死んでしまってもいい、という覚悟で言います。
まず。質問を質問で返すなーッ!(吉良吉影ふうに)
あと、「詳しい人に聞いたらいいと思います」とか「質問の意味が分かりません」とかっていうのは、答えになってないから! 質問をわざわざインターネットの世界に打ち出した人っていうのは、「不特定多数の人が見ているインターネットの世界なら、答えが見つかるかもしれない」と思って書き出しているのだから、それに対して、そんな意味のない書き込みをするなってことですよ! そんな質問するなんてクダラナイって思うのは結構ですが(私も、何かのきっかけでYahoo!知恵袋の記事を見て、そう思うことは少なくないですから)、それに対して真面目に答えるなって! そういうことですよ! そう思うことは勝手ですし、理解もできるし共感も(時々)できますけど、そんなものいちいち書くなーッ!(再び、吉良吉影ふうに)
……てな感じでね。まあ、そういった人たちの論理に従えば、インターネット上の世界のアレコレ不満があるのなら「回線切って首つって死ねボケ」って話であり、私もただちに部屋のベランダで首をつって死ねばいいと思うんですが、その前にこのブログを書いているのは、実際にインターネットの世界で助けられた部分があるからです。それが今日の記事です。
(ここから本題です。
なお、以下の記事は「こんなこともあろうかと」酔っぱらう前に書き溜めておいたテキスト記事を、ほぼそのまま掲載します。文体の不確かなところなどは、リアルタイムに書いた文章ではないということ、そして公開した後、それを逐一修正する余裕がないくらい酔っぱらってしまったとご了承ください。って、もう今現在この記事を読んでいる時点で免責事項に同意したものとみなしますが)。
1.概要
毎日の飲み物の売り上げを「できるだけラクに(=間違いの少ないように)」登録をしたいと思い作成。とりあえず出来上がったものは、こんな感じ。
・商品別に、クリックするとカウントが一つずつ上がる計算シート
・それを日ごとに集約していっぺんに登録するためのボタンをつけた集計表シート
・計算シートの数字は一括ですべての数字をクリアできるようなボタンを搭載
もっとできるかもしれないけれど、とりあえず今の私はこのくらいが限界。あとは使いながら、「こうすればもっとやりやすいよな」っていうのがあれば、それに向かってどうすればいいかを考えればいい。そういうこと。
2.計算シートについて
そもそも最初は月ごとのトータル数が分かればいいや、ということだったので、単純なカウントアップ用のマクロを作成した。初めから表計算ソフトに搭載されているボタンを貼り付けて、「1クリックすると、数字が1上がる」という超プリミティブなマクロ。こんな感じ。
Sub G_RED
Range("C2") = Range("C2").Value + 1
End Sub
これを集計したい項目分だけひたすら量産する。シンプルだけと地味に時間がかかった。難しいことはないけれど地味に地道に時間がかかる作業だった。
ともあれ、これで基本的なものはできた。あとは月ごとにシートを丸ごとコピーするなり、元々あった集計表にコピペするなりしてやれば、最低限の目的は達成できるだろう。さてビールでも飲むか。
……と思っていたのだが、もう少し詳しく情報が分かるなら、その方がいい。たとえば(どういう意味があるかわからないけれど)日ごとに集計を取れれば、さらにいいだろう。データは精度が高ければ高い方がいいものだ。さあ、もうちょっと頑張ってみよう。
3.1日単位での集計のために
とりあえず、品目ごとに1か月分の日付を入れたリストを作った(多すぎるのでワインとそれ以外にわけた)。問題はカウントした数字を、ここにどうやって入力していくかだ。数字をコピペするか? それとも一つずつ手入力するか? そりゃあもちろん、そうやって手間を惜しまなければできるだろうけれど、せっかくこうして単純な作業をスイッチ一つで勝手にやってくれるマクロというものを知ったんだし、それを使って何とかならんのかね大門君、というわけでアレコレ考えてみました。
理想としては、
「数字を入力するシートにスピンボタンか何かをつけて、そこで日付を変更すれば、入力した数字がそのまま各日付のセルに代入される」
というのがいいのかもしれないけれど(今思いついた)、果たしてどうすればできるのか。そこに至る道のりがちょっとピンとこない。さすがにちょっと時間もない。そこで、ひとまず、
「その日の数字をコツコツとカウントして、1日分すべてカウントが終了したら、とりあえずその日の分をすべて反映させるボタンを作る(次の日の数字は、カウント表をいったん白紙に戻して、またカウントし直す)」
ということから始めることにした。これでもまだちょっと手間がかかるが、一項目ずつコピペするよりはマシだろ。
さて今度は、「ほかのシートの数字を、ここのセルに引っ張ってくる」ためにはどうするか、ということだった。アレコレと調べた結果、以下のようなマクロで、とりあえず実現した。
Sub senodon
Worksheets("nikkei_uriage").Range("B5").value = Worksheets("drink_counter").Range("C2").value
Worksheets("nikkei_uriage").Range("B6").value = Worksheets("drink_counter").Range("C4").value
Worksheets("nikkei_uriage").Range("B7").value = Worksheets("drink_counter").Range("C6").value
Worksheets("nikkei_uriage").Range("B8").value = Worksheets("drink_counter").Range("C8").value
(中略)
end sub
マクロの名前は「クイズダービー」の名台詞から。一斉に数字が表示されるのは「倍率ドン」であり「せーのドン!」は回答者のこたえを表示させる時だけど、まあいいや。この場合、左側のWorksheetsの項目に反映させたい先のシート名とセルの場所を入力し、右側には反映させたい元のシート名のセルと場所を入力するといい。どうして右左があるのか? そう言われると、ちょっとわからないけれど……とにかくそういうものだと知って、ほとんど丸写ししたら、実際にうまくいったので。
こんな感じの文言を3000行くらい打ち込んで、ようやく、
「〇月×日、ドリンクがコレコレくらい売れた。カウントした。反映させた」
という道のりが出来上がった。カウントするのはアナログ手書き伝票を見て入力するものだから、それなりに時間がかかるが、これでだいぶん打ち間違いとか手間とかが、省けるんじゃないかな。
4.一斉削除ボタンと「本当にいいですか?」
カウント用のページについては、日ごとにいちいちすべての数字をリセットしなければならない。いくら列ごとの指定をして云々と言っても、1クリックで終わらせられる方法があるのなら、その方がいい。というわけで新しいボタンを作り、こんな感じで一発削除ボタンを作った。
Sub OKdelete2
Dim rc As VbMsgBoxResult
rc = MsgBox("入力した数値をすべてクリアします。" & vbCrLf & "処理を続行しますか?", vbYesNo + vbQuestion, "削除の確認")
If rc = vbYes Then
Range("C2:C24").ClearContents
Range("F2:F24").ClearContents
Range("I2:I29").ClearContents
Range("L2:L24").ClearContents
Range("O2:O23").ClearContents
Range("R2:R25").ClearContents
Else
MsgBox "処理を中止します", vbCritical
End If
End Sub
別に1クリックして、いきなり全部の数字がクリアされたとしても、いいと思うのだけれど。「何となくこうすると、アプリっぽいかな」と色気を出し、問い合わせダイアログを作成した。こういうこともできるっていうのを知れば、試したくなってしまうのである。
IfとかThenとかって構文を見て、いよいよBASICっぽくなってきたなと思った。25年前、MS-DOSベースのBASIC環境で作った実習プログラムのことを思い出した。とりあえず、単語を見て、何をしようとしているのか雰囲気が分かるしね。
「Dim rc As VbMsgBoxResult」
丸ごと例文をコピペしただけだが、何とか意味を理解しようと思って、この一文だけを抜き出し、じっと見つめてみる。技術の授業であり、英語の授業でもあるようだ。Asってのは「~として」って意味だよなあ? で、2行目にrcとは……って言葉を入れた。Dimっていうのは変数を宣言するための言葉らしい。
つまり、ええと、その……一連の文章を翻訳すると、こういうことになるのかしら。
「おれにもどうなるかわからない要素rcがあることを宣言するよ。rcの内容は
MsgBox("入力した数値をすべてクリアします。" & vbCrLf & "処理を続行しますか?", vbYesNo + vbQuestion, "削除の確認")
っていうことだ。問いかけに対してYesというのなら、Then Range…以降の処理をするし、elseすなわち『それ以外』であれば「処理を中断します」というメッセージを発するだけでオシマイ、ってね」
MsgBoxというのは、Windowsを使っていれば何回も目にするダイアログですね。いきなりポンと出てきて「〇〇しますか?」というメッセージとともにYesかNoかのボタンが出るアレです。そしてYesかNoか、どっちのボタンを押したかによってその後の展開が分岐する。おなじみのアレです。
すげぇ~な、と思いました。ほんの一行、特定のキーワードをポチポチと打ち込むだけで、まるで商業アプリを作っている人のような雰囲気の真似事ができるんですね。いやもう、本当に感動レベルです。私が好きな文章でポーンと問い合わせダイアログを表示させることができるなんて(あ、ポーンと鳴ってダイアログが出るのは、もしかしたらWindows9Xの時代かもしれません古くてゴメンナサイ)。
そんなわけで、まだまだ改良の余地はあるけれど、とりあえず今の時点ではこんな感じのツールができた。まだまだ改良の余地はいっぱいあるけれど、それは今後「こうしたら、もっと良いだろうな」っていうのが出てきてからだろうな。「こうしたいと思ったことをそうする」のが、手打ちの自家製アプリだろうし。「やろうと思えば(何でもとは言わないけど、けっこー色々なことが)できる」っていうことがわかっただけでも、いいかな。
……きっと私のように、「VBAとかマクロとか全然知らねえよ! エクセルっていうのは会社で使ってるから何となくわかるけどさ!」という人は、この世にたくさんいると思います。私もそうです。そして、そのうえで「こういうことしたいんだけど、どうすればいいんだろう?」と自分がやりたいことをポチポチと検索候補として打ち込みあれこれ苦労している方は、たくさんいると思います。
だからといって誰かにネット上で質問したところで、要領を得ない答えばかりが返ってくるだろうと思って(というか、私自身がそういう思いをして)。そんな中でも親切な人が公開している記事をアレコレと参照して作り上げました。
私もきめ細かく皆様のピンポイントな「やりたいこと」にズバリと回答することはできませんが、一方で微力ながら、そういう風に思っている方の力になりたいと思っています。そういうわけで今回、メチャクチャ長い文章を公開しました。
今回、私が書いた内容というのは、文章の長さのわりに……大したことじゃありません。酔いの勢いもあって、無駄なことがいっぱいあります。もしかしたら、せっかく何かしら検索して来ていただいた方とっても、役に立たないかもしれません。
でも、とりあえず私が知っている精いっぱいを発信したくて、この記事を書きました。これは私が自分で調べて、色々な人に助けてもらって、ようやく作り上げた「自分のもの」――そのすべてを書いています。あまり上手じゃないので、わかりづらいかもしれませんが、そういうことです。
このブログを書いた後、たとい私がこの世を去ったとしても、後悔はありません。
私が生きているうちに、せめて、この文章を読んで――2021年内にはいなくても、2029年までに、あるいは2030年代、なんだったら2000年代のうちに(900年後にこのブログが残っているとは思えませんが)誰かが見て、「ああ、そうか! こうすればいいんだ!」と思ってもらえる人が、ひとりでもいれば。
それでこのブログの役目、ひいては私がこの世に生まれてきた役目というのは、果たせたのかな。そう思えます。
ここまで読んでくださって、ありがとうございました。
まだ生きていることができたら、またブログを更新します。
そうでありたいと願いつつ、今日はこの辺で。
良い夢を。おやすみなさい。
そして、明日も明後日もその先も、皆様の人生が、これからずっと良い日でありますように。
さようなら。
グッバイアディオス再見また会う日までララララ~ヘイ!
PR
この記事のトラックバックURL
この記事へのトラックバック