如何将多个Excel列中的数据合并为一列

可以说,我有一个Excel表格,每列有4列数据和20000行数据。

什么是最有效的方式来获取它,这样我把所有的数据整合到一个列中(IE-A列中有80,000行数据,而不是4列中的20,000行数据)。

另外,如何实施该解决scheme。 我的意思是,如果你的解决scheme不是一个“公式”,而是VBA,我该如何实现这个解决scheme?

谢谢!

保存您的工作簿。 如果这个代码没有做到你想要的,唯一的办法就是closures而不保存并重新打开。

select您想要在一列中列出的数据。 必须是连续的列。 可能包含空白单元格。

按Alt + F11打开VBE

按Control + R查看Project Explorer

导航到工作簿的项目,然后select“插入 – 模块”

将此代码粘贴到代码窗格中

 Sub MakeOneColumn() Dim vaCells As Variant Dim vOutput() As Variant Dim i As Long, j As Long Dim lRow As Long If TypeName(Selection) = "Range" Then If Selection.Count > 1 Then If Selection.Count <= Selection.Parent.Rows.Count Then vaCells = Selection.Value ReDim vOutput(1 To UBound(vaCells, 1) * UBound(vaCells, 2), 1 To 1) For j = LBound(vaCells, 2) To UBound(vaCells, 2) For i = LBound(vaCells, 1) To UBound(vaCells, 1) If Len(vaCells(i, j)) > 0 Then lRow = lRow + 1 vOutput(lRow, 1) = vaCells(i, j) End If Next i Next j Selection.ClearContents Selection.Cells(1).Resize(lRow).Value = vOutput End If End If End If End Sub 

按F5运行代码

最好和简单的解决scheme如下:

select要复制到单列的列的范围

复制单元格的范围(多列)

打开记事本++

粘贴所选的单元格范围

按Ctrl + H,用\ nreplace\ t,然后点击全部replace

所有的多列都属于一列

现在复制相同,并在Excel中粘贴

对于那些不想在VBA中浪费时间编码的人来说,简单有效的解决scheme

下面是你如何使用一些简单的Excel公式,而不需要花哨的VBA。 诀窍是使用OFFSET公式。 请参阅此示例电子表格:

https://docs.google.com/spreadsheet/ccc?key=0AuSyDFZlcRtHdGJOSnFwREotRzFfM28tWElpZ1FaR2c&usp=sharing#gid=0

您没有提及您是否使用Excel 2003或2007,但是您可能会遇到问题,Excel 2003中的行数被限制为65,536。 如果您使用的是2007年,则限额为1,048,576。

另外,我可以问一下你的最终目标是什么? 如果你需要对你的数据进行很多的统计计算,我build议把Excel环境移出来,直接适合数据处理和分析,比如R。

连接R到Excel有多种select,其中包括

  1. RExcel
  2. RODBC
  3. R手册中的其他选项

无论您select何种方式将数据移入/移出R,从宽格式变为长格式的代码都非常简单。 我喜欢重塑包中的melt()函数。 该代码将如下所示:

 library(reshape) #Fake data, 4 columns, 20k rows df <- data.frame(foo = rnorm(20000) , bar = rlnorm(20000) , fee = rnorm(20000) , fie = rlnorm(20000) ) #Create new object with 1 column, 80k rows df.m <- melt(df) 

从那里,你可以执行任何数量的统计或graphics操作。 如果您使用上面的RExcel插件,则可以将所有这些都打开并在Excel中自行运行。 R社区非常活跃,可以帮助解决您可能遇到的任何和所有问题。

祝你好运!

看看Blockspring – 你需要安装插件,但是这只是你调用的另一个函数:

 =BLOCKSPRING("twodee-array-reduce","input_array",D5:F7) 

源代码和其他细节在这里 。 如果这不适合和/或你想build立我的解决scheme,你可以fork我的function(Python)或使用其他支持的脚本语言( RubyRJS等)。

公式

 =OFFSET(Sheet1!$A$1,MOD(ROW()-1,COUNT(Sheet1!$A$1:$A$20000)), (ROW()-1)/COUNT(Sheet1!$A$1:$A$20000)) 

放入第二个工作簿的每个单元格中将从源表格中检索相应的单元格。 没有macros,简单地从一张纸复制到另一张重新格式化结果。

您将需要修改COUNT函数中的范围以匹配源表中的最大行数。 根据需要调整列标题。

如果你需要一个不是0的空单元格,你可能更喜欢包含一个条件语句。

用于重新格式化数据的脚本可能更有效,但在现代Excel工作簿中,20k行不再是真正的限制。