列の行をExcelの1つのセルにマージする方法は?


81

例えば

A1:I
A2:am
A3:a
A4:boy 

それらすべてを1つのセル「Iamaboy」にマージしたい
この例は、4つのセルが1つのセルにマージされることを示していますが、セルが多数(100を超える)、A1 & A2 & A3 & A4何ができるかを使用して1つずつ入力できません。


それらはすべて4つの垂直グループにありますか?または、列Aのすべてを1つのセルに入れますか?
Alex K.

VBAで受け入れられた回答を前提として、この質問を編集してExcel-VBAタグも含めることはできますか?さらに、このような質問が常に寄せられていますが、ここに回答があるので、それらを重複としてマークしたいと思います。
bonCodigo 2015年

回答:


87

ConcatenateRange VBA関数を紹介します(名前のアドバイスをしてくれたJeanに感謝します!)。セルの範囲(任意の次元、任意の方向など)を取り、それらを1つの文字列にマージします。オプションの3番目のパラメーターとして、区切り文字(スペースやカンマのセレクションなど)を追加できます。

この場合、それを使用するためにこれを書くでしょう:

=ConcatenateRange(A1:A4)

Function ConcatenateRange(ByVal cell_range As range, _
                    Optional ByVal separator As String) As String

Dim newString As String
Dim cell As Variant

For Each cell in cell_range
    If Len(cell) <> 0 Then
        newString = newString & (separator & cell)
    End if
Next

If Len(newString) <> 0 Then
    newString = Right$(newString, (Len(newString) - Len(separator)))
End If

ConcatenateRange = newString

End Function

2
これは不要ですが、機能的には= A1&A2&A3&A4を追加するだけで十分であり、A1& ""&A2& ""&A3& ""&A4を追加すると各セルの値の間にスペースができます。
Michael Eakins 2011年

3
+1しかし私はそれを呼ぶでしょうConcatenateRange!愚かなExcelのCONCATENATE関数は、入力として別々の引数として個々の細胞のリストだけを範囲を受け入れることはありません...
ジャン=フランソワ・コルベット

10
ありがとうジャン!私はあなたの提案を採用しました!マイケル、あなたは要点を見逃しました-何百もの細胞に対してそれをすることは退屈で無意味です。
aevanko 2011年

1
あなたがしなければならないのは、改行文字を渡すCHAR(10)を渡すことによって、「= CoconateRange(A1:A10、CHAR(10))」です。:)
aevanko 2013年

1
素晴らしいもの。Else newString = newString & (separator & Space(1))結果の文字列で固定幅を保持する必要があるため、で変更しました。
サー・クリスパロット2014

149

VBAなしでこれを実行したい場合は、次のことを試すことができます。

  1. セルA1:A999(またはそのようなもの)にデータを入れます
  2. セルB1を「= A1」に設定します
  3. セルB2を「= B1&A2」に設定します
  4. セルB2をB999までコピーします(たとえば、B2をコピーし、セルB3:B99を選択して貼り付けます)

セルB999には、探している連結されたテキスト文字列が含まれます。


2
値をコピーする場合:-最後のセル(B999)をコピー(ctrl + c)し、空のセルをクリックし、[ホーム]タブの[クリップボード]グループの[貼り付け]アイコンで、[値の貼り付け]をクリックします。
カニシカ2013年

9
これは無駄ですが、一種の素晴らしいです!
BH

14
これは、1回限りの仕事(通常はそのような質問です)にとってはまったく無駄では​​ありません。何が起こっているかを確認できるので、これは進むべき道です。さらに、結合操作をさらに簡単に変更できます(セパレーターを追加するなど)。1回限りの仕事の場合、VBAはハンマーを使用してナットを割るようなものです。
PeerBr 2014年

1
これは、大きなデータセットでは機能しません。(メモリ不足)
ダニエル

1
これは天才です。
シーカー

42

内部でCONCATENATE使用することができTRANSPOSE、あなたがそれを(展開するF9)、その後、周囲の削除{}のような金具を、これは推奨しています

=CONCATENATE(TRANSPOSE(B2:B19))

になる

=CONCATENATE("Oh ","combining ", "a " ...)

CONCATENATE(TRANSPOSE(B2:B19))

最後に独自の区切り文字を追加する必要がある場合があります。たとえば、列Cを作成し、その列を転置します。

=B1&" "
=B2&" "
=B3&" "

2
イラスト.GIF空想にUpVote
N_E

24

単純なケースでは、関数を作成したり、コードを複数のセルにコピーしたりする必要のない次のメソッドを使用できます。

  1. 任意のセルに次のコードを記述します

    =Transpose(A1:A9) 
    

ここで、A1:A9は、マージするセルです。

  1. セルプレスを離れることなく F9

その後、セルには次の文字列が含まれます。

={A1,A2,A3,A4,A5,A6,A7,A8,A9}

出典:http//www.get-digital-help.com/2011/02/09/concatenate-a-cell-range-without-vba-in-excel/

更新:一部があいまいになる可能性があります。セルを離れないということは、セルをエディターモードにすることを意味します。または、セルエディタパネルでF9キーを押すこともできます(通常はスプレッドシートの上にあります)。


これが何であれ、これは素晴らしいアイデアでしたが、私にはうまくいきませんでした。私のテキストには多くの特殊文字が含まれていたため、それらを適切な出力に結合しなかったと思います。手動でa1&b1&c1&......と入力することになりました
Chris Marisic 2013年

1
クリス、このソリューションの奇妙な部分は、F9を押す前にセルに焦点を合わせ続ける必要があるということです。また、「フォーカスを維持する」とは、エディターカーソルを点滅させ、テキストの入力を続行できることを意味します。
y.selivonchyk 2013

1
F9を押すと、MacバージョンのExcelでは機能しません。
Adam Eberlin 2014

15

VBAの既存のJoin機能を使用します。VBA関数はExcelで公開されていないため、Joinその機能を公開するユーザー定義関数でラップします。最も単純な形式は次のとおりです。

Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    JoinXL = Join(arr, delimiter)
End Function

使用例:

=JoinXL(TRANSPOSE(A1:A4)," ") 

配列数式として入力(使用Ctrl- - )。ShiftEnter

ここに画像の説明を入力してください


現在、JoinXL入力として1次元配列のみを受け入れます。Excelでは、範囲は2次元配列を返します。上記の例でTRANSPOSEは、4×1の2次元配列を4要素の1次元配列に変換します(これは、TRANSPOSE単一列の2次元配列が供給された場合の動作が文書化されています)。

水平範囲の場合、2倍にする必要がありますTRANSPOSE

=JoinXL(TRANSPOSE(TRANSPOSE(A1:D1)))

内側TRANSPOSEは1×4の2次元配列を4×1の2次元配列にTRANSPOSE変換し、外側は予想される4要素の1次元配列に変換します。

ここに画像の説明を入力してください

この使用法TRANSPOSEは、Excelで2D配列を1D配列に変換するよく知られた方法ですが、ひどいように見えます。より洗練された解決策は、これをJoinXLVBA関数で隠すことです。


1
大きなテーブルでは、この関数は@aevankoの関数よりもはるかに高速です。
Ricidleiv Tondatto 2016年

9

Excel 2016をお持ちの方(そして次のバージョンだと思います)には、CONCATENATE関数に代わるCONCAT関数が直接あります。

したがって、Excel2016でそれを行う正しい方法は次のとおりです。

=CONCAT(A1:A4)

生成されます:

イアマボーイ

古いバージョンのExcelのユーザーの場合、他の回答が関連しています。


1
私はWindows用のOffice 2016 PROPLUSがインストールされ、NOはありません持っているCONCAT機能は
oleksa

マイクロソフトは、CONCATはエクセル365と2019で利用可能であると言う:support.microsoft.com/en-us/office/...
レイ・ウッドコック

4

Mac上のExcel2011の場合は異なります。私はそれを3つのステップのプロセスとして行いました。

  1. 列Aに値の列を作成します。
  2. 列Bの最初のセルの右側で、列の値と「、」に対して連結関数を使用するルールを作成します。たとえば、A1が最初の行であるとすると、B1の式は=B1です。行Nの次の行の場合、式は=Concatenate(",",A2)です。最終的に:
QA
、セクリ
、テスト
、Applitools
、ビジュアルテスト
、テスト自動化
、セレン
  1. 列Cで、以前のすべての値を連結する数式を作成します。それは相加的であるため、最後にすべてを取得します。セルC1の数式は=B1です。Nまでの他のすべての行の場合、式は=Concatenate(C1,B2)です。そして、あなたは得る:
QA、Sekuli
QA、Sekuli、テスト
QA、Sekuli、テスト、Applitools
QA、Sekuli、テスト、Applitools、ビジュアルテスト
QA、Sekuli、テスト、アプリケーションツール、ビジュアルテスト、テスト自動化
QA、Sekuli、テスト、Applitools、ビジュアルテスト、テスト自動化、Selenium

リストの最後のセルは、必要なものになります。これは、WindowsまたはMac上のExcelと互換性があります。


1つの数式で3つの値を連結することができます。A列に値があります。B1はA1とB2のコピーで、のような式があり=CONCATENATE(B1;",";A2)ます。そして、あなたはすべての行のセルの右下のドットをドラッグする必要があり、最後の値が結果になります
oleksa

2

このCONCATENATEメソッドを使用して列の値を取得しWHERE IN ()、SQLステートメントの句にすばやく入力するために、列を間に挟んで引用符で囲みます。

私はいつもただ入力=CONCATENATE("'",B2,"'",",")してからということを選択してドラッグ、それを下に、作成する=CONCATENATE("'",B3,"'",",")=CONCATENATE("'",B4,"'",",")などその列全体をハイライトし、プレーンテキストエディタに貼り付け、必要に応じてバックペーストし、これ行の分離をストリッピングコピーします。それは機能しますが、繰り返しになりますが、これは1回限りの取引と同様に、これを常に必要とする人にとっては良い解決策ではありません。


0

これは本当に古い質問だと思いますが、私は同じことをしようとしていて、「TEXTJOIN」と呼ばれるExcelの新しい式に出くわしました。

質問については、次の式が問題を解決します

=TEXTJOIN("",TRUE,(a1:a4))

「TEXTJOIN」の署名は、TEXTJOIN(delimiter、ignore_empty、text1、[text2]、[text3]、...)として説明されています。


MicrosoftはTEXTJOINはエクセル365と2019のために利用可能であると言う:support.microsoft.com/en-us/office/...
レイ・ウッドコック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.