表計算ソフトの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を利用したワークシート名の取得を紹介しましたが、あらかじめ配列を用意し、④の段階で配列に代入していく事もできます。(こちらの方が実用的かな?)
次回以降もサンプルコードを交えて紹介をしていきます。
話題をチェック!
デジタル時代に大切なアナログ
いまや世界中がすっかりデジタルの世界。パソコンはもちろん電話から家電からIoTの表すとおり デジタルにかかわりのない存在は皆無と言ってもいいかもしれません。 昨今は「10年後にAI(人口知能)に仕事を奪われる」「10年後 …続きを読む
ビジネスの場で心地よく会話のキャッチボールするための1つコツ
気持ちよく会話が出来る人は、周りにひとが集まってきますね。それは、必ずしもアナウンサーのように発音や滑舌がよいからではないし、タレントのように面白い話題が豊富だからというものでもありません。 なぜでしょうか。 基本的には …続きを読む
SNSの危険性を忘れていませんか?
パソコンは一人一台以上、スマホ等のモバイルデバイスの普及によって、日常的にインターネットの世界とふれる時代となりました。それに伴って、年代や社会的地位を問わずSNS(ソーシャル・ネットワーキング・サービス)が一般的に利用 …続きを読む
初心者の為のCSS:コピペでOK!横並びナビメニュー10選
今回はホームページ・ブログの重要な要素、横並びメニュー10選をご紹介します。 HTMLとCSSをそのまま張り付けて簡単にメニューを作成できますので是非お試しください。 シンプルメニュー CSS nav{ text-ali …続きを読む