web-dev-qa-db-ja.com

Excelでのバッチ文字列連結

Excelに数百のセルがあり、連結して1つの文字列にしたいと思います。それらをCONCATENATE(A1, A2, ....)に入力するために手動で1つずつ調べるよりも簡単な方法はありますか?

CONCATENATE(A1:A255)は機能しません。

29
Green Demon

*新しいタブで、セルA1にA1と入力します

*セルA2にタイプA2

*塗りつぶしシリーズを使用して、列Aの値を完成させます

*セルB1にタイプA1

  • セルB2でこのフォーラムを使用する

    = B1& "、"&A2

  • 数式をコピーします。

値をコピーして貼り付け、作成した値の文字列を取得します。

A1  A1
A2  A1,A2
A3  A1,A2,A3
A4  A1,A2,A3,A4
A5  A1,A2,A3,A4,A5
A6  A1,A2,A3,A4,A5,A6
A7  A1,A2,A3,A4,A5,A6,A7
A8  A1,A2,A3,A4,A5,A6,A7,A8
A9  A1,A2,A3,A4,A5,A6,A7,A8,A9
A10 A1,A2,A3,A4,A5,A6,A7,A8,A9,A10
34
James Jenkins

押す Alt-F11、新しいモジュールを挿入し、コードを貼り付けます。

Public Function concatRange(data As Range, Optional sep As String = "") As String
    Dim ret As String
    Dim sep2 As String
    ret = ""
    sep2 = ""

    For Each cell In data
        ret = ret & sep2 & cell.Value
        sep2 = sep
    Next cell

    concatRange = ret
End Function

使用法:

=concatRange(A8:D11;", ")    'OS with ; list separator
=concatRange(A8:D11,", ")    'OS with , list separator or in a macro code

または

=concatRange(A8:D11)
13
dedek

こちらのブログ投稿をご覧ください: http://www.dullsharpness.com/2011/11/14/Excel-vba-range-to-csv-range2csv-function/

次のように使用できます。パイプ区切り記号付き:

=Range2Csv(A1:A255,"|")

Alt+F11を使用してVBAエディターにアクセスし、モジュールにドロップします。

コードの抜粋はこちら:

Option Explicit
'**********************************************
'* PURPOSE: Concatenates range contents into a
'*          delimited text string
'*
'* FUNCTION SIGNATURE: Range2Csv(Range, String)
'*
'* PARAMETERS:
'*    Range  - the range of cells whose contents
'*             will be included in the CSV result
'*    String - delimiter used to separate values
'*             (Optional, defaults to a comma)
'*
'* AUTHOR: www.dullsharpness.com
'*
'* NOTES: [add'l notes removed for brevity]
'*
'**********************************************
Public Function Range2Csv(inputRange As Range, Optional delimiter As String)
  Dim concattedList As String 'holder for the concatted CSVs
  Dim rangeCell As Range      'holder cell used in For-Each loop
  Dim rangeText As String     'holder for rangeCell's text

  'default to a comma delimiter if none is provided
  If delimiter = "" Then delimiter = ","

  concattedList = ""          'start with an empty string

  'Loop through each cell in the range to append valid contents
  For Each rangeCell In inputRange.Cells

    rangeText = rangeCell.Value 'capture the working value

    'Only operate on non-blank cells (i.e. Length > 0)
    If Len(rangeText) > 0 Then
      'Strip any delimiters contained w/in the value itself
      rangeText = WorksheetFunction.Substitute(rangeText, delimiter, "")

      If (Len(concattedList) > 0) Then
        'prepend a delimiter to the new value if we
        'already have some list items
        concattedList = concattedList + delimiter + rangeText
      Else
        'else if the list is blank so far,
        'just set the first value
        concattedList = rangeText
      End If
    End If

  Next rangeCell

  'Set the return value
  Range2Csv = concattedList

End Function
8
Marc

連結(a1、a2、a3、a4、a5、a6、a7、a8、a9、a10、a11、a12、a13、a14、a15、a16、a17、a18、a19、a20、a21、a22、a23、a24、 a25、a26、a27、a28、a29、a30、a31、a32、a33、a34、a35、a36、a37、a38、a39、a40、a41、a42、a43、a44、a45、a46、a47、a48、a49、 a50、a51、a52、a53、a54、a55、a56、a57、a58、a59、a60、a61、a62、a63、a64、a65、a66、a67、a68、a69、a70、a71、a72、a73、a74、 a75、a76、a77、a78、a79、a80、a81、a82、a83、a84、a85、a86、a87、a88、a89、a90、a91、a92、a93、a94、a95、a96、a97、a98、a99、 a100、a101、a102、a103、a104、a105、a106、a107、a108、a109、a110、a111、a112、a113、a114、a115、a116、a117、a118、a119、a120、a121、a122、a123、a124、 a125、a126、a127、a128、a129、a130、a131、a132、a133、a134、a135、a136、a137、a138、a139、a140、a141、a142、a143、a144、a145、a146、a147、a148、a149、 a150、a151、a152、a153、a154、a155、a156、a157、a158、a159、a160、a161、a162、a163、a164、a165、a166、a167、a168、a169、a170、a171、a172、a173、a174、 a175、a176、a177、a178、a179、a180、a181、a182、a183 、a184、a185、a186、a187、a188、a189、a190、a191、a192、a193、a194、a195、a196、a197、a198、a199、a200、a201、a202、a203、a204、a205、a206、a207、a208 、a209、a210、a211、a212、a213、a214、a215、a216、a217、a218、a219、a220、a221、a222、a223、a224、a225、a226、a227、a228、a229、a230、a231、a232、a233 、a234、a235、a236、a237、a238、a239、a240、a241、a242、a243、a244、a245、a246、a247、a248、a249、a250、a251、a252、a253、a254、a255)

PowerShellそれ!

"concatenate(a$((1..255) -join ', a'))" | clip

テキストファイルのコピーを開いて貼り付けます

"セルをすばやく選択するには、Ctrlキーを押しながら連結関数に含めるセルをクリックします。例、セルを選択します。数式バーで= concatenate( CTRLボタンを放します数式バーで)と入力し、Enterを押します)

7
E.V.I.L.

このVBA関数は、必要に応じて、オプションの区切り文字でセルの内容を連結します。標準モジュールにコピーします。

  Option Explicit

  Function Concat(CellRange As Range, Optional Delimiter As String) As String 
 ' this function will concatenate a range of cells and return the result as a single string
 ' useful when you have a large range of cells that you need to concatenate
 ' source: http://chandoo.org/wp/2008/05/28/how-to-add-a-range-of-cells-in-Excel-concat/

  Dim retVal As String, dlm As String, cell As Range
  retVal = ""
  If Delimiter = Null Then
      dlm = ""
  Else
    dlm = Delimiter
  End If
  For Each cell In CellRange
      If CStr(cell.Value) <> "" And CStr(cell.Value) <> " " Then
          retVal = retVal & CStr(cell.Value) & dlm
      End If
  Next
  If dlm <> "" Then
      retVal = Left(retVal, Len(retVal) - Len(dlm))
  End If
  Concat = retVal
End Function
3
chuff

私の好ましい方法は、正規表現を許可するエディターに値をカットアンドペーストすることです。次に、現在の選択で検索と置換を行うタブ(またはスペース)を削除します。

また、これを使用して、コンマ、空白、または必要なものを挿入することもできます。

=concatenate(A1,",","A2",",",......)と入力するよりも速いton

2
kmort

純粋なExcelアプローチ(つまり、VBAなし)を探している場合は、James Jenkinsが提案した方法が最適です。 VBAを使用して満足している場合は、VBAエディターを開き、新しいモジュールを追加して、次のコードを追加します。

Option Explicit

Public Function JoinText(cells As Variant,Optional delim_str As String) As String
    If cells.Columns.count < cells.Rows.count Then
       JoinText = Join(WorksheetFunction.Transpose(cells), delim_str)
    Else
       JoinText = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(cells)), delim_str)
    End If
End Function

VBAエディターを簡単に開くには、Alt-F11を押します。モジュールを挿入するには、「プロジェクト」ウィンドウにリストされているワークブックを右クリックします。

この関数は、Excelから次のように呼び出されます。

=JoinText(A1:C1)

区切り文字(コンマなど)を追加する場合:

=JoinText(A1:C1,",")

転置関数を使用する目的は、2次元配列「セル」を1次元配列に変換することです。これの理由は、VBA関数Joinが1d配列のみを受け入れることです。それらの2つを使用する理由は、JoinTextがセルの行(まだ2d配列のまま)を見ている場合、最初の転置呼び出しでこの2d行配列を2d列配列に転置し、2回目の呼び出しで1D配列。

2
user425678

これはExcelだけではありませんが、Wordで簡単に実行できます。

  1. 連結するセルを選択し、Wordにコピーして貼り付けます。これにより、テーブルが作成されます。
  2. テーブル全体を選択します。
  3. テーブルをテキストに変換します。区切り記号として段落記号(またはテキストに表示されないもの)を使用します。
  4. すべてのテキストを選択します。
  5. 置換を使用して、段落記号を削除します。 ([検索対象]ボックスに^ pと入力します。[置換]ボックスは空のままにします。)
1
Ronald Bourret

Excel 2016を使用している場合、配列数式を使用できます。

入る

= concat(a1:a255)

セルに入れてから

[ctrl] + [shift] + [enter]

1
user6654769

このサイト から恥知らずにコピーされました:

  1. 結果が必要なセルを選択します。
  2. 数式バーに移動して、「... = A1:A5」と入力します
  3. 数式全体を選択し、F9キーを押します(これにより、数式が値に変換されます)。
  4. 両端から中括弧を取り外します。
  5. = CONCATENATE(をテキストの先頭に追加し、丸括弧で終了します)。
  6. Enterキーを押します。

ここで特に興味深いのは、式を編集するときにF9キーを押すと、式がその式の結果に置き換えられることです。それが範囲である場合、それはその範囲の内容のリストに置き換えられます。

0
Steve Melnikoff

連結する値は、シートの行2列3から始まります

Sub GOWN()
roww = 2
Do While cells(roww, 2) <> ""
    aa = cells(roww, 3)
    dd = dd & aa & ","
    roww = roww + 1
Loop
cells(roww + 1, 3) = dd
End Sub
0
Fraser Porter

デリミネーターを1つの連結に追加するだけです。

=concatenate(A1, ",")

次に、すべての連結をコピーし、値として貼り付けます。次に、それらの値をコピーし、移調に貼り付けます。次に、転置した値をコピーして、Wordエディターに貼り付けます。デリミネータと値の前のスペースを検索し、デリミネータだけを置換します。これにより、すべての値とデリミネーターを連結したストリングが得られます。これは他のオプションよりもはるかに簡単です。

0
John Lehrkind