web-dev-qa-db-ja.com

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

例えば

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

それらすべてを単一のセル「Iamaboy」にマージしたい
この例では、4つのセルが1つのセルにマージされていますが、多くのセル(100以上)があるため、A1 & A2 & A3 & A4を使用して1つずつ入力することはできません。

76
red23jordan

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
86
aevanko

VBAを使用せずにこれを行う場合は、次を試してください。

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

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

145
Mischinab

CONCATENATEの中では、展開するとTRANSPOSEを使用できます(F9)次に this のように、周囲の{}bracketsを削除します

=CONCATENATE(TRANSPOSE(B2:B19))

になる

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

CONCATENATE(TRANSPOSE(B2:B19))

最後に独自のセパレータを追加する必要がある場合があります。たとえば、列Cを作成し、その列を転置します。

=B1&" "
=B2&" "
=B3&" "
39
KCD

簡単な場合、関数を作成したり、コードを複数のセルにコピーしたりする必要のないnextメソッドを使用できます。

  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を押すことができます(通常はスプレッドシートの上にあります)

24
y.selivonchyk

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-Shift-Enter)。

enter image description here


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

水平範囲の場合、二重のTRANSPOSEを実行する必要があります。

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

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

enter image description here

TRANSPOSEのこの使用法は、Excelで2D配列を1D配列に変換するよく知られた方法ですが、ひどく見えます。よりエレガントな解決策は、JoinXL VBA関数でこれを隠すことです。

Excel 2016(そして次のバージョンだと思います)を持っている人のために、 CONCAT 関数が直接あります。 CONCATENATE 関数を置き換えます。

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

=CONCAT(A1:A4)

生産する:

イアマボーイ

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

9
gvo

Mac上のExcel 2011では異なります。私は3つのステップのプロセスとしてそれをしました。

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

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

3
Chris Riley

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

常に=CONCATENATE("'",B2,"'",",")と入力し、それを選択して下にドラッグすると、=CONCATENATE("'",B3,"'",",")=CONCATENATE("'",B4,"'",",")などが作成されます。その後、その列全体を強調表示し、プレーンテキストエディターに貼り付け、必要に応じて貼り付けて、行の区切りを削除します。これは機能しますが、これも一度限りの処理として、これを常に必要としている人にとっては良い解決策ではありません。

2