見出し画像

[Excel]OSとVBAとVScode

こんばんは。今日もお疲れ様です。

視座低めな私にとって、あまりいかついタイトルは好きではありません、、今回だけはお許しください。
エクセルマクロについて徒然に記すと
奔放な文章になってしまったので、
ここに供養します。

その代わりに、最大限の説明をここで試みましょう。

皆様エクセルやワードを使ったことがありますでしょうか?
お仕事や学校で、計算や書類作りにお使いな場合も多いかと思います。

クロムブックなどを使われていて、Googleのソフトを使うことが多い
なんだかごちゃごちゃしてあまり得意じゃない!
という方もいらっしゃるかと思います。

エクセルやワード、パワーポイントなど、マイクロソフト社が開発したソフトは、同社が開発し大きなシェアを持つWindowsとの相性もあり、
広くビジネスの場で使用されています。

ただ私を含めなかなかその膨大な機能を使いきれない場合が多いです。

割と誰でも使える事を重視していますが、結構一生押すことがなさそうなボタンがたくさんあるのも特徴です。

確かになんらかのモチベーションがあって、プレッシャーもなく弄れるなら上達するんだけどなあと、多くの大人が思われるのではないでしょうか?

このようになかなか忙しい事務職などの合間に習得するのは難しいですが、こうして時間を持て余す大学生がちょこちょこTipsを書いてゆくのも、社会貢献になるのではないか、と信じ、ネットの海へ匿名で残します。

ここではまず良く引き合いに出されるExcelに関して話します。

旧2ちゃんねるなどで聞いたことがあるマクロですが、なんとなく勝手に投票してくれるようなシステムを作れるもの。プログラミング感のあるものとお思いな方も多いのではないのでしょうか?

おっしゃる通りプログラミング的な感じです。
確かにエクセルの中で行う動作を、別に機械に教えれば自動でやってくれそうだなと思いませんでしょうか?
所詮はダブルクリックやコピペが作業の多くを占めている気もしてきます。

少しプログラミング自体の話も交えると、
プログラミングでは、なんらかの処理をしてくれるパソコンに、何をして欲しいのか伝える必要があります。
その伝える媒体がプログラミング言語だと考えて問題ありません。

エクセルなどのオフィスソフトで一般に使用するプログラミング言語をVBAと呼び、それを適切な場所に書くことで、エクセルをある程度勝手に動かすことができるようになります。

適切な場所や、その書き方に関しては順次記事にしたいと思います。

ちょっと自身の復習も兼ねて、以下の問いについて考えたいと思います。
「プログラミング言語で出した指示はどこを通って反映されるの?」
というものです。

まずはパソコンの中の階層構造に言及しなければいけません。
まず階層の最も深いところにあるのが、ハードウエア、パソコン自体を構成する部品となります。
大まかに、お聞きしたことがあるであろうC P Uなどと思っていただければ問題ないと思われます。

ただ、計算能力のある部品だけがあっても、パソコンは動きません。
そこにはOSと呼ばれる、ハードウエアとソフトを繋ぐソフトが必要です。
OSはその中身が公開され、みんなでいいものを作るLinuxのようなものもあれば、中身を(ほぼ?)ブラックボックスとしながら使いやすさや動きやすさで差別化し、商品として成り立たせるWindows,Macなどがあります。

OSの中身も、カーネル・ミドルウエアと、階層があるようです。
キーボードの中のあるキーを打った、USBを差した、声をかけたのような入力を解釈してソフトに伝えるのもOSの役割であり、これをコピーしたい。のようなソフトからの要請に応えて、コピー機やディスプレイを動かす指示を出すのもOSの役割です。

こちらがわかりやすいのでご参照ください。

https://ic3.odyssey-com.co.jp/study/pdf/gs4cf/1-6.pdf

こう聞くと、
なぜOSなんてものが必要なのかと疑問に思われるかもしれません。
ここでハードウエアは機械語と呼ばれる、0・1の羅列
オンオフの信号しか理解できないことが重要です。

かつて古いコンピューターにはOSが存在せず、人間が人力でこの機械語をスイッチで入力していました。

しかしそうするうちに、それぞれのプログラムで似通った部分が存在することにエンジニアが気づき始め(キーボードで打つ、画面に表示するなど)、それを毎回ハードウエアがわかるように翻訳してあげるのをめんどくさく無駄だと思うようになったのです。

その他ハードウエアの部品を制御する機能など、諸々を自動化して行った結果、多数のソフトが融合したサグラダファミリアが完成しました。
それがOSの元祖です。

現代においてOSが緩衝材になってくれるため、ほとんどハードウエアに直接指示を出すことはなくなってしまいました。

いまいちピンときていないところは、プログラミングの中で、コンパイルという操作を通じて、機械語へと変換したファイルを作成し、これは直接CPUに命令を出せると理解してるのですが、CPUもハードウエアの一つとなればCPUまでこの機械語は飛んでいっているのか、それともOSは機械語しか理解できず、OSにその命令を出しているのかちょっと確信できていないところです。

文脈上おそらく後者だと思われます。

OSは入力をハードウエアにわかるように翻訳する場所かと思っていたので、翻訳済みの情報を飲み込んで何をするのか、もしかして翻訳したものを受け取った場合ほぼそのまま流せばいいので動きが早いのか、などと考えています。

どのOSを使っていても、同じ文法や単語のプログラミング言語でなければ困ります。
その言語をCPUがわかるように翻訳するときに、OSに合った形で機械語に変換され、その機械語のメッセージに従ってOSがハードウエアを制御してゆく形があり得そうです。

こちらを大いに参考にさせていただきました。

Youtubeでエクセルマクロの書き方についていくつか動画を見て、
そのプログラムを書くところ(エディタと言います)が
いまいち使いにくいなと感じたので、
馴染みのあるVScodeで書けないかと思った段階です。

やっと本題に入ることができます。
参考文献はこちらです。

windows対応の記事でしたのでなかなか手が出ませんが、
お使いのパソコンの中になんとか編集画面、編集しているファイルを持ち込み(持ち込んでいいように設定を変更し)、vscodeで開いてしまえばかける気がするのですが、

.xlsmファイル(開くと、マクロ付きのシートが出てくるもの)はもちろんVScodeからひらけず、(シートのデータも入ったでかいファイルで、その中のモジュールだけ触れていないです。

(きっと良くないのですが、検索すると自身の知らないファイルがそこそこヒットしますよね)

しかしファインダーからモジュールを検索してもヒットしません。

ではローカル環境(ではない部分も)にはないとなれば、無理やりにでも引っ張り出してきたらどうだろうと、右クリックでデスクトップの好きなファイルへエクスポートしてきました。

するとなんと.bas(BASIC)の拡張子で開くことができました!
BASICは名前しか知らない言語だったので良き出会いです。

快適に日本語も入力でき、(もともとそうですが)好きなフォントで編集することができます!
コメントして保存しても何も問題が起こりません。

しかし、これを戻す、もしくは追加できなければ、本当に使えるようにはなりません。

試しに先ほどエクスポートしたところをインポートしたところ、無事入りました!

弄るうちに、エディタの表示を消滅させてしまうあるあるミスをしたので、こちらにその対処法を記載します。
タスクバーは本当に偉大です。

注意点は私は同じ名前のままぶち込んでしまったので、新しく入れた方の後ろに1がついてしまいました。

ただしっかり文字化けしてしまいましたね、、文字コードについてきちんとさらいます。

結局文字化けや入力のめんどくささで、コメントに英語を使うことがじわじわ出てきます。自ずと何かするようになるためには、そうしないとめんどくさいよねって環境に身を置くのが大切ですね。

文字化けの原因は文字コードの違いくらいの知識しかありませんが、エクセル周りでよく見る気がします。
Mac(Apple)デフォルトのUTF-8を、office(microsoft)で開くと生じている場合が多そうですね。
VScodeはマイクロソフト社が作っているはずなのに、文字コードはUTF-8に設定されていますね。自分で変更したのでしょうか?まだまだ勉強不足です。

VScodeの文字コード変更は、右下のUTF-8となってるところをクリック→save with encording→Shift JIS(検索したほうが早い)で行うことができます。
seve with encordingは画面そのままに、文字コードを変更する仕様、
reopen with encordingはその文字コードをそのままに、新しく指定した文字コードに倣って開く仕様なようです。

VScodeで開いてみて、もともと文字化けしていた場合には、reopenを使ってください。

結局なんでも英語で書くのが正解感は否めません、、

再びShift JISで入れたのちに、再び開くと、日本語も反映されておりました。
ただファイル名を変えてから入れてみたにも関わらず、右クリックしたモジュールの右に1が足されたものがファイル名になったので、右クリック先の姉妹的なモジュールとして名前がつくのかもしれません。
どうも私のスキルでは名前の変更もまだできなかったので、もう少し複雑なことができるようになり必要になったときに追記したいと思います。

あとがき

ご精読ありがとうございました。

ありがとうございます!!!!!!!!!!!!!