我有以下代码,它循环一些单元格并用值填充它们。它运行正常,除了现在我试图跟踪一行中所有填充单元格的总值。填充一行后,我想知道填充单元格的总和是否不等于当前行(a.value)中C列中存储的值。
当我执行If / Then比较a.value到oAllocated时,我得到了一些我不期望的结果,并且MsgBox似乎显示相同的值,即使因为Excel显示MsgBox说他们不是。
更令人困惑的是,如果我在工作表的单元格中创建一个公式,该公式对行中的条目求和并将其与a.value列进行比较,则它们匹配!!
Dim wsSheet As Worksheet
Dim oAllocated As Single
For Each a In wsSheet.Range("C3:C17").Cells
If (IsEmpty(a) = False) Then
oAllocated = 0
For Each b In wsSheet.Range(Cells(Selection.Row, 4), Cells(Selection.Row, 17))
If IsEmpty(Application.WorksheetFunction.VLookup(Cells(b.Row, 1), Sheets("Allowable Activities").Range("A1:Q17"), Application.WorksheetFunction.Match(Cells(1, b.Column), Sheets("Allowable Activities").Range("A1:Q1"), 0), False)) = True Then
If b.Value + (a.Value * Application.WorksheetFunction.VLookup(oSheetName, Sheets("Funder Salary Allocation").Range("B1:Q13"), Application.WorksheetFunction.Match(Cells(1, b.Column), Sheets("Funder Salary Allocation").Range("B1:Q1"), 0), False)) > 0 Then
b.Offset(0, 24).Value = b.Value + (a.Value * Application.WorksheetFunction.VLookup(oSheetName, Sheets("Funder Salary Allocation").Range("B1:Q13"), Application.WorksheetFunction.Match(Cells(1, b.Column), Sheets("Funder Salary Allocation").Range("B1:Q1"), 0), False))
oAllocated = oAllocated + CSng((b.Value + (a.Value * Application.WorksheetFunction.VLookup(oSheetName, Sheets("Funder Salary Allocation").Range("B1:Q13"), Application.WorksheetFunction.Match(Cells(1, b.Column), Sheets("Funder Salary Allocation").Range("B1:Q1"), 0), False))))
End If
End If
Next
If a.Value <> oAllocated Then
MsgBox ("Allocated: " & CSng(a.Value) & " - Dispersed: " & oAllocated)
End If
End If
ActiveCell.Offset(1, 0).Select
Next
答案 0 :(得分:0)
For Each b In wsSheet.Range(Cells(Selection.Row, 4), Cells(Selection.Row, 17))
我没有看到&#34; Selection&#34;的任何背景,因此会产生潜在的不可预测的结果。
答案 1 :(得分:0)
我今天刚才遇到了同样的问题。只要您确定您的单元格没有任何额外的空格并且格式相同(这通常会导致此问题),那么请使用Range()命令。显然Excel不能很好地处理长无限小数。