从ListObject表的特定列中selectSpecialCells(xlCellTypeVisible)

我正在试图获取一个ListObject表的某些列的可见单元格到一个范围对象。

这似乎并不奏效。

dim rng as range with activesheet.listobjects("Tab_data").databodyrange set rng=.specialcells(xlcelltypevisible) end with 

但是这个工程,当我select整个范围,然后抵消第一列,以select其他2所需的列!

 dim rng as range with activesheet.usedrange Set rng = .Offset(1, 1).Resize(.Rows.Count-1, .Columns.Count-1).SpecialCells(xlCellTypeVisible) end with 

但我不能在公式中使用上面的公式,因为我的公式只涉及下面显示的listobject中的2列:

在这里输入图像说明

工作表上的UDF公式:

 =TagCloud(RngWrdLst as Range) 

我正在使用它:

 =TagCloud(tab_data[[Brands]:[Index]]) 

从图像中可以看到,我只想要“Brands”和“Index”列中的可见单元格范围,而不是“COLUMN”列中的单元格。

所以我想要的可见范围是:

 "$B$2:$C$3,$B$45:$C$45,$B$75:$C$78" 

编辑@Jeeped:

如果我有一个从工作表单元格调用的UDF函数,并传递列B&C(只有这些列,而不是整个数据)的ListObject范围,那么我将如何findRngWrdLst可见范围?

例如

从工作表中调用:

 =TagCloud(tab_data[[Brands]:[Index]]) 

function定义:

 Function TagCloud(RngWrdLst As Range) Dim VisibleRng As Range With RngWrdLst Set VisibleRng = Intersect(.SpecialCells(xlCellTypeVisible), Union(.Columns(2), .Columns(3))) Debug.Print VisibleRng.Address(0, 0) End With ' do something with the visibleRng...... End Function 

顺便说一句,RngWrdLst将包含2列B&C。那么我如何修改你的代码,并获得从function的可见范围?

在所需列的联合 方法上使用交集方法 。

 Dim rng As Range With ActiveSheet.ListObjects("Tab_data").DataBodyRange Set rng = Intersect(.SpecialCells(xlCellTypeVisible), _ Union(.Columns(2), .Columns(3))) Debug.Print rng.Address(0, 0) End With 

或者,直接从第一列移出并调整一个小于.DataBodyRange属性包含的列。

 Dim rng As Range With ActiveSheet.ListObjects("Tab_data").DataBodyRange With .Resize(.Rows.Count, .Columns.Count - 1).Offset(0, 1) Set rng = .SpecialCells(xlCellTypeVisible) End With Debug.Print rng.Address(0, 0) End With 

取决于你对rng做什么,你可能需要遍历Range.Areas属性 。