我现在正在编写一个VBA编程工具,我在编写IF
公式时遇到了问题。我有两个工作表" site"和"概述",我想为"网站"写一个IF
公式。工作表范围栏L.
在Excel公式栏中,它是以下公式
=IF(ISBLANK('Overview'!$Q$2:$Q$17), 'Site'L2:L17, 'Overview',Q2:Q17)
如何在VBA中使用正确的语法编写和实现此公式。提前谢谢。
答案 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"))