excel - VBA - 比较列和一个目标单元格之间的绝对差异
问题描述
我试图找出 in 中的值和 in 中的值之间Cell C3
的Sheet2
绝对 Col C
差异Sheet1
。之后,差异按降序排序。计算出的差异将输入到 D 列。这是我到目前为止的代码,但它在Call Load
,处引发错误compile error. Argument not optional
。谁能帮我看看这里有什么问题?任何帮助是极大的赞赏!!
找到absdiff:
Sub absdiff()
Dim i As Integer
Dim test As Range
Dim calc As Range
If Sheet1.Range("A:A") <> "" Then
Call Load
End If
Load:
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
test = Sheet2.Cells(3, 3).Value
calc = Cells(i + 1, "C").Value
Range("D" & i).Value = Abs(test - calc)
Next i
End Sub
更新列的排序:
Private Sub Worksheet_Change(ByVal Target As Range)
Call absdiff
On Error Resume Next
If Not Intersect(Target, Range("D:D")) Is Nothing Then
Range("D").Sort Key1:=Range("B2"), _
Order1:=xlDescending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End If
End Sub
解决方案
这行得通吗?每次你在 D 中放一些东西时,都会触发 change 事件,这似乎不是一个理想的状态。
为什么不将您的代码分配给一个按钮呢?
此外,test
andcalc
是单元格的值,而不是范围变量。我已更改为,Variant
但您可以使用Long
,或者Double
如果您知道它们将是数字。
代码重新调整。我已将所有内容放入更改事件中,每当更改 C 列时就会触发该更改事件。之前的问题是每次排序发生时都会调用另一个过程,这会导致无限循环,因此堆栈空间不足。
当我假设您想按 D 排序时,您的排序代码引用了无效范围(“D”)并按 B 排序。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim test As Variant
Dim calc As Variant
If Not Intersect(Target, Range("C:C")) Is Nothing Then
test = Sheet2.Cells(3, 3).Value
For i = 1 To Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
calc = Sheet1.Cells(i + 1, "C").Value
Sheet1.Range("D" & i).Value = Abs(test - calc)
Application.EnableEvents = False
Range("A:D").Sort Key1:=Range("D2"), _
Order1:=xlDescending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
Application.EnableEvents = True
Next i
End If
End Sub
推荐阅读
- unity3d - 无法统一采样相机深度纹理
- azure-data-factory - Azure 数据工厂:两行值之间的差异
- excel - VBA - 退出 MsgBox()
- c# - 当发送带有字节 [] 的 HTTP POST 时,服务器响应为 System.Byte[]
- javascript - 我们如何在 React JS 中将多个 JSON 文件的值呈现为表格格式?
- javascript - 从 Twitter API V1.1 切换到 Twitter API V2 以将推文从个人资料发送到 Google 表格
- c# - C# 引用列表中的特定项目
- python - 并排直方图:更改轴
- selenium - 是否可以使用 appium 扫描二维码?
- reactjs - NextJS + SSR + IIS 部署