![見出し画像](https://assets.st-note.com/production/uploads/images/145407336/rectangle_large_type_2_04b770f1720b2744273e6725aaa29d03.png?width=1200)
Excel VBA でセルに格納されている文字列を String 型の変数に格納する際に、改行も一緒に格納されることを知った
こんばんは。
最近は公私ともにプログラミングをやっているわたしですが、どれも初心者みたいなもので、いろいろと調べながらやっています。
先日、Excel Visual Basic for Application (Excel VBA) で、ブックを大量に複製する必要があったので、あらかじめ用意されていた一覧表から、格納されている文字列(文字列は名前です)を引っ張り出してきてファイル名にしてブックを保存するようにプログラムを組みました。そうすれば、簡単にブックを生成できるわけです。そして、生成したブックを自動で編集するようにもしました。
そんなこんなで書き終えコンパイルしていざ実行したところ、途中でファイルが存在しないというエラーが発生しました。同じデータを使用しているので、ファイル名もまったく同じものを探せるはずであるにもかかわらず、そのようなことが起きてしまいました。エラーが起きた段階でいろいろと探しても、変数には間違いなく文字列が格納されているわけです。いろいろなところを探し回った結果、セルに格納された文字列に改行が挟まれていることに気づきました。「もしかして、改行されていたら改行前までの文字列でブック名をつけようとする……?」と予想したわたしは、シートの該当するセルで改行を取り払ってもう一度回しました。そうしましたら、何事もなかったかのように最後まで回り切りました。
このとき、わたしははじめて String 型には改行がそのまま反映されて格納できることを知りました。わたしが Excel で一覧表を作る際は改行なんてまずしないので、改行が存在していること自体が想定外でした。そして、わたしが一番使ってきた FORTRAN ではだいたい CSV からデータを読み込んできていたので、そもそも区切られたデータ内に改行が存在しません。ですから、文字列を読み込んでも改行のことを気にする必要がなかったわけです。
ということで、ここで実験してみましょう。本当に簡単なコードを用意しました。
Sub ReadString()
Dim st As String
st = ActiveSheet.Cells(1, 1).Value
MsgBox st
End Sub
A1 セルには「note (改行) すきまノート」と入れて実行してみましょう。
![](https://assets.st-note.com/img/1719494254376-pJDlsrhuLz.png)
これを実行した際に、メッセージボックスに表示される文字列が改行されていれば String 型の変数は改行のことも一緒に格納してくれるというわけです。実際に実行した結果はこちらです。
![](https://assets.st-note.com/img/1719494298762-0tBj724TPM.png)
これはもう完全に改行されていますね。
ファイル名に改行は使えません。ですから、改行した文字列を使用して
しかし、改行までそのまま格納できるのは便利ですね。ファイル名を生成するには厄介ですが、それ以外の状況では、改行を保持してくれて実行できるので便利がいいです。使い道が思いつきませんが。
今回は一覧表から自分で改行を消し去りましたが、Replace 関数を使って改行を削除することもできます。
st = Replace(ActiveSheet.Cells(1, 1).Value, vbLf, "")
この vbLf というのが改行を表しています。消すのに Replace (置き換える)とはこれは如何にと思われるかもしれませんが、改行記号を削除するというよりも無に置き換えることでなくすイメージです。なんだか哲学みたいですね。
そんなこんなで、それ以降は改行対策をして回すようにしました。今回の一件で、わたしはまたひとつ賢くなりました(自画自賛)。
この記事が気に入ったらサポートをしてみませんか?