如何在vba中实现Excel公式

时间:2016-12-20 11:11:19

标签: excel vba excel-vba

我现在正在编写一个VBA编程工具,我在编写IF公式时遇到了问题。我有两个工作表" site"和"概述",我想为"网站"写一个IF公式。工作表范围栏L.

在Excel公式栏中,它是以下公式

=IF(ISBLANK('Overview'!$Q$2:$Q$17), 'Site'L2:L17, 'Overview',Q2:Q17)

如何在VBA中使用正确的语法编写和实现此公式。提前谢谢。

2 个答案:

答案 0 :(得分:0)

对于您的公式,不清楚它所在的单元格。它不能在“站点”列L或“概述”列Q中,正如您的问题所示,因为那样您将有一个循环引用。我将假设它在“概述”栏L中。

现在使用VBA If逻辑。

' Shorthand "With" to prefix "Sheets" with a dot "." means always reference this workbook
With ThisWorkbook

Dim vcell as Range
For Each vcell in .Sheets("Overview").Range("L2:L17")

    ' Check if column Q cell on same row is blank
    If .Sheets("Overview").Range("Q" & vcell.row).Text = "" then

        ' Value if vcell is blank
        vcell.Value = .Sheets("Site").Range("L" & vcell.row).value

    Else

        ' Value if vcell is not blank
        vcell.Value = .Sheets("Overview").Range("Q" & vcell.row).value            

    End If

End With

如果您习惯于在Excel单元格中编写公式而不是在VBA中编写公式,则可以使用VBA的WorksheetFunction功能:MSDN Worksheet Function Documentation。但是,最好使用原生If逻辑来增强其功能和多功能性,这就是If没有工作表函数的原因。

还要注意将单元格公式复制到代码的Worksheet Function部分。您对工作表名称的引用会导致问题。我提到这一点是因为在VBA中,撇号'将开始注释,因此代码将被忽略!

答案 1 :(得分:0)

您可以对此类事物使用“立即确定”,但请确保您完全理解此语法的潜在缺陷:

https://support.office.com/en-gb/article/IIf-Function-32436ecf-c629-48a3-9900-647539c764e3

像这样:

Set myRange = IIf([ISBLANK(Overview!$Q$2:$Q$17)], Sheets("site").Range(L2:L17), Sheets("Overview").Range("Q2:Q17"))