有没有一种简单的方法可以在Excel中没有CONCATENATE的情况下将列转换为文本?

时间:2013-10-05 00:17:42

标签: excel vba excel-vba

我知道text-to-columns按钮。可以通过选择列,可能运行宏或使用类似按钮来完成相反的工作吗?

5 个答案:

答案 0 :(得分:11)

通常我会说“请发布您的代码”以获取帮助/协助编写宏,但这个非常非常简单。

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

var = Application.Transpose(Application.Transpose(rng.Value))
    ColumnsToText = Join(var, DelimitBy)

End Function

在工作表单元格中输入:

=ColumnsToText(A1:F1)

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

=ColumnsToText(A1:F1,"%")

enter image description here

答案 1 :(得分:4)

我对@David Zemens使用双转置给出的答案很感兴趣。他的回答很有效。我确实找到了另一种将单行放入一维数组的方法。我还想要一个可以处理列的函数。所以这是我的替代答案。

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

答案 2 :(得分:2)

我认为Text-to-Columns的真正反转是公式TEXTJOIN。它会将您选择的列条目返回到一个长字符串中的一个单元格中,该字符串由您可以自行设置的分隔符分隔。

TEXT JOIN example

答案 3 :(得分:1)

如果你感兴趣的是" univoting"你的列在它们自己的列中是值,那么基本上你需要创建一个平面文件。

这最好用R' "收集"功能或Python熊猫' "熔融"功能。它也可以通过Excel中的宏来完成。如果你不了解宏,那么更基本的方法是:

  1. 创建新工作表并将第一列的所有值(假设这是您要保留的列)粘贴为新工作表中的第一列(A列)。现在,在B列中,将要作为值的***第一列标题的名称粘贴到列中。例如,下面你想要列标题' red'进入它自己的专栏 - 也许是一个"颜色"柱。拖动红色'对于您在A列中拥有唯一记录的每一行,请向下列B.
  2. 然后,在此下面再次粘贴A列中的所有值 在B列中粘贴您要执行的 第二个 列 "列到文本" on(' orange'在下面的示例中)。
  3. 重复您需要的许多列 列为"文字"。
  4. 最后,在C列中,使用A列和B列中的值并创建索引(match(match())以找出A列中两个值的交叉处的值。和B栏。
  5. 以下是一个例子:

    enter image description here enter image description here

答案 4 :(得分:0)

Excel帮助提供了这种技术:

  

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

     

在新单元格中,输入

     

=(A1&" "&B1)

     

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

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