さっき投稿したところであるが、冷静に考えてみたらReplace関数で良かった。早とちり。
今回は小技を紹介する。
VBAでは文字列の改行にvbNewLineを使用するが、文字列の外に書かないといけないので改行が増えてくると面倒だ。
まずは普通に書いてみたのがこちら。
Sub 改行が面倒くさい() MsgBox _ "文字列中で改行するには通常vbNewLine等の定数を" & vbNewLine & _ "文字列の外に書く必要がありますが、" & vbNewLine & _ "vbNewLineは結構長いので、正直言って面倒くさいです" & vbNewLine & vbNewLine & _ "C言語みたいに\nで書けたらいいのにと思いませんか。" End Sub
やっぱり面倒くさい。
C言語みたいに\nで書けたら良いのに。
…ということで、過去に一度CのprintfをVBAで模倣する関数を作ったのだが、
thom.hateblo.jp
今回はもっと手軽な方法を思いついたので紹介。
それが、以下のコード。
Sub 切ってつなげて改行() MsgBox Join(Split( _ "そこで、Split関数とJoin関数を利用して、-" & _ "これを簡潔に書いてみました。--" & _ "ハイフンでSplitして、vbNewLineでJoinしています。--" & _ "今回はデリミタにハイフンを用いてますが、-" & _ "その文字列中で使われてない記号や文字ならなんでもOKです。--" & _ "", "-"), vbNewLine) End Sub
文字列中に使われていない記号を改行コードの代わりに用いて、Splitのデリミタとして設定することで配列に切り分ける。
それをJoin関数でvbNewLineで繋いでやると、改行された文字列が手に入るというわけだ。
もしセルに入れる文字列を作りたければ、Join関数でvbLfをデリミタとして呼び出せば良い。
と、書いたはいいけど、普通にReplaceの方が早かった。。
Sub Replaceの方が早かった() MsgBox Replace( _ "SplitとJoinを使った方法、画期的だと思ったんですが、-" & _ "完全に寝ぼけてましたね。--" & _ "どう考えても、Replaceの方が早いです。--", "-", vbNewLine) End Sub
うーん。なかなか活躍の場がないな、Join君。
以上