变量失败比较但显示值相同

时间:2015-09-23 06:27:46

标签: excel vba excel-vba

我有以下代码,它循环一些单元格并用值填充它们。它运行正常,除了现在我试图跟踪一行中所有填充单元格的总值。填充一行后,我想知道填充单元格的总和是否不等于当前行(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

2 个答案:

答案 0 :(得分:0)

For Each b In wsSheet.Range(Cells(Selection.Row, 4), Cells(Selection.Row, 17))

我没有看到&#34; Selection&#34;的任何背景,因此会产生潜在的不可预测的结果。

答案 1 :(得分:0)

我今天刚才遇到了同样的问题。只要您确定您的单元格没有任何额外的空格并且格式相同(这通常会导致此问题),那么请使用Range()命令。显然Excel不能很好地处理长无限小数。

https://support.microsoft.com/en-us/kb/78113