=如果整列则前一列等于下一列

问题描述 投票:0回答:1

我有详细的项目管理财务电子表格。它们随着项目预算的每次削减而变化。目前,人为错误的可能性非常高,因为我们手动输入所有数据。我希望能够运行一个脚本来搜索“G”列中大于 0 的任何单元格,如果为真,则需要在“F”=“H”中创建相应的单元格并清除单元格“的值G”。这可能吗?它必须是手动运行的宏、自动化或操作,而不是自动运行。

我有基本的.. =IF(G48>=0,F48=H48," ") 但这并不完全是我所需要的..

excel search
1个回答
0
投票

你的公式不起作用的原因有两个。首先,一旦分配了 F = H,它就不会清空 G 列。如果这样做,则公式将失败,因为 G 不再 > 0。

你需要的是及时的快照,而不是动态的公式。如果您将以下内容放入工作簿的模块中并运行它,它会执行您需要的操作 选项显式

Sub Demo()

    Dim ColG As Variant, ColF As Variant, ColH As Variant
    
    'Brute force - should probably resize or use specific range
    ColG = Worksheets(1).Range("G:G").Value
    ColF = Worksheets(1).Range("F:F").Value
    ColH = Worksheets(1).Range("H:H").Value
    
    Dim maxG As Long, looper As Long
    maxG = UBound(ColG)

    For looper = 1 To maxG
        If ColG(looper, 1) > 0 Then
            ColF(looper, 1) = ColH(looper, 1)
            ColG(looper, 1) = ""
        End If
    Next looper
    
    Worksheets(1).Range("F:F").Value = ColF
    Worksheets(1).Range("G:G").Value = ColG

End Sub

注意事项 - 我使用数组(声明为 Variant)来“快照”单元格的内容,然后将数据写回。这是处理大量细胞的快速方法。

我已经包含了 G 的整个列 - 如果您只查看所使用的范围,您可以让它运行得更快。

我假设所有内容都位于当前工作簿中的第一个工作表上。你最好使用类似的东西

With ThisWorkBook.Worksheets("Your Sheet Name")
    ColG = .Range("G:G").Value
    ColF = .Range("F:F").Value
    ColH = .Range("H:H").Value
End With
© www.soinside.com 2019 - 2024. All rights reserved.