Wordの表の文字列を取得するFunction
Wordの表の文字列を取得する
「書類の電子化」と言いつつ、
単に紙をWordとかにしただけ
という凶悪な職場はいまだに一定の数存在すると思う。
んで、いろんなところからWordドキュメントが集まってくるわけだが、そんなときに困るのが
バラッバラなファイル名
の問題。
一応、「ファイル名はこんなふうにしてくださいねー」とかお願いをするのだけれど、守るかどうかは先方次第なので、それはもうてんでばらばらのカオス状態w
まあ、それでも、Wordの場合は、Excelと違って
自由勝手に行やら列やらを挿入したり削除したりして好き放題にする
という人が少ないので、Word文書の先頭に記名欄を作っておいて、回収したあと記名欄に入力された文字列をファイル名にしてはどうか、と考えたわけですよ。
最近は、極力一つ一つのプロシージャを小さくしようと心がけているので、手始めに
Wordの表の任意のセルから文字列を引っ張ってくるだけ
のFunctionを作ってみた。
コード
リスト1 標準モジュール
Public Function getStringFromCell( _
ByVal targetTable As Table, _
ByVal targetRow As Integer, _
ByVal targetColumn As Integer) As String '……(1)'
Dim str As String
str = targetTable.Cell(targetRow, targetColumn).Range.Text '……(2)'
str = Left(str, Len(str) - 2) '……(3)'
getStringFromCell = str
End Function
まず(1)の
Public Function getStringFromCell( _
ByVal targetTable As Table, _
ByVal targetRow As Integer, _
ByVal targetColumn As Integer) As String
で引数と返り値の設定。
第1引数で当該のTableオブジェクトを渡す。
んで、第2引数と第3引数で表中の行・列を渡す。
返り値は当然String型。
(2)の
str = targetTable.Cell(targetRow, targetColumn).Range.Text
で引数で指定された表のセルから値を取得して変数 str にぶち込み、
(3)の
str = Left(str, Len(str) - 2)
で取得した文字列の右端2字をカット。
なぜこんなことをするのかは、
コチラをどうぞ。
あとは、 str の中身をreturnして終わり。
実験
ドキュメント上に

こんな表を用意して、次のコードで実験。
リスト2 標準モジュール
Public Sub testGetStringFromCell()
Dim targetTable As Table '……(1)'
Set targetTable = ActiveDocument.Tables(1)
Dim str As String
Dim i As Integer
For i = 2 To targetTable.Rows.Count '……(2)'
str = getStringFromCell(targetTable:=targetTable, _
targetRow:=i, _
targetColumn:=1)
Debug.Print str
Next
End Sub
(1)からの2行
Dim targetTable As Table Set targetTable = ActiveDocument.Tables(1)
では、Table型の変数 targetTable を用意し、アクティブドキュメントの1番目の表をぶち込んでいる。
(2)からの6行(実質4行)
For i = 2 To targetTable.Rows.Count
str = getStringFromCell(targetTable:=targetTable, _
targetRow:=i, _
targetColumn:=1)
Debug.Print str
Next
では、TableオブジェクトのRowsコレクションのCountプロパティを参照して表の行数を取得して、Forループの最終値にしている。
Forブロック内では、リスト1の getStringFromCell を呼び出してセルの文字列を取得し、イミディエイトに出力している。
実行結果

この通り、無事に表の1列目の2~最終行(5行目)が取得できた。
おわりに
最近、処理を細かく切り分けるのが楽しくなってきた。