【VBA入門】文字列の結合を高速にする方法(Mid、Join)

こんにちは!フリーランスの長野です。

文字列の結合って使っていますか?「&」記号を使って結合するのが一般的ですが、文字列の数が多くなると処理に時間がかかります。

そこで高速に処理するために、MidステートメントやJoin関数を使う方法があります。

この記事では、文字列の結合について

  • &で結合する方法
  • +で結合する方法
  • Midで結合する方法
  • Joinで結合する方法
  • 文字列結合の高速化

など基本的な内容から、応用的な内容についても解説していきます。

今回は文字列の結合について、使い方をわかりやすく解説します!

&で結合する方法

文字列を結合する方法として、「&」記号を使うのが一般的です。

他にも「+」記号を使っても連結することができますが、四則演算の和算と混同する場合があるので、「&」を使う方が一般的です。

サンプルコードで確認しましょう。

実行結果:
Conect01

このサンプルコードのように、「&」記号を使って改行コード(vbCrLf)やカンマ(“,”)、半角スペース(” “)と結合することも可能です。

+で結合する方法

文字列の結合にはお伝えした「&」記号を使うのが一般的ですが、「+」記号を使って結合することもできます。

実行結果:
Conect01

ただし、四則演算の和算と混同する場合があるのであまり使われません。

Midで結合する方法

文字列を結合する場合、一般的には「&」記号を使いますが、結合する文字列の量が多くなると処理が遅くなります。

それに対して、Midステートメントを使って結合すると高速に処理することができます。似たような呼び名でMid関数がありますが、これとは構文が異なります。

Midステートメントは別の文字列の文字に置き換える場合に使用します。

Midステートメントは以下のように記述します。

「[ ]」内の記述は省略することができます。

引数stringvarは変更する文字列変数名を指定します。

引数startは置換を開始する文字位置を指定します。

引数lengthは置換する文字数を指定します。

stringは置き換える文字列を指定します。

Midステートメントで結合する方法について、まずは簡単な例で確認しましょう。

実行結果:
Conect02

このサンプルコードでは、まずString関数を使って”,”が10個並んだ文字列msgを用意しています。ちなみに、String関数の第1引数には並べる文字数を、第2引数には並べる文字を指定します。

文字列msgをMidステートメントを使って文字列str1や半角スペース、str2で置換しています。あらかじめString型変数の領域を確保しておくことが、高速に処理するためのポイントになります。

Joinで結合する方法

結合する大量の文字列を配列に格納して、その配列の要素を全て結合することで高速に処理する方法もあります。

配列の要素を結合するには、Join関数を使用します。

Join関数は以下のように記述します。

「[ ]」内の記述は省略することができます。

Join関数は、指定した配列内の要素を全て結合した文字列を返します。

引数sourcearrayには、配列を指定します。

引数delimiterには、結合する要素を区切るための文字を指定します。

こちらも、まずは簡単な例で確認しましょう。

実行結果:
Conect02

このサンプルコードでは、まずString型配列arrに文字列str1、”, “、str3を格納しています。

そのあと、Join関数を使って配列arrの要素を全て結合しています。

文字列結合の高速化

それでは、大量の文字列を結合する場合の処理時間を実際に計測して比較してみましょう。

結合する方法はこれまでご紹介してきた

  • 「&」記号を使う方法
  • Midステートメントを使う方法
  • Join関数を使う方法


の3つの方法です。

文字列”ABCDE”を10万回結合した時間で比較します。

時間の取得にはWindows APIのGetTickCountを使用します。

以下のサンプルコードで比較します。

実行結果:
Conect03

このサンプルコードで確認した結果はこのようになりました。

実行環境により結果は変わってきますが、「&」記号で結合する場合はかなり遅くなっています。「&」記号で結合する場合の処理時間は、Midステートメントを使った処理に比べて約1万倍遅くなっています。

大量の文字列を結合する場合は、MidステートメントかJoin関数を使うようにしましょう!

文字列操作の総まとめ

文字列の結合のほかにも置換や分割などの文字列の操作については、こちらのサイトで詳しく解説しています。

ぜひ参考にしてください。

【VBA入門】文字列操作総まとめ(置換、結合、分割、変換、比較)
更新日 : 2019年4月24日

まとめ

ここでは、文字列の結合について「&」記号、Midステートメント、Join関数それぞれの使い方について説明しました。

「&」記号で結合するのが一般的ですが、大量の文字列を結合する場合は処理が遅くなるので、MidステートメントもしくはJoin関数を使うようにしましょう!

使いこなすことができるように、この記事を何度も参考にして下さいね!

Excel VBAを最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta2_vba2

LINEで送る
Pocket

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説