繁体   English   中英

如何将来自多个Excel列的数据全部合并为一列

[英]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公式。 请查看以下示例电子表格:

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

看一下Blockspring-您确实需要安装插件,但这只是您调用的另一个函数,如下所示:

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

源代码和其他详细信息在这里 如果这不适合和/或您想构建我的解决方案,则可以fork我的函数(Python)或使用其他受支持的脚本语言( RubyRJS等)。

公式

=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的选项,包括

  1. RExcel
  2. 远程ODBC
  3. R手册中的其他选项

不管您选择使用什么将数据移入/移出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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM