t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA vbNewLineを沢山書く変わりに、SplitとJoinでスマートに改行しよう…と思ったけどよく考えてみたらReplaceで良かった。

さっき投稿したところであるが、冷静に考えてみたら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君。

以上

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。