「ハナクソ」の除去について

昨日の記事で、Wordの表からExcelに転記すると、ハナクソみたいなやつがテキストの末尾についてくると書いた。

で、そのハナクソを除去するのに、Replace関数を使っていた。

このことについて、Twitterの数少ないVBA関係のフォロワーさんから、

Left関数でやった方がよくね?

とのご指摘を受けた。

なるほど。確かにそうだ。やりたいことは「右端の邪魔な文字を消す」ということなのだから、素直に右端の邪魔な文字を削る、というコードにすべきなのだ。昨日の例で言えば、


'str はString型の変数
str = objDoc.Tables(1).Cell(i, 1).Range.Text    '……(1)
str = Left(str, Len(str) - 1)                   '……(2)
Range("B" & tgtRow + i - 2).Value = str         '……(3)

ということ。

言うまでもないことだと思うけど、

  • (1)で変数strに文字列を格納し、
  • (2)で文字列の、「左から文字数-1文字分」を取り出し、
    つまり、右端の1文字(ハナクソ)を除去し、
  • (3)で対象のセルに文字列を書き込む

という処理になっている。

Replaceだと、右端のハナクソだけを除去するとは限らないんですよね。転記しようとする文字列のなかに、「必要なハナクソ」があった場合(まあ、ないと思うけど)にそいつまで巻き添えにしてしまう。

こんなことにも気づかないなんて、(たぶん)初心者のレヴェルを脱して、そこそこややこしいこともできるようになってきたことで慢心していたのかも知れん。

素直なコードを書く、ということの大切さを思い知らされました。

たぶん、「ハナクソ」って、キャリッジリターンを表す特殊文字の文字化けしたやつなんでしょうねえ。



@akashi_keirin