[英]How to Consolidate Data from Multiple Excel Columns All into One Column
可以说我有一个Excel工作表,其中包含4列数据,每列20,000行数据。
什么是最有效的获取方式,以便将所有数据合并到一个列中(即-A列中的80,000行数据,而不是4列中的20,000行数据)。
另外,如何实施该解决方案。 我的意思是,如果您的解决方案不是“公式”而是VBA,那么如何实现该解决方案?
谢谢!
保存您的工作簿。 如果此代码没有执行您想要的操作,则返回的唯一方法是关闭而不保存并重新打开。
在一列中选择要列出的数据。 必须是连续的列。 可能包含空白单元格。
按Alt + F11打开VBE
按Control + R查看项目资源管理器
导航到您的工作簿的项目,然后选择“插入-模块”
将此代码粘贴到代码窗格中
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运行代码
遵循的最佳和简单解决方案:
选择要复制到单列的列的范围
复制单元格范围(多列)
打开记事本++
粘贴选定范围的单元格
按Ctrl + H,将\\ t替换为\\ n,然后单击全部替换
所有多列都归于一列
现在复制相同内容并粘贴到excel中
对于那些不想在VBA中浪费时间编码的人来说,简单有效的解决方案
这是使用一些简单的Excel公式,而不需要花哨的VBA的方法。 诀窍是使用OFFSET公式。 请查看以下示例电子表格:
看一下Blockspring-您确实需要安装插件,但这只是您调用的另一个函数,如下所示:
=BLOCKSPRING("twodee-array-reduce","input_array",D5:F7)
源代码和其他详细信息在这里 。 如果这不适合和/或您想构建我的解决方案,则可以fork
我的函数(Python)或使用其他受支持的脚本语言( Ruby
, R
, JS
等)。
公式
=OFFSET(Sheet1!$A$1,MOD(ROW()-1,COUNT(Sheet1!$A$1:$A$20000)),
(ROW()-1)/COUNT(Sheet1!$A$1:$A$20000))
放置在第二个工作簿的每个单元格中,将从源工作表中检索相应的单元格。 没有宏,可以简单地从一张纸复制到另一张纸以重新格式化结果。
您将需要在COUNT函数中修改范围以匹配源工作表中的最大行数。 根据需要调整列标题。
如果对于空单元格,您需要除0之外的其他值,则可能更喜欢包含条件条件。
重新格式化数据的脚本可能会更有效率,但是在现代Excel工作簿中,2万行已不再是真正的限制。
您没有提到使用的是Excel 2003还是2007,但是您可能会遇到问题,因为Excel 2003中的行数上限为65,536。 如果使用的是2007,则限制为1,048,576。
另外,请问您的最终目标是进行分析吗? 如果您需要对数据执行许多统计计算,则建议您移出Excel环境,移至更直接适合数据操作和分析的内容中,例如R。
有多种将R连接到Excel的选项,包括
不管您选择使用什么将数据移入/移出R,将代码从宽格式更改为长格式都是非常琐碎的。 我喜欢reshape包中的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)
从那里,您可以执行任何数量的统计或图形操作。 如果您使用上面的RExcel插件,则可以启动所有这些插件并在Excel本身中运行它。 R社区非常活跃,可以帮助您解决所有可能遇到的问题。
祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.