
Wordの表の中の文字列
けったいな現象が起こったので報告。
表の中の文字列
Wordドキュメント上に、次のような表を作成する。

で、次のコードで表の左上端セルの文字列を取り出してみる。
リスト1 標準モジュール
Private Sub test() Dim tbl As Table Set tbl = ActiveDocument.Tables(1) Dim rng As Range Set rng = tbl.Cell(1, 1).Range '……(1)' Debug.Print rng.Text '……(2)' Debug.Print Len(rng.Text) End Sub
(1)の
Set rng = tbl.Cell(1, 1).Range
で、表の中の左上端セルを指し示すRangeオブジェクトを変数rngに突っ込み、(2)からの2行
Debug.Print rng.Text Debug.Print Len(rng.Text)
でそのRangeオブジェクトが持っている文字列を出力するとともに、その文字列の文字数を出力する。
コイツを実行してやると、

となる。
セルの中の文字列は「アホ」と改段落マークなので、文字数は3と思いきや、4である。
イミディエイトの結果を見ても、「アホ」の他に、改段落と何かわけのわからんものが付着しているのが何となく分かる。
ケツに付着している文字は何か
このケツに付着している文字が何なのかを調べる。
今度は、次のコードでやってみる。
リスト2 標準モジュール
Private Sub test08() Dim tbl As Table Set tbl = ActiveDocument.Tables(1) Dim rng As Range Set rng = tbl.Cell(1, 1).Range Debug.Print rng.Text Debug.Print Len(rng.Text) Debug.Print Asc(Right(rng.Text, 1)) '……(3)' End Sub
先のリスト1に(3)の
Debug.Print Asc(Right(rng.Text, 1))
を付け加えただけ。
rng.Textの一番ケツの文字の文字コード番号を出力する。
こいつを実行すると、

こうなる。
ケツにひっついているのは、文字コード「7」のやつ、つまり、Chr(7)なのである。
Chr(7)とは?
コチラのサイトによると、Chr(7)とは、

BELというやつである。
なんじゃそら。〔※〕
とにかく、Wordの表のセル内の文字列のケツには、「ベル文字」というやつがひっついているらしい。
ベル文字を除去するとどうなるか
では、この「ベル文字」とやらを除去するとどうなるのか。
次のコードで実験。
リスト3 標準モジュール
Private Sub test08() Dim tbl As Table Set tbl = ActiveDocument.Tables(1) Dim rng As Range Set rng = tbl.Cell(1, 1).Range rng.Text = Replace(rng.Text, Chr(7), "") '……(4)' End Sub
(4)の
rng.Text = Replace(rng.Text, Chr(7), "")
で、Replace関数を用いて「ベル文字」を除去した文字列をrng.Textにセットしてやるのだ。
ふふふ。「ベル文字」とやら、消え失せい!!!!!!!!

!
わけわからん……。
セル内の文字列はどうなっとるのか
次のコードで調べてみた。
リスト4 標準モジュール
Private Sub test09()
Dim tbl As Table
Set tbl = ActiveDocument.Tables(1)
Dim rng As Range
Set rng = tbl.Cell(1, 1).Range
Dim tmp As String
tmp = rng.Text
Dim i As Long
For i = 1 To Len(tmp)
Debug.Print Asc(Mid(tmp, i, 1))
Next
End Sub
セル内の文字列を1文字づつ切り出して、Asc関数でコード番号を出力してみる。

なんと、Chr(7)をポアしたはずなのに、復活しているどころか「Chr(13) & Chr(7)」に置き換わってしまっておるではないか……。
おわりに
謎は深まるばかりである……。