Excelに数百のセルがあり、連結して1つの文字列にしたいと思います。それらをCONCATENATE(A1, A2, ....)
に入力するために手動で1つずつ調べるよりも簡単な方法はありますか?
CONCATENATE(A1:A255)
は機能しません。
*新しいタブで、セル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
押す 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)
こちらのブログ投稿をご覧ください: 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
連結(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
テキストファイルのコピーを開いて貼り付けます
この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
私の好ましい方法は、正規表現を許可するエディターに値をカットアンドペーストすることです。次に、現在の選択で検索と置換を行うタブ(またはスペース)を削除します。
また、これを使用して、コンマ、空白、または必要なものを挿入することもできます。
=concatenate(A1,",","A2",",",......)
と入力するよりも速いton
純粋な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配列。
これはExcelだけではありませんが、Wordで簡単に実行できます。
Excel 2016を使用している場合、配列数式を使用できます。
入る
= concat(a1:a255)
セルに入れてから
[ctrl] + [shift] + [enter]
このサイト から恥知らずにコピーされました:
- 結果が必要なセルを選択します。
- 数式バーに移動して、「... = A1:A5」と入力します
- 数式全体を選択し、F9キーを押します(これにより、数式が値に変換されます)。
- 両端から中括弧を取り外します。
- = CONCATENATE(をテキストの先頭に追加し、丸括弧で終了します)。
- Enterキーを押します。
ここで特に興味深いのは、式を編集するときにF9キーを押すと、式がその式の結果に置き換えられることです。それが範囲である場合、それはその範囲の内容のリストに置き換えられます。
連結する値は、シートの行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
デリミネーターを1つの連結に追加するだけです。
=concatenate(A1, ",")
次に、すべての連結をコピーし、値として貼り付けます。次に、それらの値をコピーし、移調に貼り付けます。次に、転置した値をコピーして、Wordエディターに貼り付けます。デリミネータと値の前のスペースを検索し、デリミネータだけを置換します。これにより、すべての値とデリミネーターを連結したストリングが得られます。これは他のオプションよりもはるかに簡単です。