【问题标题】:Excel Formula or VBA to copy cells removing blanks? [closed]Excel公式或VBA复制单元格删除空白? [关闭]
【发布时间】:2014-02-22 08:05:55
【问题描述】:

我希望将单元格 A1:B100 复制到 D1:E100 但删除空白。这可以通过公式实现还是我必须使用 VBA?

这是一个例子:

【问题讨论】:

    标签: excel vba cell formula


    【解决方案1】:

    有一个简单的方法:

    初始数据:

    第一步:A:B复制所有数据。选择D1,鼠标右键选择PasteSpecial->PasteValues

    第 2 步: 使用选定范围和列中的数据 D:E(在我的情况下为 D1:E8)按 CTRL+G

    第三步:GoTo对话框窗口中按Special...并选择Blanks

    第四步:现在D1:E8中的所有空单元格都被选中了。

    第五步:鼠标右键点击amy选中的单元格然后按删除

    第6步:选择“向上移动单元格”并按确定完成!

    结果:


    UPD: 作为 cmets 的跟进,OP 在 A:B 中有 =IF(Sheet1!D11="YES",Sheet1!A11, "")。而且由于""实际上不是空白单元格,我们不能使用Special->Blanks

    有VBA解决方案:

    Sub test()
        Dim lastrow As Long
        Dim cell As Range
        Dim rng As Range
    
        'change sheet name to suit
        With ThisWorkbook.Worksheets("Sheet1")
            'find lastrow in columns A:B
            lastrow = Application.Max(.Cells(.Rows.Count, "A").End(xlUp).Row, _
                                        .Cells(.Rows.Count, "B").End(xlUp).Row)
            'Copy values from A:B to D:E
            .Range("D1:E" & lastrow).Value = .Range("A1:B" & lastrow).Value
            'Iterates throught each cell in D:E and if it equals to "" - remember it
            For Each cell In .Range("D1:E" & lastrow)
                If cell.Value = "" Then
                    If rng Is Nothing Then
                        Set rng = cell
                    Else
                        Set rng = Union(rng, cell)
                    End If
                End If
            Next
            'delete all empty cells (with "")
            If Not rng Is Nothing Then rng.Delete Shift:=xlUp
    
        End With
    End Sub
    

    【讨论】:

    • 我试过这种方式,但是我在 A & B 中使用了一个公式,所以它不起作用:(
    • 查看我的更新答案 (STEP1)。您可以使用 PasteSpecial->PasteValies 仅粘贴 D:E 列中的值
    • 这就是我正在做的事情,我正在粘贴值但是当我来删除空白时,Excel 仍然认为它们在单元格中有些东西,我无法理解它。我正在使用代码(在底部)从工作表 1 中提取数据。=IF(Sheet1!D11="YES",Sheet1!A11, "")
    • @Jacko058,查看我对 VBA 解决方案的更新答案
    • 谢谢,我现在开始工作了.. 使用公式和 VBA 在选择值时会变得复杂 :( 可以工作,但必须多跑 2 页,但没关系。谢谢你:) -Jacko
    【解决方案2】:

    1) 首先,在对任何工作簿进行任何重大更改之前,请务必确保您有一个备份副本或最近保存的副本,以防您需要恢复原始数据。

    2) 现在,从列表顶部到底部选择一列中的单元格。

    3) 确保此选定范围内的所有空白单元格都是您要删除的行。

    4) 按键盘上的 F5 键(或选择编辑、转到)。

    5) 单击特殊...按钮。

    6) 单击空白选项,然后单击确定。这将选择您之前选择的范围内的所有空白单元格。

    7) 现在选择“编辑”、“删除”,选择“整行”选项并单击“确定”。

    8)我认为这可以满足您的要求,如果您仍想复制,请选择所有单元格并复制到其他单元格。

    【讨论】:

    • 谢谢汤姆斯,这会起作用,但是我有 A1:B100 从公式中提取数据,我相信这会删除我的公式:( ...我正在使用 =IF(Sheet1!D11= "YES",Sheet1!A11, "") ... 那是在 A1 中,然后我将它复制到 A100 等 B。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 2021-03-29
    • 2018-01-24
    • 1970-01-01
    • 2017-03-03
    相关资源
    最近更新 更多