我的任务是创建一个简单的Excel工作表,该工作表在A列中采用未指定数量的行,如下所示:
1234
123461
123151
11321
并将它们放入另一个单元格中的逗号分隔列表中,用户可以轻松地将其复制并粘贴到另一个程序中,如下所示:
1234,123461,123151,11321
最简单的方法是什么?
我的任务是创建一个简单的Excel工作表,该工作表在A列中采用未指定数量的行,如下所示:
1234
123461
123151
11321
并将它们放入另一个单元格中的逗号分隔列表中,用户可以轻松地将其复制并粘贴到另一个程序中,如下所示:
1234,123461,123151,11321
最简单的方法是什么?
Answers:
假设您的数据从A1开始,我将在B列中添加以下内容:
B1:
=A1
B2:
=B1&","&A2
然后,您可以将B2列粘贴到整个列中。B列中的最后一个单元格现在应该是A列的逗号分隔列表。
,
),然后按Ctrl- H(查找和替换)^p
,
我实际上只是在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)
了逗号分隔的列表。
一种替代方法是将Excel列粘贴到此浏览器内工具中:
它将一列文本转换为逗号分隔的列表。
无论如何,由于用户正在复制并粘贴到另一个程序,这对他们来说可能同样容易。
你可以做这样的事情。如果您不是在谈论一个巨大的电子表格,它将执行“确定” ...
这是VBA宏代码:
Sub generatecsv()
Dim i As Integer
Dim s As String
i = 1
Do Until Cells(i, 1).Value = ""
If (s = "") Then
s = Cells(i, 1).Value
Else
s = s & "," & Cells(i, 1).Value
End If
i = i + 1
Loop
Cells(1, 2).Value = s
End Sub
请确保将单元格B1的格式设置为“文本”,否则您会得到一个混乱的数字。我确定您也可以在VBA中执行此操作,但是目前还不确定如何执行,因此需要恢复工作。;)
使用vi或vim只需在每行的末尾放置一个逗号:
%s/$/,/
解释此命令:
%
表示对所有行执行操作(即查找并替换)s
表示替代/
分隔参数(即s/find/replace/options
)$
代表一行的结尾,
在这种情况下是替换文字您可以使用How-To Geek的指南将行变成列,然后简单地将其反转。然后将数据导出为csv(逗号分隔格式),您便有了纯文本逗号分隔列表!您可以根据需要从记事本中复制并放回excel。另外,如果您想在逗号后留一个空格,则可以执行搜索和替换功能,将“,”替换为“,”。希望有帮助!
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
我改进了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
Sux2Lose的答案是我的首选方法,但是如果您要处理的行数超过两千行,它将无法正常工作;如果计算机的可用内存不足,则中断的行数可能会更少。
在这种情况下,最佳实践可能是复制该列,创建一个新工作簿,该新工作簿过去是特殊的A1
,Transpose
因此该列现在是一行。然后将工作簿另存为.csv
。现在,您的csv基本上是纯文本逗号分隔的列表,您可以在文本编辑器中将其打开。
注意:在保存为csv之前,请记住将列转置为一行。否则,Excel将不知道在值之间加上逗号。
最简单的方法之一是将zamazin.co Web应用程序用于此类逗号分隔任务。只需填写列数据并点击转换按钮,即可创建一个逗号分隔的列表。您甚至可以使用其他设置来改善所需的输出。