【VBA】MsgBox関数を使ってみよう(2)
前回の(1)ではMsgBox関数を使って文字列の表示とOKボタンのみがメッセージボックスとして表示する方法について書かせて頂きましたが、今回はそんなMsgBox関数に色々くっつけてもう少し味気のあるものにしてみたいと思います。
oyajinokakurega.hatenablog.com
(前回のメッセージボックス)
(今回作るのはこんな感じでアイコンやら改行やらします)
メッセージボックスの枠が違うのはExcelのver違いなのでお気になさらず。
(2つ端末使っているので…)
ではいってみよう。
まずは中身を見てみよう
まず先程の例で使ったメッセージボックスの中身(VBA)を見てみましょう。
Sub test()
MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります", vbYesNoCancel + vbInformation
End Sub
前回の「MsgBox "表示させたい文字列"」よりも随分長くなったように感じるかと思います。
僕もそう思います。
パッと見て「&」とか文字化けかよとか思いますもん。
けれども1つ1つを見ていくと大したことないので続けますね。
「&」ってなんぞや
早速文字化けかと思われがちな「&」についてですが、これは実は演算子。
カッコつけて言うと文字列連結演算子。
簡単に言うと文字列を連結するときに使う演算子。
例えば
A="1173" B="3373"
A&Bは11733373となります。A+Bも同じです。
vbCrLfは何なんだ?
これも文字化けかと思いますよね。大文字と小文字が入り混じってオシャレさんぶってる匂いも微かに感じる。
このオシャレさんは改行コード。
オシャレでもなんでもなかった。
vbはオマケということで、CrLfは「キャリッジリターン・ラインフィード」の略とか言われているようです。タイプライター時代の名残でしょうか。
MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります"
訳すと
メッセージボックス「今回はこんな感じ!(連結)(改行)(連結)随分見栄えが変わります」
といったところでしょうか。
OK以外のボタンを付けたい
有無を言わせない雰囲気が醸し出される「OK」オンリー。
選択の余地が欲しいものです。
冒頭の例では「はい」「いいえ」「キャンセル」といった3つの選択肢をご用意。
欲張りました。
他にはどんなボタンがあるかというと…
・vbOKOnly
→「OK」ボタンのみ
・vbOKCancel
→「OK」と「キャンセル」ボタン
・vbAbortRetryIgnore
→「中止」「再試行」「無視」ボタン
・vbYseNoCancel
→「はい」「いいえ」「キャンセル」ボタン(今回のやつ)
・vbYesNo
→「はい」「いいえ」ボタン
・vbRetryCancel
→「再試行」と「キャンセル」ボタン
この英語達を定数というのだけど、実は値というもの存在して上から「0」「1」「2」「3」「4」「5」と割り振られているんですが、値に関してはあまりオススメしないので覚えておかなくても良いかと思います。
オシャレにアイコンでも付けとく?
オシャレかどうかは置いといて、アイコンがあると表示されているメッセージが何なのか分かり易くなることは間違いないです。
vbInformationの他に何があるのかというと…
・vbCritical
→「警告」です。赤丸に×みたいな。
・vbQuestion
→「?」です。
・vbExclamation
→「!」です。
・vbInformation
→「i」です。(今回のやつ)
こちらも英語を定数といい、やっぱり上から値があって「16」「32」「48」「64」となっています。16の2倍、3倍、4倍…て、これもオススメはしないので頭の片隅くらいで良いとは思います。
ですがせっかくなので例を書き残しておこうかと思います。
(例1)冒頭のやつ
MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります", vbYesNoCancel + vbInformation
(例2)値を使ってみる その1
MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります", 3 + 64
(例3)値を使ってみる その2
MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります", 67
例1~3のどれでも結果は同じなのでお試しあれ。
値(例2、3)を用いた書き方をオススメしない理由についてですが単純に読みにくいからです。カッコイイ言い方をするなら可読性が低下する…とか?
要は保守するのは人間なので読みにくいのはどうなのよ…というだけです。
いきなり「67」とか言われても困っちゃいますよね。
何と何を足したんだ?って。
なので定数で書いておく方が良いかと思うわけです。
まとめ
パッと見ると文字化け小難しいことを書いているようですが分解して見るとただ組み合わさっているだけなことが分かると思います。
MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります", vbYesNoCancel + vbInformation
「今回はこんな感じ!(改行)随分見栄えが変わります(ボタンは「はい」「いいえ」「キャンセル」)(アイコンはお知らせ系なので「i」にしよう)」
定数や値という言葉に混乱しないよう、とりあえず形で覚えてしまうのも手かと思います。
【Excel】VBAとマクロの違いって?
やれマクロ、それVBA…とExcelを使っていると飛び交う「マクロ」と「VBA」という言葉。
社内のオジサンにExcelを教えているとよく「何が違うんだ?」と聞かれるのですが
(本質的に)何も違わないです。
そう答えると、頭の上に「?」が50個くらい浮かんで見えるんですが違わないものは違わないので仕方がない。
あくまで「本質的に」違わないということなので、簡単にまとめてみようと思います。
ではどうぞ。
目次
◆「マクロの記録」はどうやって記録されている?
珍しくいきなり本題に入ります。
言葉で説明するより例を用いた方が分かりやすいと思うのでまずExcelを開いてテキトーに「マクロの記録」を行ってみて下さい。
例では「「マクロとVBAの関係」という文字列をB10に入力する」というシンプルなものです。
ではこの「マクロの記録」の中身ってどうなっているのか。
言い換えると、Excelはどうやって記録しているのか。
その答えがVBAです。
◆マクロの中身を見てみよう
これも言葉で説明するより見た方が分かりやすいので先程の「「マクロとVBAの関係」という文字列をB10に入力する」というマクロの中身を見てみましょう。
中身の見方は2つ。
1.開発タブの中にある「Visual Basic」をクリック
もしくは
2.Alt + F11 (1のショートカットキー)
そこで開いたのがVBEというもので、要はVBAを記述するものです。
VBEに書かれているものがVBAです。
◆マクロの記録はVBAというプログラミングを行っている
マクロの記録はVBAというプログラミング言語に変換されてExcelに変換されているということです。
「「マクロとVBAの関係」という文字列をB10に入力する」という記録は
Sub マクロとVBAの関係()
'
' マクロとVBAの関係 Macro
'
'
Range("B10").Select
ActiveCell.FormulaR1C1 = "マクロとVBAの関係"
Range("B11").Select
End Sub
という形に変換されているということです。
書き方は分からなくてもマクロの記録を行った本人であれば小学生の英語力程度でも何が書かれているのか分かるかと思います。
Range("B10").Select → 「B10を選択して」
ActiveCell.FormulaR = "マクロとVBAの関係" → 「アクティブセルにマクロとVBAの関係と入力」
◆まとめ
マクロとVBAは「根本的に」同じということが何となく伝わると幸いです。
マクロの記録はマウスやキーボードを使って間接的にVBAというプログラミングを行い、VBAは直接プログラミング言語を書いて編集する。つまり中身は同じということですね。
ならVBA勉強しなくてもマクロの記録で良いじゃん!
そんな声も聞こえてきそうですが、マクロの記録では対応できないこともあるのです。残念ながら。
1から作っていくのは面倒なので「マクロの記録」でベースを作りVBAで直していく…ということはよくある話です。
【Excel】マクロの組み合わせでラクに記録しよう
「マクロの記録」の方法はとても単純なものだと分かりました。
oyajinokakurega.hatenablog.com
ただ、1つのセルを消すだけのマクロなんて誰が使うんだよ…と。
実際にマクロの記録を行う際はもっと手順が長いものが大半だと思います。
そりゃそうだ。
なので今回は16ステップくらい必要な作業を「マクロの記録」を行います。
というか長いステップの際は「マクロを組み合わせる」と便利なのでそのご紹介です。
ではどうぞ。
目次
◆手順を書き出してみる
ランチャートや立派なフローでなくテキトーな箇条書きでも何でも良いのですが、とりあえず記録させる手順を確認しましょう。
今回この記事では次の表を使います。
東京/名古屋/大阪/博多という都市の情報がグチャグチャに並んでます。
これを「都市ごとの一覧を別シートで作成する」という作業内容にします。
手順というかやりたい事を以下のようにザックリと書き出します。
<手順>
1.フィルターで都市別に絞り込む
↓
2.絞り込んだ対象を範囲選択
↓
3.範囲選択したセルをコピー
↓
4.対象のシートへ貼り付け
という作業を都市別に4回行う計16ステップでございます。
実に面倒ですね。
これらの作業をマクロで秒で片付けられるようにしてやろうという算段でございます。
僕はステップが多いと途中で自分が何をやってるのか分からなくなったりするので(こういう時に限って電話がかかってきたり話しかけられたりするのは何ででしょうね)書き出しておくと迷子にならずに済みます。
◆マクロの記録を分割しよう
今回は別のシートへ貼り付けを行うのでマクロの記録を開始する前にシートを用意します。多分いきなり記録を開始してたら途中でコピペ先のシートを用意していなかったことに気付き早々にやり直す羽目になっていたことでしょうよ。
ということで都市名を付けたシートを用意しました。
あらかじめフィルターも準備しておくと良いかと思います。
準備もできたところで「東京」「名古屋」「大阪」「博多」ごとに抽出する「マクロの記録」を手順通り行います。
そして出来たのが各都市を抽出するマクロさん達。やぁ、よろしく。
せっかくなので各都市ごとのマクロの記録が完了したのでついでにボタンを作って割り当ててあげちゃいましょう。
(ボタンのサイズが不揃いなのは気にしないことにします)
これで「東京」のボタンを押せば「東京」のシートに東京のみが貼り付けられ、「名古屋」のボタンを押せば「名古屋」のシートに…以下略
作成したマクロは念の為、1つ1つがきちんと動作するか確認しておきましょう。
画像は「東京」のボタンを押した後の「東京」シートです。
上手く動作してますね。この確認を怠るとあとで組み合わせた際に動かなかったりしたら原因を探す羽目になります。
◆マクロを組み合わせる
いよいよ本題のマクロの組み合わせです。長い前置きで申し訳ないです。
組み合わせと言ってもやることはとても単純で、
1.マクロの記録
↓
2.記録した都市ごとのマクロを実行
(※ボタンからではなく「マクロ」を押下して実行してください)
(画像は作業後のものなので「全都市」というマクロを作ってしまっています)
↓
3.マクロの記録終了
これで4都市まとめて別シートへ貼り付けを行うマクロが出来上がりました。
ついでにボタンを作ってあげましょう。
都市ごとのボタンを押せば該当都市が、新たに作った「全都市ボタン」を押せば全都市がそれぞれのシートに一覧として抽出されます。
◆おまけ
マクロの記録の際に、間違えた手順で進めるともれなく間違った手順も記録されてしまうのですが戻るボタンで作業を戻せば無かったことに出来ます。
なので手順を間違えても1からやり直さなければいけないということはないのでご安心を。
◆まとめ
マクロの記録を既に作ったマクロで行うことが出来るということをなんとなく理解していただけたでしょうか。
例では「全都市」を対象として作成しましたが「関東」「中部」「関西」とマクロを作りたいと思ったときに一から作成しなくても記録してあるマクロをポチポチすれば簡単に新しいマクロが作れてしまうのです。
そして動作確認も行っているので一から作った際にどこかで作業を間違えた…というリスクもありません。
個別に作るメリットもあり、バラバラに作っておけば整備がラクなのです。
例えば元となるデータのフォーマットが変わって手直しが必要な場合、一部分のみ修正すれば良いだけなのに1つのマクロで作っているとなので差替えが出来ない…
バラバラに作っていれば該当するマクロだけ修正すればOK!なんてこともあったりなかったり。
(今回の例題でフォーマットが変わったら全部作り直さなきゃいけないのは触れないでそっとしておいて下さい)
「抽出」「コピー」「算出」「印刷」みたいな感じで作業項目ごとに作ると分かり易くて良いかもしれませんね。
グダグダ書いていますが要は
正直マクロを作成するのも面倒なので、作成する際にもラクを出来るところはラクをしていきましょう!
というお話でした。
今回の例では範囲選択を絞り込んだジャストサイズでコピーしているのですが、使い回すことを考慮すれば(今後もデータが増え続けるのであれば)、行を500でも1000でも遥か彼方下まで範囲を広げておけば超えるデータ量でない限り使い続けられるんじゃないかと思います。
さらに今回は各都市の一覧を作るところまでの作業となっていますが、各シートのコピーを組み込んでおけばボタン1つでそれぞれの一覧をシート別に作成し更にコピーまでしてくれる…
それにしてもExcelさんは便利ですねぇ。
【Excel】VBAが出来なくても出来る「マクロの記録」
こちらの記事で「マクロの記録」について少し触れ、自動化してラクしましょう!と書きましたが今回はそんな「マクロの記録」のやり方について書きたいと思います。
oyajinokakurega.hatenablog.com
それではいってみよう。
目次
◆作業手順を確認する
行き当たりばったりの出たとこ勝負でも良いのですが、「マクロの記録」では間違った手順もしっかりと記録してしまうので何をどう記録するのかを完結に明確にしておくと良いと思います。
今回はやり方の確認なので作業のステップは次の短く分かりやすいものにしようかと思います。
表は神奈川在住なので適当に市名を入れました。
手順の確認なので何でも良いです。
<手順>
1.表の「平塚市」を選択する
↓
2.選択した「平塚市」を削除する(Delete)
◆マクロの記録を開始する
「開発」タブ内にある「マクロの記録」を押下します。
※「開発」タブが表示されていない場合は下記の記事で書いているのでお手数ですが参照してください。
oyajinokakurega.hatenablog.com
するとポップアップが出てくるのでマクロの名前を付けてあげましょう。
動作する内容にしておくと後々分かりやすくて良いかと思います。
今回は「平塚市削除」としました。デスノートみたいですね。神になった気分です。平塚市に何の恨みもありませんのであしからず。
記録を開始したら「平塚市(A10)」のセルを選択し(手順1)、Deleteで削除して(手順2)、マクロの記録を終了します。
(記録の終了は「マクロの記録」を押下し、名前を付け終わったあと「記録終了」に切り替わっています。)
これにてマクロの記録は完了です。
◆記録したマクロを実行してみる
実行は開発タブの「マクロ」を押下してください。
するとポップアップが出てきて先程記録したマクロ名があると思います(平塚市削除)。
それを選択し「実行」ボタンを押下するとA10にある「平塚市」が削除されます。
◆ボタンを設置してみる
「マクロ」→「マクロ選択」→「実行」をいう手順すら面倒な場合はボタンを作ってしまいましょう。
「開発」タブにて「挿入」を選択すると画像のような感じで色々出てきます。
その中でフォームコントロールのボタン(左上)を選択します。
(マウスのカーソルを合わせてしばらくすると「ボタン」と表示されます)
図形を挿入する時と同じ要領でボタンを挿入し、すると「マクロの登録」というポップアップが出ます。
そこで先程作成したマクロ名(平塚市削除)を選択しOKボタンを押下します。
これでボタンに記録したマクロを割り当てられたので、ボタンを押せば一発で削除してくれます。
ただ「ボタン1」では見栄えも微妙なので、ボタンを右クリックし「テキスト編集」で名前を付けちゃいましょう。
◆Excelの保存を忘れずに
せっかく作成したマクロの記録も保存しなければ消えてしまいます。
そして設定を変えていないと次のエラーメッセージが飛び出すかと思います。
ここで「はい」を押してしまうとマクロなしになってしまうので気を付けて下さい。
保存する場合はファイルの種類を「マクロ有効ブック」を選択して下さい。
拡張子について軽く以下の記事で触れていますのでご参考までに。
◆まとめ
今回はやり方の説明のため「セルを削除する」という簡単な作業を記録しました。
2ステップで終わる作業ですが、これが10ステップ、20ステップを踏んで行う作業だったらどうでしょうか?
それも定期的に、あるいは毎日行う作業だったら?
マクロを記録しておけばあとは実行するだけで処理が終わるのでこれまで1時間2時間とかかっていた作業が秒で片付きます。
空いた時間で内職でもして下さい。
【VBA】VBAを始める前にVBEの設定をする
前回はExcelの設定を変えましたが今回はVBEの設定を変えます。
oyajinokakurega.hatenablog.com
何事にも準備は必要なのです。面倒だけど仕方ないのです。
目次
◆VBEってなんぞや(+起動の仕方)
そもそもVBAの話のはずなのにVBEとか言っちゃってるし何なのよと。
ミスタイプなんじゃねぇの?とか思われちゃってるかもしれないですよね。
何なら僕自身も最初そう思いましたから。
で、順を追って話していくと
VBA
Visual Basic for Applicationsの略でExcelさんに「こういう処理をして!」ってお願いする為の言語。略なのに「f」はどこいったとか思わない。
VBE
Visual Basic Editorの略でVBAを書く為のツール。
起動方法
ということでVBAを書く為にVBEの設定をしてあげなきゃね!という話なのです。
そんなVBEの起動方法はとっても簡単で
Alt + F11
以上。
◆設定開始
1.「ツール」→「オプション」
↓
2.「オプション」が「編集」タブの「自動構文チェック」を外し(多分設定していなければチェックが入ってる)、代わりに「変数の宣言を強制する」にチェックを入れる。
これでOK。毎回やる必要はないのでご安心を。
◆まとめ
今回はVBEの設定をやっただけですが、これ開いているだけで何だかデキる人っぽく見えますよね。
初めてVBEを見た時は初めてコマンドプロンプトを見た時の衝撃に似ていたような気がします。
黒い画面の中にアルファベットを打ち込んでいくのは意味分かんないけど何かスゴイことやってんだろうな…的な。
以前駆け出しのSEだった頃「デキるように見せるのも仕事だ」と教わったこともあるのでドヤ顔で設定しましょう。