我的任务是创建一个简单的Excel工作表,该工作表在A列中采用未指定的行数,如下所示:

1234
123461
123151
11321


并将它们放入逗号分隔的列表中用户可以轻松地将其复制并粘贴到另一个程序中的另一个单元格,例如:

1234,123461,123151,11321


做到这一点的最简单方法是什么?

评论

解决方案的一部分可能是“编辑”,“选择性粘贴”,“转置”以将列转换为行。如果另一个程序接受制表符而不是逗号,那么在复制新行之后,一切都准备好了。

您如何做相反的事情?取一个逗号分隔的列表并将其转换为内容列?

@stevvve使用“数据”选项卡中的“文本到列”功能。 support.microsoft.com/en-us/kb/214261

我为此使用任何具有正则表达式功能的文本编辑器,例如notepad ++。复制列值并将其粘贴到编辑器中,搜索并替换正则表达式,找到“ \ r \ n”替换为“,”。如果要将CSV转换为列,请找到“,”并替换为“ \ r \ n”

#1 楼

假设您的数据从A1开始,我将在B列中添加以下内容:

B1:

=A1


B2:

=B1&","&A2


然后可以将B2列粘贴到整个列上。 B列中的最后一个单元格现在应为A列的逗号分隔列表。

评论


这对于有限的行数非常有用,但是(取决于可用内存吗?)如果您要连接的行数超过两千行,则该过程将缩短,从而使输出值不完整。小心。

–samthebrand
2014-09-18 21:47

在功能强大的Windows 10 Pro计算机上使用Excel 2013,此操作仅在30-35行后失败。我需要超过200。MichaelJoseph的解决方案非常有效。

–试用者
19年5月5日在19:30

#2 楼


在Excel中复制该列
打开Word
“粘贴特殊字符”仅作为文本
在Word中选择数据(您需要将其转换为用,分隔的文本),
按Ctrl-H(查找并替换)
在“查找内容”框中,键入^p

在“替换为”框中,键入,

选择“全部替换”


评论


+1与Microsoft在此处提供的“官方”解决方案相同:support.microsoft.com/kb/819964

– Neo
2013年12月30日15:51

非常可爱的解决方案... :-)

–萨拉瓦南
2014年2月11日下午6:35

#3 楼

如果您具有Office 365 Excel,则可以使用TEXTJOIN():

=TEXTJOIN(",",TRUE,A:A)




评论


正如Scott所指出的,重要的警告仅是Excel 365。该功能在Excel 2016中不存在。

–WhyGeeEx
20 Sep 30 '20:07

如果您需要用引号分隔的列表'a','b','c',请尝试=“'”&TEXTJOIN(“','”,TRUE,A:A)&“'”

– Stevoisiak
20-10-28在19:31

#4 楼

我实际上只是在VBA中创建了一个模块,可以完成所有工作。它使用我的远程列表并创建一个逗号分隔的字符串,该字符串输出到我选择的单元格中:
 Function csvRange(myRange As Range)
    Dim csvRangeOutput
    Dim entry as variant
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & entry.Value & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function
 

因此在我的单元格中,我只输入了=csvRange(A:A),它给了我逗号分隔的列表。

评论


嗯..非常接近我的答案,但是我喜欢您的实现。

–mpeterson
2011-2-3 14:27

我喜欢。您可能只想在返回csvRange之前检查Len(csvRangeOutput)是否为0。如果为0,则将出现运行时错误。

–WhyGeeEx
20 Sep 30 '20:42

#5 楼

另一种方法是将Excel列粘贴到此浏览器内工具中:

convert.town/column-to-comma-separated-list

它转换列将文本复制到用逗号分隔的列表中。

用户无论如何都将其复制并粘贴到另一个程序中,这对他们来说可能同样容易。

#6 楼

使用vi或vim只需在每行的末尾放置一个逗号:

%s/$/,/


要解释此命令:



%表示对所有行执行操作(即查找和替换)

s表示替换

/分隔参数(即s/find/replace/options

$代表一行的结尾

,是这种情况下的替换文本


评论


由于上下文不同意评论。拥有超级用户帐户并在此发布的人通常是使用vim的类型。

– Uniquegeek
16年1月1日在20:25

我但是使用ViM并认为基本思想很有用。我最终通过使用该想法和一个简单的文本编辑器解决了问题。

– Nigini
16 Dec 16'在17:16

#7 楼

你可以做这样的事情。如果您不是要讨论巨大的电子表格,那么它将执行“确定” ...

Alt-F11,创建一个宏以创建列表(请参见下面的代码)
将其分配给快捷方式或工具栏按钮
用户将其数字列粘贴到A列中,按下按钮,并将其列表放入单元格B1中。

这是VBA宏代码:
<请确保将单元格B1的格式设置为“文本”,否则您将得到一个混乱的数字。我确定您也可以在VBA中执行此操作,但是目前还不确定如何执行此操作,因此需要恢复工作。 ;)

#8 楼

您可以使用How-To Geek的指南将行变成一列,然后简单地将其反转。然后将数据导出为csv(逗号分隔格式),您便有了纯文本逗号分隔列表!您可以根据需要从记事本中复制并放回excel。另外,如果您想在逗号后留一个空格,则可以执行搜索和替换功能,将“,”替换为“,”。希望能有所帮助!

评论


导出为CSV超出了该用户的能力。我需要将其指向并在excel中单击。

– muncherelli
2011年2月2日在16:15

#9 楼

muncherelli,我喜欢您的回答,并对其进行了调整:)。只是一件小事,有时我会从工作表中提取数据并用它来查询数据库。我添加了一个可选的“ textQualify”参数,该参数有助于创建可在查询中使用的逗号分隔列表。
 Function csvRange(myRange As Range, Optional textQualify As String)
    'e.g. csvRange(A:A)  or csvRange(A1:A2,"'") etc in a cell to hold the string
    Dim csvRangeOutput
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & textQualify & entry.Value & textQualify & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function
 


#10 楼

Sux2Lose的答案是我的首选方法,但是如果要处理的行数超过两千行,它将无法正常工作;如果计算机的可用内存不足,则中断的行数可能会更少。

在这种情况下,最佳实践可能是复制该列,创建一个新工作簿,过去在新工作簿的A1Transpose中是特殊的,因此该列现在是一行。然后将工作簿另存为.csv。现在,您的csv基本上是用逗号分隔的纯文本列表,您可以在文本编辑器中打开该列表。

注意:在保存为csv之前,请记住将列转置为一行。否则Excel将不知道在值之间加上逗号。

#11 楼

我改进了generatecsv()子元素,以处理包含多个列表的Excel工作表,其中的空行将每个列表的标题和列表与其标题分开。示例
list title 1

item 1
item 2

list title 2

item 1
item 2

,然后将它们组合成多行,每个列表1个。
原因,我有一个客户根据主题向我发送了多个列表格式的关键字给他们的网站,需要使这些关键字轻松进入网页的方法。因此修改了例程并提出了以下建议,我也将变量名称更改为有意义的名称:
 Sub generatecsv()

  Dim dataRow As Integer
  Dim listRow As Integer
  Dim data As String

  dataRow = 1: Rem the row that it is being read from column A otherwise known as 1 in vb script
  listRow = 1: Rem the row in column B that is getting written

  Do Until Cells(dataRow, 1).Value = "" And Cells(dataRow + 1, 1).Value = ""
    If (data = "") Then
      data = Cells(dataRow, 1).Value
    Else
      If Cells(dataRow, 1).Value <> "" Then
        data = data & "," & Cells(dataRow, 1).Value
      Else
        Cells(listRow, 2).Value = data
        data = ""
        listRow = listRow + 1
      End If
    End If
    dataRow = dataRow + 1
  Loop

  Cells(listRow, 2).Value = data

End Sub
 


#12 楼

我是这样做的

删除了所有不需要的列和数据,然后另存为.csv文件,然后使用Visual Studio代码编辑器替换了多余的逗号和换行符。 Hola

#13 楼

最简单的方法之一是将zamazin.co Web应用程序用于此类逗号分隔任务。只需填写列数据并点击转换按钮,即可创建一个逗号分隔的列表。您甚至可以使用其他一些设置来改善所需的输出。

http://zamazin.co/comma-separator-tool



评论


现在在delim.co

–菲尔
18/12/10在19:53

#14 楼

在要显示结果的单元格上使用=CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)

评论


这是无法扩展的手动解决方案。

–丹尼尔·哈里(DanielHári)
16年4月7日在9:49