「ハナクソ」の正体が分かった……?
ハナクソの正体が分かった???
「ハナクソ」とは
「ハナクソ」というのは、
Wordの表からExcelのセルに値を転記したときに、テキストの末尾にくっついてくるナゾの物体のこと。
私の職場の環境(Office2010)では、まるでハナクソが末尾にひっついているように見えたことから、私が勝手に「ハナクソ」呼ばわりしていたのだった。
「ハナクソ」の正体を突き止める方法
近々またWordの表からExcelワークシートへの転記が必要になりそうなので、「ハナクソ」対策をどうしようか考えていた。
このときは、Replace関数を使用して「ハナクソ」を除去したのだった。
また、その後、このときは、Left関数を使って右端の「ハナクソ」だけを削る、という方法で「ハナクソ」を除去したのだった。
しかし、いづれにしても、
「ハナクソ」の正体を突き止めることから目を背けた消極的な対応
には違いなく、非常に心が痛むのであった。
そんなとき、ひらめいたのですよ。あばれはっちゃくばりに!
Chr関数使えばよくね?
なーんて。
もうね、おチャクラ全開ですわよ。
で、やってみた。
リスト1-1
Public Sub testWordTable03() Dim wdDoc As WordDocument Set wdDoc = New WordDocument '……(1)' Dim str As String If wdDoc.isReady = True Then str = wdDoc.wordTable(1).Cell(2, 2).Range.Text '……(2)' Call searchBooger(Right(str, 1)) '……(3)' End If Set wdDoc = Nothing End Sub
リスト1-2
Private Sub searchBooger(ByVal booger As String) Dim i As Integer For i = 0 To 255 '……(4)' If Chr(i) = booger Then '……(5)' Debug.Print "ハナクソの文字コードは、" & i & " 番ですがな。" '……(6)' Exit Sub End If Next Debug.Print "ハナクソには文字コードがなかったようだ。(´・ω・`) ショボーン" End Sub
まず(1)の
Set wdDoc = New WordDocument
は、自作のWordDocumentクラスのインスタンスを生成しているだけ。簡単に説明しておくと、インスタンス化するときにアクティブなWord.ApplicationオブジェクトとWord.Documentオブジェクトを取得して、Document上のTableオブジェクトを配列に格納してしまう働きを持ったクラスです。
だから、(2)の
str = wdDoc.wordTable(1).Cell(2, 2).Range.Text
こんな書き方で、
1つ目の表の2行2列目セルのテキスト
が取得できるのだと思ってください。
ちなみに、こうやって取得したテキスト(変数strの中身)の右端には、あの忌まわしい(w)「ハナクソ」がひっついております。
んで、(3)の
Call searchBooger(Right(str, 1))
では、自作メソッドsearchBoogerに引数として「ハナクソ」を渡している。
ちなみに、「Booger」というのは、アメリカ英語で「ハナクソ」のことらしい。案外こういう身近な言葉って英語で言えないよな。
さて、SearchBoogerメソッドの処理だが、まず(1)の
For i = 0 To 255
でForループのカウンタを0~255にしているのは、Chr関数の引数が0~255だから。
(5)の
If Chr(i) = booger Then
では、文字コードで指定した文字が引数としてこのメソッドに渡されたbooger(正体は「ハナクソ」)と一致しているかどうかを判定。一致していたら、(6)の
Debug.Print "ハナクソの文字コードは、" & i & " 番ですがな。"
で文字コード番号をイミディエイト・ウインドウに表示しよう、というわけ。
実行結果
おおっ! つ、ついに「ハナクソ」の正体が白日のもとに……(感涙)。
んで、Chr(7)って何なの……???
コチラのページによると、
こういうことのようなんだが、
で、「警告音を鳴らす」って何なの???
何でこんなもんがWordの表のセル内の文字列にくっついてんの???
と、ナゾがさらに深まっただけなのであった。。。
おわりに
Chr(7)とは何なのか、「BEL」とは何なのか、そして、なぜWordの表のセル内文字列にそんなもんがひっついているのか、誰か知っている人があったら教えろてください。