「word vba 配列に読み込む」
という検索キーワードを元にした、本文中の文字列を段落ごとに配列変数に格納するWordマクロをご紹介しました。
Word VBAで、配列変数にデータを格納したいという要望を考えてみると、表内の文字列を2次元配列に格納するというニーズもありそうです。
今回はそんなマクロをご紹介します。
表内の文字列を2次元配列に格納するサンプルマクロ
配列にデータを格納したい表の中にカーソルを置いてから以下のマクロを実行すると、表内の文字列が2次元配列に格納されている様子を確認できます。
On Error GoTo ErrHandl
Dim tbl As Table
Set tbl = Selection.Tables(1)
Dim r_cnt As Long, c_cnt As Long
r_cnt = tbl.Rows.Count
c_cnt = tbl.Columns.Count
Dim arr() As String
ReDim arr(1 To r_cnt, 1 To c_cnt) As String
Dim r As Long, c As Long
For r = 1 To r_cnt
For c = 1 To c_cnt
Dim txt As String
txt = tbl.Cell(r, c).Range.Text
arr(r, c) = Left(txt, Len(txt) - 2)
Next c
Next r
Stop
Exit Sub
ErrHandl:
MsgBox "表内にカーソルを置いてから実行してください。"
Err.Clear
何らかのサンプル文字列を表に入力しておいて、その表にカーソルを置いて上記のマクロを実行してください。
Stop文の箇所でステップ実行モードになりますから、VBE(Visual Basic Editor)のメニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示してみれば、2次元配列arrに表内の文字列が格納されていることが確認できるはずです。
サンプルマクロの解説
カーソルの置かれている表をオブジェクト変数・tblにセットして、
Set tbl = Selection.Tables(1)
その表の、行数・列数を、変数・r_cnt・c_cntにそれぞれ格納しておきます。
r_cnt = tbl.Rows.Count
c_cnt = tbl.Columns.Count
行数・列数から、配列変数arrのサイズを決めて、
ReDim arr(1 To r_cnt, 1 To c_cnt) As String
行のFor~Nextループの中で、列のFor~Nextループを回します。
For r = 1 To r_cnt
For c = 1 To c_cnt
二重のFor~Nextループの中で、個々のセル内文字列を変数txtに一旦格納して、
txt = tbl.Cell(r, c).Range.Text
変数txt内の文字列から、末尾の2文字を削除した文字列を、配列変数arrに格納しています。
arr(r, c) = Left(txt, Len(txt) - 2)
Wordの場合、CellオブジェクトのRangeオブジェクトのTextプロパティで、表内の各セルの文字列を取得できまが、そのままでは、段落記号と、セルの区切り表す制御文字列が含まれているので、末尾の2文字を削除しています。
Wordで表内の文字列を配列に格納するコードをあらためて眺めてみると、Excelの場合とても簡単に2次元配列にデータを格納できるのだなぁ、と感心させられます。
最終更新日時:2021-09-03 17:48
- Newer:逆数の連番・連続した逆数を入力したい
- Older:複数のスライドを選択するPowerPointマクロ
Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » Word VBAで表内の文字列を2次元配列に