Excel VBA计算两个单元格之间的差异+如果超出差异则添加字符

时间:2018-06-20 13:04:42

标签: excel vba excel-vba difference

因此,我一直在寻找类似的东西,而其他所有人的问题似乎都与相邻列中的数字有关。我正在尝试为很久以前创建的公司清理电子表格。进行数据输入的女孩对Excel的了解很少,并且习惯于在这种布局中输入内容,因此我特别不想重新创建整个电子表格...这是我的问题哈哈

我有两行数据(在同一列中),有一个跳过单元格,然后重复。此操作持续约250行,每行都是“成对”结果,但在同一列中,之间有一个跳过单元格。我只需要查找这两者之间的差异,例如测试结果1,并将其与下面的计算1配对(彼此相差10%+/-),并用“ *”标记配对中的顶部单元格在单元格中已经存在的数字之后。

示例:第一对在我们计算的+/- 10%以内,第二对超出了该范围。
    测试结果#1 12.5
我们的计算#1 11.9
空单元格
测试结果#2 15.0 *
我们的计算#2 13.0

我知道要输入“ *”,我将使用if-then-else语句,这没问题。但是我在努力弄清楚如何(如果可能)计算差异。我的工作表也有6列具有相同的布局(对于我们正在查看的X样本,每个参数对应一列)。

任何朝着正确方向的指针都值得赞赏!谢谢!

2 个答案:

答案 0 :(得分:0)

这是我做的一个快速模型,应该可以满足您的要求-您可能只需要在我在A列中创建模拟数据时就调整该列即可。

还请注意,为了获取test和calc的值,为了安全起见,我选择获取最后4位数字。如果您需要更多或更少,则只需在括号中更改最后一个数字即可。

Dim test As Double
Dim calc As Double

For i = 1 To Cells(Rows.count, "A").End(xlUp).row Step 3

    test = Right$(Cells(i, "A").Value2, 4)
    calc = Right$(Cells(i + 1, "A").Value2, 4)

    If Abs(test - calc) / calc > 0.1 Then
        Cells(i, "A").Value2 = Cells(i, "A").Value2 & "*"
    End If
Next i

答案 1 :(得分:0)

使用end(up)会错过最后一对下方的最后一个空白单元格。我是这样做的:

Sub QuikandDirty()
            Dim r As Range
            For Each r In Intersect(ActiveSheet.Columns("a").Cells, ActiveSheet.UsedRange.Offset(1, 0)) 'assume col A
            If r = 0 Then
                If Abs(r.Offset(-2, 0) - r.Offset(-1, 0)) > (r.Offset(-2, 0) / 10) Then
                   r.Offset(-2, 0).Formula = CStr(r.Offset(-2, 0).Formula) & "*"
                End If
            End If
            Next r
            End Sub