有没有一种简单的方法来转换不使用CONCATENATE在Excel中的列到文本?

我知道文本到列button。 相反,可以通过select列,可能运行一个macros或使用类似的button?

通常我会说“请发布你的代码”来寻求macros的帮助/帮助,但是这个真的很简单。

Public Function ColumnsToText(rng As Range, Optional DelimitBy As String = " ") As String 'Applies on a row/partial row of data. Must be continuous cells, eg, A1:D1. Dim var As Variant var = Application.Transpose(Application.Transpose(rng.Value)) ColumnsToText = Join(var, DelimitBy) End Function 

在工作表单元格中input它,如:

=ColumnsToText(A1:F1)

或者你可以指定一个可选的分隔符,默认情况下是一个空格,但是你可以使用任何string:

=ColumnsToText(A1:F1,"%")

在这里输入图像说明

等等。

我对这个答案很感兴趣@大卫·泽曼斯使用了双重转置。 他的回答很好。 我确实find了另一种方法来获得单行到1维数组。 另外我想要一个可以处理列的函数。 所以这里是我的替代答案。

 Public Function ColumnOrRowToText(rng As Range, Optional DelimitBy As String = " ") As String 'rng must be a single row or a single column; cannot handle multiple columns or rows Dim var As Variant If rng.Rows.Count = 1 Then var = Application.WorksheetFunction.Index(rng.Value, 1, 0) 'for a single row Else var = Application.Transpose(rng.Value) 'for a single column End If 'var must be a 1 dimensional array ColumnOrRowToText = Join(var, DelimitBy) End Function 

如果您感兴趣的是将您的列“转移”为自己列中的值,那么本质上您需要创build一个平面文件。

这是用R'“gather”function或Python Pandas的“融化”function最好的完成的。 它也可以通过Excel中的macros来完成。 如果你不了解macros,一个更基本的方法是:

  1. 创build一个新工作表并粘贴第一列的所有值(假设这是一个您要保留的列)作为新工作表(列A)中的第一列。 现在,在B列中,将要作为值的***第一列标题的名称粘贴到列中。 例如,在下面你想要列标题'红'在它自己的列 – 也许是一个“颜色”列。 在A列中有一个唯一logging的每一行,在列B上向下拖动“红色”。
  2. 然后,在这个下面再次粘贴A列中的所有值,同时在列B中粘贴你想要在下面的例子中('orange')执行“列到文本”的第二列。
  3. 重复您需要列为“文本”的许多列。
  4. 最后,在列C中,使用列A和列B中的值,并创build一个索引(match(match())来找出列A和列B中两个值的交点处的值。

这是一个例子:

在这里输入图像描述 在这里输入图像说明

我相信Text-to-Columns的真实背景是TEXTJOIN公式。 它会将您select的列条目返回到由您可以自行设置的分隔符分隔的一个长string中的一个单元格中。

TEXT JOIN示例

Excel帮助提供这种技术:

鉴于您正在合并单元格A1和B1

在新单元格中input

=(A1&" "&B1)

{{注意撇号之间的空格}}

我用它来插入填充文本,所以我读=(P2&", also"&Q2)