VBA 公式多个工作表中的动态范围
Dynamic range in VBA formula multiple worksheets
考虑以下代码,我在其中插入了一个 Excel 公式来执行非常简单的计数。
dim wb as Workbook
dim ws as Worksheet
dim ws_a as Worksheet
set wb = ThisWorkbook
set ws = wb.Worksheets("D")
set ws_a = wb.Worksheets("A")
With ws_a
.Range("c2").Formula = _
"ROWS(UNIQUE(FILTER(" & "D"! & Range("c2:c400").Address & "," & _
"IF(" & .Range("a2").Address(0,0) & " =""Empty"","""",""*""& " & .Range("a2").Address(0,0) & " &""*""))"
'following part of code
End With
如您所见,Sheet“D”中的范围不是动态的。考虑到范围内的空单元格,我想让它变得动态。基本上,我需要更换
Range("c2:c400")
类似
D.Range("c2"),D.Cells(D.Range("c2").SpecialCells(xlCellTypeLastCell).Row, 3))
在尝试连接字符串时,我肯定迷失了 &
和 ""
,所以我认为这是问题所在:我对这种语法的了解不多。
我也尝试调暗并设置所需的范围(在公式之外),但代码引用了错误的 sheet,好像它无法识别公式中不同的 sheet。
Dim wb as Workbook, ws as Worksheet, ws_a as Worksheet
Set wb = ThisWorkbook: Set ws = wb.Worksheets("D"): Set ws_a = wb.Worksheets("A")
Dim rngFilter as Range: Set rngFilter = ws_a.Range("c2:C400")
Set rngFilter = Range(rngFilter.Cells(1), rngFilter.SpecialCells(xlCellTypeLastCell))
With ws_a
.Range("c2").Formula = _
"ROWS(UNIQUE(FILTER(" & rngFilter.Address & "," & _
"IF(A2 =""Empty"","""",""*""& A2 &""*""))"
'following part of code
End With
考虑以下代码,我在其中插入了一个 Excel 公式来执行非常简单的计数。
dim wb as Workbook
dim ws as Worksheet
dim ws_a as Worksheet
set wb = ThisWorkbook
set ws = wb.Worksheets("D")
set ws_a = wb.Worksheets("A")
With ws_a
.Range("c2").Formula = _ "ROWS(UNIQUE(FILTER(" & "D"! & Range("c2:c400").Address & "," & _ "IF(" & .Range("a2").Address(0,0) & " =""Empty"","""",""*""& " & .Range("a2").Address(0,0) & " &""*""))" 'following part of code
End With
如您所见,Sheet“D”中的范围不是动态的。考虑到范围内的空单元格,我想让它变得动态。基本上,我需要更换
Range("c2:c400")
类似
D.Range("c2"),D.Cells(D.Range("c2").SpecialCells(xlCellTypeLastCell).Row, 3))
在尝试连接字符串时,我肯定迷失了 &
和 ""
,所以我认为这是问题所在:我对这种语法的了解不多。
我也尝试调暗并设置所需的范围(在公式之外),但代码引用了错误的 sheet,好像它无法识别公式中不同的 sheet。
Dim wb as Workbook, ws as Worksheet, ws_a as Worksheet
Set wb = ThisWorkbook: Set ws = wb.Worksheets("D"): Set ws_a = wb.Worksheets("A")
Dim rngFilter as Range: Set rngFilter = ws_a.Range("c2:C400")
Set rngFilter = Range(rngFilter.Cells(1), rngFilter.SpecialCells(xlCellTypeLastCell))
With ws_a
.Range("c2").Formula = _
"ROWS(UNIQUE(FILTER(" & rngFilter.Address & "," & _
"IF(A2 =""Empty"","""",""*""& A2 &""*""))"
'following part of code
End With