我有详细的项目管理财务电子表格。它们随着项目预算的每次削减而变化。目前,人为错误的可能性非常高,因为我们手动输入所有数据。我希望能够运行一个脚本来搜索“G”列中大于 0 的任何单元格,如果为真,则需要在“F”=“H”中创建相应的单元格并清除单元格“的值G”。这可能吗?它必须是手动运行的宏、自动化或操作,而不是自动运行。
我有基本的.. =IF(G48>=0,F48=H48," ") 但这并不完全是我所需要的..
你的公式不起作用的原因有两个。首先,一旦分配了 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