【Excel VBA】Excel方眼紙の複数セルから文字列を連結して取得する2つの方法

官公庁の申請書などで見られる、1マスに1文字ずつ入力する「Excel方眼紙」のようなレイアウトでは、データが複数のセルに分割されてしまいます。これをVBAで扱うには、まずバラバラのセル値を一つに連結する処理が必要です。

この記事では、複数のセルにまたがって入力された値を、一つのデータとして取得するための2つの代表的なアプローチを、それぞれの長所・短所と共に解説します。


目次

方法1:WorksheetFunction.Concat を使う方法(推奨)

Excel 2019やMicrosoft 365で利用可能な、最新のCONCAT関数をVBAから呼び出す方法です。コードが非常にシンプルで、処理も高速です。

コードと解説

Sub ConcatenateValuesWithConcat()

    ' 変数を宣言します
    Dim dataRange As Range
    Dim combinedNumber As Long
    
    ' 連結したいセル範囲を設定
    Set dataRange = ThisWorkbook.Worksheets("Sheet1").Range("D5:K5")
    
    ' WorksheetFunction.Concatで指定範囲の全セルの値を一気に連結し、
    ' CLng関数で数値型に変換します。
    combinedNumber = CLng(WorksheetFunction.Concat(dataRange))
    
    ' 結果を表示
    MsgBox "CONCAT関数で連結した数値: " & combinedNumber

End Sub
  • WorksheetFunction.Concat(dataRange): 指定したセル範囲(dataRange)内の値を、左から右へ順番にすべて連結した一つの文字列を返します。
  • CLng(...): Concatが返した文字列(例: "12345678")を、VBAで計算などに使える長整数型(Long)の数値に変換します。

この方法は、コードが1行で完結し、非常に高速なため、CONCAT関数が使える環境であれば最も推奨されるアプローチです。


方法2:ループ処理で1セルずつ連結する方法

For Eachループを使い、範囲内のセルを一つずつ巡回して、その値を文字列変数に足していく、古典的で分かりやすい方法です。古いバージョンのExcelでも動作します。

コードと解説

Sub ConcatenateValuesWithLoop()

    ' 変数を宣言します
    Dim dataRange As Range
    Dim cell As Range
    Dim combinedString As String
    
    ' 連結したいセル範囲を設定
    Set dataRange = ThisWorkbook.Worksheets("Sheet1").Range("D5:K5")
    
    ' ループを開始する前に、結合用の変数を初期化
    combinedString = ""
    
    ' For Eachループで範囲内の各セルを巡回
    For Each cell In dataRange
        ' 連結用の変数に、セルの値を「&」で繋げていく
        combinedString = combinedString & cell.Value
    Next cell
    
    ' 結果を表示
    MsgBox "ループ処理で連結した数値: " & CLng(combinedString)

End Sub

ループ処理の中で、文字列連結演算子&を使い、combinedString変数にセルの値を次々と繋げていきます。

この方法は処理の流れが直感的で理解しやすいですが、セルの数が増えるとConcat関数に比べて処理速度が若干遅くなる傾向があります。


まとめ

Excel方眼紙の複数セルから値を一つにまとめるには、2つの方法があります。

方法長所短所Excelバージョン
WorksheetFunction.Concat高速でコードが簡潔特になし。2019 / 365
ループ処理直感的で分かりやすい。やや遅く、コードが長くなる。すべてのバージョン

結論として、お使いのExcelが2019以降であれば、迷わずWorksheetFunction.Concatを使いましょう。

どちらの方法でも、最終的に得られる結果は同じです。ご自身の開発環境や、コードの分かりやすさの好みに応じて、最適な方法を選択してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次