「初心者向け EXCEL VBA (3/10) – EXCEL VBAのFor Nextループをマスターする」の解説

この記事は約10分で読めます。
スポンサーリンク

さて、このところ更新を怠っていたワレコのサイトであるが、熱烈な読者の方からEXCEL VBAプログラミング記事に関して質問を頂いた。

この記事だ。

【入門編】 初心者向け EXCEL VBA (3/10) – EXCEL VBAのFor Nextループをマスターする
現在のところ、以下の7つのEXCEL VBA講座がある。第一回目【入門編】 初心者向け EXCEL VBA (1/10) – 今年こそ使えるようになりたい人第二回目【入門編】 初心者向け EXCEL VBA (2/10) –実際にVBAを開

その質問内容は以下の通り。

康村 より:
2018年12月22日 11:11 AM(編集)
こんにちは。今会社内でPC言語に強くならないといけなくなった一社員です。

色々見てるうちにこちらのサイトにたどり着き、内容を見ながら自分でもやってみていたのですが躓いておりますのでご教示いただければ大変うれしゅうございます。

1.1のところで全く式は同じだと思うのですが、マクロを実行すると「オブジェクトはこのプロパティまたはメソッドをサポートしていません。」と出ます。

解決策はお分かりになりますでしょうか。
ちなみにPCは今月購入したばかりのWin10の64bit、H&B2016です。
関係ないかもしれませんが念のためお知らせしておきます。

太字で示したエラーが出るらしい。

う~ん、原因が分からん。

どこでこのエラーが出ているのか、それも不明だ。

早速調査してみた。

スポンサーリンク
ワテ推薦のプログラミングスクールで学ぶ
スポンサーリンク
スポンサーリンク

「EXCEL VBAのFor Nextループをマスターする」の解説

まずは、上で示した「初心者向け EXCEL VBA (3/10) – EXCEL VBAのFor Nextループをマスターする」と言う記事の「1.1のところ」手順を詳細に解説してみる。

ワテのEXCEL環境

ワテの場合は、EXCELの実行環境は

  • Windows10 (64)
  • EXCEL 2013 (32)  Office 2013 Professionalに入っているやつ

だ。

VBAの実行に関してはEXCELの32bit版でも64bit版でも、普通にVBAを実行する場合はどちらのバージョンを使っても良いだろう。

64bit版のメリットは、32bit版に比べて大量のメモリを扱えるので大量のデータを処理したい場合などにメリットがある。

ただし、64bit版は以下の制限事項があるので、その場合は32bit版を使う必要がある。

  • 代替の 64 ビット版のない 32 ビット COM アドインの場合
  • 代替の 64 ビット版のない 32 ビット版のコントロールを使用している場合。
  • まれなケースですが、Declare で動作しない 64 ビット API があります。

引用元 https://support.office.com/ja-jp/article/64-ビット版または-32-ビット版の-office-を選択する-2dee7807-8f95-4d0c-b5fe-6c6f49b8d261

従って、ワテがEXCEL2013(Office2013)をインストールした2013年頃は、特に理由が無ければ32bit版のインストールが推奨されていた。

2018年現在も多分似た様な状況だとは思うが、Office2019辺りが出れば、いよいよ64bit版を使ってみるかなあと思っている。

さて、本題に戻って、康村さんのお問い合わせに対する解説を始めたい。

まずEXCELを起動する

図 EXCEL 2013の起動直後の画面

開発タブをクリックしてVisual Basic Editorを開く

下図のように[開発]タブをクリックして、Visual Basic Editorを開く。

もし[開発]タブが見付からない場合には、

ファイル

 オプション

  リボンのユーザー設定

で、リボンに[開発]を追加すれば良い。

図 Visual Basic Editorアイコンをクリックする前

上図でVisual Basic Editorアイコンをクリックすると下図が出る。

標準モジュールを追加する

下図のようにVisual Basic Editorが開くので、「標準モジュール」を追加する。

図 標準モジュールを追加する方法

標準モジュールを追加するには、上図のように、

Microsoft Excel Objects

の上で右クリックして、

挿入

 標準モジュール

を選択すれば良い。

無事に標準モジュールが追加されると、下図のようになる。

図 標準モジュールを追加した直後の画面

 

VBAのソースコードをコピーペーストで貼り付ける

この記事の第1.1章、

【入門編】 初心者向け EXCEL VBA (3/10) – EXCEL VBAのFor Nextループをマスターする
現在のところ、以下の7つのEXCEL VBA講座がある。第一回目【入門編】 初心者向け EXCEL VBA (1/10) – 今年こそ使えるようになりたい人第二回目【入門編】 初心者向け EXCEL VBA (2/10) –実際にVBAを開

にある以下のVBAソースコードをコピーする。

図 二次元領域をループするサンプルVBAコード

そのVBAコードを、下図に示すように貼り付ける。

図 VBAコードを貼り付けた直後の状態

念のためにそのVBAコードを以下に示す。

Sub test1_二次元領域をループする()
 Dim r As Long           ' 行(row)ループカウンター
 Dim c As Long           ' 列(col)ループカウンター
 Const rsta As Long = 5  ' 行(row)開始番号
 Const csta As Long = 5  ' 列(col)開始番号
 Const rend As Long = 25 ' 行(row)終了番号
 Const cend As Long = 15 ' 列(col)終了番号

 For r = rsta To rend
 For c = csta To cend
  ActiveSheet.Cells(r, c) = "R" + CStr(r) + ":C" + CStr(c) ' 文字列連結は + か &
 'ActiveSheet.Cells(r, c) = "R" & CStr(r) & ":C" & CStr(c) ' なのでこれでも良い
 'ActiveSheet.Cells(r, c).FormulaR1C1 = "=RC[-2]+RC[-1]" '計算式も入れられる
 Next c
 Next r
End Sub

このVBAコードは、https://www.wareko.jp/blog/post-17279 の第1.1章のコードと同じだ。

 

VBAコード早速実行してみる。

VBAコードを実行する

まず、下図の赤い四角で示すように、今貼り付けたVBAコードのどこでも良いので、Sub関数の中のどこかをマウスでクリックしてカーソルが点滅している状態にしておく。

図 マウスカーソルをsubの中に置いて、実行▶をクリックした直後の状態

上図のようにマウスカーソルをsubの中に置いて、実行▶をクリックすると、Sub関数

test1_二次元領域をループする()

が実行される。

その結果、EXCELのアクティブシートにこんなデータが書き込まれれば成功だ。

R5:C5 R5:C6 R5:C7 R5:C8 R5:C9 R5:C10 R5:C11 R5:C12 R5:C13 R5:C14 R5:C15
R6:C5 R6:C6 R6:C7 R6:C8 R6:C9 R6:C10 R6:C11 R6:C12 R6:C13 R6:C14 R6:C15
R7:C5 R7:C6 R7:C7 R7:C8 R7:C9 R7:C10 R7:C11 R7:C12 R7:C13 R7:C14 R7:C15
R8:C5 R8:C6 R8:C7 R8:C8 R8:C9 R8:C10 R8:C11 R8:C12 R8:C13 R8:C14 R8:C15
R9:C5 R9:C6 R9:C7 R9:C8 R9:C9 R9:C10 R9:C11 R9:C12 R9:C13 R9:C14 R9:C15
R10:C5 R10:C6 R10:C7 R10:C8 R10:C9 R10:C10 R10:C11 R10:C12 R10:C13 R10:C14 R10:C15
R11:C5 R11:C6 R11:C7 R11:C8 R11:C9 R11:C10 R11:C11 R11:C12 R11:C13 R11:C14 R11:C15
R12:C5 R12:C6 R12:C7 R12:C8 R12:C9 R12:C10 R12:C11 R12:C12 R12:C13 R12:C14 R12:C15
R13:C5 R13:C6 R13:C7 R13:C8 R13:C9 R13:C10 R13:C11 R13:C12 R13:C13 R13:C14 R13:C15
R14:C5 R14:C6 R14:C7 R14:C8 R14:C9 R14:C10 R14:C11 R14:C12 R14:C13 R14:C14 R14:C15
R15:C5 R15:C6 R15:C7 R15:C8 R15:C9 R15:C10 R15:C11 R15:C12 R15:C13 R15:C14 R15:C15
R16:C5 R16:C6 R16:C7 R16:C8 R16:C9 R16:C10 R16:C11 R16:C12 R16:C13 R16:C14 R16:C15
R17:C5 R17:C6 R17:C7 R17:C8 R17:C9 R17:C10 R17:C11 R17:C12 R17:C13 R17:C14 R17:C15
R18:C5 R18:C6 R18:C7 R18:C8 R18:C9 R18:C10 R18:C11 R18:C12 R18:C13 R18:C14 R18:C15
R19:C5 R19:C6 R19:C7 R19:C8 R19:C9 R19:C10 R19:C11 R19:C12 R19:C13 R19:C14 R19:C15
R20:C5 R20:C6 R20:C7 R20:C8 R20:C9 R20:C10 R20:C11 R20:C12 R20:C13 R20:C14 R20:C15
R21:C5 R21:C6 R21:C7 R21:C8 R21:C9 R21:C10 R21:C11 R21:C12 R21:C13 R21:C14 R21:C15
R22:C5 R22:C6 R22:C7 R22:C8 R22:C9 R22:C10 R22:C11 R22:C12 R22:C13 R22:C14 R22:C15
R23:C5 R23:C6 R23:C7 R23:C8 R23:C9 R23:C10 R23:C11 R23:C12 R23:C13 R23:C14 R23:C15
R24:C5 R24:C6 R24:C7 R24:C8 R24:C9 R24:C10 R24:C11 R24:C12 R24:C13 R24:C14 R24:C15
R25:C5 R25:C6 R25:C7 R25:C8 R25:C9 R25:C10 R25:C11 R25:C12 R25:C13 R25:C14 R25:C15

表 VBAコードの実行結果

 

単に、EXCELシート上の長方形領域に文字列データを書き込んだだけの処理である。

まあ、このように行(row)と列(col)の二重のforループを使えば、データを書き込んだり、逆にデータを読み取ったりする事が可能だ。

あとは、読み取ったデータを自分の必要な形式に加工する、

あるいは、加工データの書き出し先を別のシートにする、

などいろいろ工夫すれば、EXCELのデータを自由自在に加工出来るだろう。

まとめ

さて、当記事は、読者の康村さんからお寄せ頂いた質問に対する解説記事として作成した。

康村 より:

1.1のところで全く式は同じだと思うのですが、マクロを実行すると「オブジェクトはこのプロパティまたはメソッドをサポートしていません。」と出ます。

康村さんが報告されている、

「オブジェクトはこのプロパティまたはメソッドをサポートしていません。」

がどの部分で出たのかが不明であるが、少なくともこの解説記事の手順で実行して頂ければ、問題無く実行出来ると思うのだが。

この記事を参考に康村さんに再テストして頂いて、その実行結果を待ちたい。

まあ、この記事を機会にワテももう少し頻繁に記事を更新して行きたい。

スポンサーリンク
ワテ推薦のプログラミングスクールで学ぶ
コメント募集

この記事に関して何か質問とか補足など有りましたら、このページ下部にあるコメント欄からお知らせ下さい。

VBA
スポンサーリンク
warekoをフォローする
スポンサーリンク
われこ われこ

コメント