表計算ソフトのExcelは非常に便利なソフトですね。
数字の計算からグラフ・抽出まで簡単な操作で出来ます。
こんな便利なソフトですが、複雑な計算をさせたり、多くの条件で分けて計算をする際には、さすがに標準の数式では限界があります。
その限界を突破することができるのが、VBA(Visual Basic for Application)です。
平たく言ってしまうとExcelで行うプログラミングです。
そう言ってしまうと構えてしまう方も多いかもしれませんが、実際にやってみるとコツをつかめば心強い機能になります。
このコラムでは、よく使うコードを紹介していきたいと思います。
紹介するコードは下記環境で動作確認をしておりますので、あらかじめご了承ください。
OS:Windows7 および Windows10
Officeバージョン:MicrosoftOffice2013 および 2016
今回紹介するのは前回に続き「ワークシート名の一覧の取得」です。
まずはコード全体を見てみましょう。
‘①変数宣言
Dim Mysheet As Worksheet
Dim NameList, NameStr As String
‘②変数の初期化
NameStr = “”
‘③ワークシート数分だけ繰り返す
For Each Mysheet In Worksheets
‘④初回判定とワークシート名の取得
If NameStr = “” Then
NameStr = Mysheet.Name
Else
NameStr = NameStr & “,” & Mysheet.Name
End If
Next
‘⑤結果情報の整理
NameList = Split(NameStr, “,”)
End Sub
今回は今までより少しさっぱり目となりました。
早速順番に見ていきましょう。
①は変数の宣言です。今回はワークシートのオブジェクト変数と結果保存用の変数が2つです。宣言方法はいつもと変わりません。
②は変数に初期値として空白を代入しています。
この空白データを判定用として、④で利用します。
③では実行しているブックにあるワークシートの数だけ繰り返し、中のコードを実行します。今回はFor Eachの構文を利用しています。構文の構成を詳しく見ていきます。
[statements]
Next
For構文と似ていますが、少しだけ利用方法が変わります。
項目 | 説明 | |
---|---|---|
element | groupから情報を受け取るためのオブジェクト変数を指定します。 例)下記のように宣言された変数 Dim オブジェクト変数名 As Object Dim ワークシートオブジェクト変数 As Worksheet Dim レンジオブジェクト変数 As Range |
|
group | コレクション等のオブジェクトや配列を指定します。 | |
statements | 繰り返し実行されるコードを記述します。 |
プロパティ | 内容 |
---|---|
BackColor | 背景色 |
Bold | 太文字 |
Cells | セル番地 |
Count | オブジェクト数を数える |
Color | 文字色 |
Italic | 斜体にする |
Name | 名前を指定する |
Value | 文字列を入力または取得する |
今回はワークシート名を取得しますので、「Name」を利用します。
1回目は「NameStr」にワークシート名を代入します。
2回目以降は「NameStr」にすでに代入されているデータに「,(カンマ)」を挟んでワークシート名を追加します。
1回以上実行されれば、「NameStr」にはワークシートの名前が入っているはずですので、空白なら1回目、空白でなければ2回目以降という判定ができます。
④のコードはワークシートの数だけ実行されることになり、仮に3つのワークシートがある場合には、「NameStr」には下記のようなデータが入っていることになります。
1つ目のワークシート名, 2つ目のワークシート名, 3つ目のワークシート名
「,(カンマ)」で区切られたワークシート名の羅列ですね。
1つにつながったままでは使いづらい状態ですので、このデータを活用するために、それでは⑤のコードで利用しやすいデータに加工します。
NameList = Split(NameStr, “,”)
ここで「Split」を利用します。
「Split」は指定した文字をキーとして、元の文字を分割し、配列としてデータを返します。
分かりにくいと思いますので、⑤のコードを例に考えてみます。
「NameStr」に「1つ目のワークシート名, 2つ目のワークシート名, 3つ目のワークシート名」が代入されている場合、Splitを実行すると受け側の「NameList」に下記のような配列が返されます。
NameList(0) ・・・ 1つ目のワークシート名
NameList(1) ・・・ 2つ目のワークシート名
NameList(2) ・・・ 3つ目のワークシート名
指定した「,(カンマ)」は削除され、「,(カンマ)」毎に分割されます。
なんとなく理解していただいたところで、先ほどのSplit構文について補足します。
それぞれの項目の説明は以下の通りです。
引数名 | 省略 | 説明 |
---|---|---|
Expression | × | 任意の文字列式を指定します。 空白の文字列 (“”)の場合、空の配列を返します。 |
Delimiter | ○ | 文字列の区切りとする文字を指定します。 省略した場合、スペース (” “) が適用されます。 |
Limit | ○ | 結果として返す配列の要素数(分割数)が設定できます。 (規定値は-1) |
Compare | ○ | 文字列の比較のモードを設定できます。 |
通常利用する時には、分割元の文字列となる「Expression」と区切り文字とする「Delimiter」のみ設定して利用する場合が多いかと思います。
サンプルコードでは触れませんでしたが、ワークシート名を利用する場合には、「NameList」を配列(1次元)として利用すると、情報を取得できます。
今回はSplitを利用したワークシート名の取得を紹介しましたが、あらかじめ配列を用意し、④の段階で配列に代入していく事もできます。(こちらの方が実用的かな?)
次回以降もサンプルコードを交えて紹介をしていきます。
話題をチェック!
Office系の資格取得にチャレンジ~結果報告~
引き続き、資格取得にチャレンジ…今回は、結果報告をしたいと思います。 以前のコラムでも書きました通り、FOM出版からでている「MOS Excel 2016対策テキスト&問題集」を使用して、独学勉強をしました。試験の出題範 …続きを読む
Excel VBA小技コラム – セルの連続移動
表計算ソフトのExcelは非常に便利なソフトですね。数字の計算からグラフ・抽出まで簡単な操作で出来ます。こんな便利なソフトですが、複雑な計算をさせたり、多くの条件で分けて計算をする際には、さすがに標準の数式では限界があり …続きを読む
初心者の為のCSS: 画像の上に文字や画像を重ねる方法 – 後編
前回(初心者の為のCSS: 画像の上に文字や画像を重ねる方法 – 前編)はpositionプロパティは使用することで画像や文字を重ねることが出来るということをご説明しました。 absoluteとrelativ …続きを読む
「真似して」「学ぶ」スタイル
新入社員の皆さまも、もうだいぶ職場になれたころでしょうか?もしかしたら、職場にとけ込むことが、精一杯で、まだまだ自分ひとりでは業務を遂行することが難しいという方の方が多いかもしれません。 正直なところ、新入社員に対して …続きを読む