Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » Word VBAで表内の文字列を2次元配列に

Word VBAで表内の文字列を2次元配列に

対象:Word2007, Word2010, Word2013

「word vba 配列に読み込む」
という検索キーワードを元にした、本文中の文字列を段落ごとに配列変数に格納するWordマクロをご紹介しました。

Word VBAで、配列変数にデータを格納したいという要望を考えてみると、表内の文字列を2次元配列に格納するというニーズもありそうです。

今回はそんなマクロをご紹介します。

表内の文字列を2次元配列に格納するサンプルマクロ

配列にデータを格納したい表の中にカーソルを置いてから以下のマクロを実行すると、表内の文字列が2次元配列に格納されている様子を確認できます。

Sub 表のデータを配列に格納する()
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

End Sub

何らかのサンプル文字列を表に入力しておいて、その表にカーソルを置いて上記のマクロを実行してください。

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

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » Word VBAで表内の文字列を2次元配列に

「表・テーブル」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.