如何编写VBA脚本,以便它可以比较数据?

时间:2019-05-28 15:47:28

标签: excel vba

我们需要一个脚本来比较D列中的日期和E列中的日期。

如果D列中的日期比E列中的日期早两天,那么我们需要F列来说明在D对应的行中。我们的范围是前2天和后2天(肩后天)。我们需要能够轻松地重现此代码,并在将其导入到Access中时使其能够运行。我们有大约3300个独特的日子可供检查。

我尝试使用datevalue或公式,但是我们需要将来能够重现它,并且该公式不允许我们轻松地做到这一点。

1 个答案:

答案 0 :(得分:0)

我不会提供完整的实现,但是我可以向您展示如何实现(使用 Excel公式或使用 VBA代码)。两种方法都会自动计算您需要的值,因此您可以轻松地将其导入到 Microsoft Access 中-导入将从选定的单元格中获取计算出的值。


第一种方法(也是最简单的方法)是使用简单的 Excel formula, 来考虑此图片:

DateDiff

它在 G列中计算差异 D2-D1 ,并以天为单位显示。 然后,在 F列中,有一个简单的if条件来确定日期D1是否小于,大于或等于D2。 结果是自动计算的。

第2行中的公式为:

Column G
=E2-D2

Column F
=IF(G2>0;"D1 < D2";IF(G2=0;"D1 = D2";"D1 > D2"))

您可以将公式拖放到下面的行中,这样就可以创建很多用该公式预填充的行。


第二种方法是您可以为F列中的(简单)计算公式编写 VBA function

Function CalcResult(D1 As Variant, D2 As Variant) As Variant

    CalcResult = ""
    Dim result As String
    Dim diff As Single
    diff = D2 - D1
    If (diff > 0) Then
        result = "D1 < D2"
    ElseIf (diff = 0) Then
        result = "D1 = D2"
    ElseIf (diff < 0) Then
        result = "D1 > D2"
    End If
    CalcResult = result

End Function

在这种情况下,请将以下内容放在单元格F2中:

Column F
=CalcResult(E2; D2)

该方法的优点是您可以稍后改进函数,而对于我之前展示的单元宏方法而言,这并不容易。

注意:上面的功能需要在单独的模块中,并且您需要将工作簿另存为“启用宏的工作簿”。


第三种方式是使用 Excel macro recorder 并记录您打算做的事情。它将使用VBA代码创建一个公共模块。如果记录器要求您,请选择将代码存储在工作簿中。

稍后,您重新访问生成的VBA代码并对其进行优化-例如,在其周围放置一个for循环以自动执行一次已记录的内容。 这种方法非常适合创建“计算”按钮并为其添加一些逻辑。