29

我在 Excel 中有几百个单元格,我想连接成一个字符串。有没有比手动逐个检查它们以便将它们输入更简单的方法CONCATENATE(A1, A2, ....)

CONCATENATE(A1:A255)不起作用。

4

12 回答 12

34

*在新选项卡中,在单元格 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
于 2013-02-28T20:25:18.843 回答
13

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)
于 2015-04-10T11:29:43.530 回答
8

在此处查看此博客文章:http ://www.dullsharpness.com/2011/11/14/excel-vba-range-to-csv-range2csv-function/

您可以像这样使用它,例如使用管道分隔符:

=Range2Csv(A1:A255,"|")

使用访问您的 VBA 编辑器Alt+F11并将其放入模块中。

代码摘录在这里:

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
于 2013-02-28T20:43:16.877 回答
6

连接(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)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)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 按钮并单击要包含的单元格。释放 CTRL 按钮在公式栏中键入 ),然后按 Enter"

于 2013-02-28T20:26:53.030 回答
3

如果需要,此 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
于 2013-02-28T20:19:10.877 回答
2

如果您正在寻找纯 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,",")

使用转置函数的目的是将二维数组“单元格”转换为一维数组。原因是 VBA 函数 Join 只接受一维数组。使用其中两个的原因是,如果 JoinText 正在查看一行单元格(仍然只是一个二维数组),那么第一次调用转置,将这个二维行数组转置为一个二维列数组,第二次调用将它变成一维数组。

于 2013-11-28T17:07:34.907 回答
2

我首选的方法是将值剪切并粘贴到允许正则表达式的编辑器中,然后我只需在当前选择中使用查找和替换删除选项卡(或空格)。

您也可以使用它来插入逗号、空格或任何您想要的内容。

这比打字快一=concatenate(A1,",","A2",",",......)

于 2013-12-02T20:11:03.050 回答
1

它不是纯粹的 Excel,但有一种使用 Word 的简单方法可以做到这一点。

  1. 选择要连接的单元格并将它们复制/粘贴到 Word 中。这将创建一个表。
  2. 选择整个表格。
  3. 将表格转换为文本。使用段落标记(或文本中未出现的其他内容)作为分隔符。
  4. 选择所有文本。
  5. 使用替换删除段落标记。(在“查找内容”框中,输入 ^p。将“替换为”框留空。)
于 2014-03-12T17:26:59.623 回答
1

如果您有 Excel 2016,则可以使用数组公式:

进入

=连接(a1:a255)

进入单元格,然后按

[ctrl]+[shift]+[回车]

于 2016-07-29T14:38:42.400 回答
0

您要连接的值从工作表的第 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
于 2015-02-19T19:02:25.767 回答
0

从这个网站无耻地复制:

  1. 选择需要结果的单元格。
  2. 转到公式栏并输入...“=A1:A5”
  3. 选择整个公式并按 F9(这会将公式转换为值)。
  4. 从两端取下花括号。
  5. 将 =CONCATENATE( 添加到文本的开头并以圆括号结束)。
  6. 按 Enter。

这里特别具有启发性的是,在编辑公式时,按 F9 会将公式替换为该公式的结果。如果这是一个范围,它将用该范围的内容列表替换它。

于 2017-08-22T10:23:50.320 回答
-1

只需在一个串联中添加您的分隔符:

=concatenate(A1, ",")

然后复制所有连接,将它们粘贴为值。然后复制这些值,将它们粘贴到转置中。然后复制转置值并将它们粘贴到文字编辑器中。查找分隔符和值前面的空格,并替换只是分隔符。这应该给你一个带有分隔符的所有值的串联字符串。这比其他选项容易得多。

于 2015-07-26T15:06:19.693 回答