在电子表格(Excel、Google Docs、OpenOffice)中,如何将数据从行转置到列,但仅限于非空单元格?

在电子表格(Excel、Google Docs、OpenOffice)中,如何将数据从行转置到列,但仅限于非空单元格?

我使用上面列出的所有三个电子表格程序,并且我相信我的问题可以对于这三个程序得到相同或相似的答案。

在我的工作表上,顶行全是列标题。第二行是与列标题对应的数据,但有些单元格可能为空,也可能不为空。我想转置第二行的数据,以便新列完全忽略空单元格。

例如,如果我有一行,其连续单元格中的值分别为“A”、“NULL”、“C”、“D”,则我想要转置,使得新列显示“A”、“C”、“D”,并且没有用于 NULL 的空单元格。

希望我的描述足够详细。谢谢。

答案1

没有宣泄,

我为您提供的简单答案是特定于 Excel 的(Google Docs 没有类似的过滤器,而 Open Office 的 Calc 会复制过滤后的单元格):

1)使用“自动过滤”(数据>过滤>自动过滤)并过滤非空白。

2)复制剩余单元格

3)选择性粘贴(编辑>选择性粘贴)并从选项中选择“转置”

加多宝

答案2

鉴于具体示例以一行开始并以一列结束,我会反过来执行相同的步骤,尽管我不喜欢以过滤后的工作表结束的想法。如果您可以对数据进行排序(即顺序无关紧要),那么所有空白都会集中到一个地方,您可以在此删除行。

无论如何,我建议使用高级过滤器实现更好的全面解决方案:选择原始数据行,复制,在新工作表的某个位置选择一个单元格,该单元格上方至少有一个空单元格,粘贴 > 选择性粘贴,勾选“转置”,确定

现在您有一个有间隙的列。

在上面单元格中,为该列添加标签,例如“数据”。将其设为粗体 (Ctrl-B),这样 Excel 便会发现这是一个标题,尽管它与该列的其余部分一样都是文本。

在另一个单元格中(例如右侧的两个单元格),输入相同的标签,并在星号下方的单元格中输入(* - 稍后使用的通配符)。选择您的列及其所有间隙和标题

转到数据功能区>排序和过滤组,然后单击高级过滤器。

勾选“复制到其他位置”

检查“列表范围”是否有您选择的数据列。

单击“条件区域”旁边的重新编辑按钮,然后选择之前使用标题和通配符创建的两个单元格

对于“复制到”范围,请选择此表上的任意单元格,例如右侧的另外几列。

单击“确定”。

任务完成。现在您有了一组新的连续数据,您可以删除其他列。

请注意,您不能使用高级过滤器将新列表复制到另一张工作表,除非您首先从该工作表开始,然后返回选择数据和条件。对于快速而粗略的方法,这要简单得多。

答案3

我想不出不使用宏编程来做到这一点的方法,所以我不确定 Google Docs 或 OpenOffice,但这里有一种在 Excel 中做到这一点的方法。

此宏假设:

  1. 您的数据位于名为“Sheet1”的单独工作表中
  2. 您的目的地是名为“Sheet2”的空白表

要使用宏,请选择 Sheet1 上要转置的行,然后执行该宏并突出显示这些行。结果应复制到 Sheet2。

Sub CopyNonNulls()

Dim DestinationCellAddress As String
DestinationCellAddress = "A1"

Dim CurrentCellAddress As String
CurrentCellAddress = DestinationCellAddress

For Each rw In Selection.Rows

    For Each c In rw.Cells

      If c.Value <> "" Then
        Worksheets("Sheet2").Range(CurrentCellAddress).Value = c.Value
        CurrentCellAddress = Worksheets("Sheet2").Range(CurrentCellAddress).Offset(1, 0).Address
      End If

    Next

    CurrentCellAddress = Worksheets("Sheet2").Range(DestinationCellAddress).Offset(0, 1).Address

Next

Worksheets("Sheet2").Select

End Sub

答案4

在新的一组单元格和列中使用公式,例如=A270 | =A272 | =A274,然后向下填充。

它会自动重新排列该列,例如 A,然后将值复制并粘贴到新工作表中。

相关内容