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)
」に置き換わってしまっておるではないか……。
おわりに
謎は深まるばかりである……。