VBA代码中具有范围和字符串的可选变量

时间:2013-08-05 15:38:45

标签: excel-vba vba excel

我想问一下,在Excel中的VBA中是否有可能将代码的一部分存储在字符串中,我的意思是在下面的例子中显示(这段代码不起作用):

Sub newMacro()

Dim wb As Workbook
Dim ws As Worksheet
Dim sAdditional As String

Dim rngWhereCount_1 As Range
Dim rngWhereCount_2 As Range

Dim iCellValue As Integer
Dim i as integer

Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)

Set rngWhereCount_1 = ws.Columns(1)
Set rngWhereCount_2 = ws.Columns(2)

For i = 1 To 10
    If (i = 1) Or (i = 2) Then
        sAdditional = ", rngWhereCount_2, i"
    Else
        sAdditional = ""
    End If

    iCellValue = Application.WorksheetFunction.CountIfs(rngWhereCount_1, 1 & sAdditional)
Next i


End Sub

所以问题是,是否有一种简单而聪明的方式来声明sAdditional(可能不是字符串),但是在循环内使它成为可选的,同时sAdditional包含范围和字符串...

提前致谢! P上。

1 个答案:

答案 0 :(得分:1)

我认为不可能同时包含StringRange的变量。假设您正在计算正数,您可以执行以下操作:

  • 定义字符串变量strCriterion2。然后strCriterion2 = IIf(i=1 or i=2,"i",">=0").因此strCriterion2等于"i"">=0",具体取决于i的值。
  • CountIfs写为CountIfs(rngWhereCount_1, 1, rngWhereCount_2, strCriterion2)

我们的想法是,每当我们不希望激活第二个标准时,我们输入一个我们知道该范围内所有条目都有效的标准。因此,如果所有条目都是正数,那么如果我们强加">=0",第二个标准将被取消。如果您想要包含负数,可以使用">=-2.2251E-308"代替">=0"(取决于您拥有的Excel版本,我给出的数字对于Excel 2003来说最低)。

我希望以上有所帮助。