ListObject テーブルの特定の列の可視セルのみを範囲オブジェクトに取得しようとしています。
これはうまくいかないようです。
dim rng as range
with activesheet.listobjects("Tab_data").databodyrange
set rng=.specialcells(xlcelltypevisible)
end with
しかし、これは範囲全体を選択し、最初の列をオフセットして他の2つの必要な列を選択すると機能します!
dim rng as range
with activesheet.usedrange
Set rng = .Offset(1, 1).Resize(.Rows.Count-1, .Columns.Count-1).SpecialCells(xlCellTypeVisible)
end with
しかし、私の式は以下に示すリストオブジェクトの2つの列のみを参照しているため、式で上記を使用することはできません:
ワークシートの UDF 式:
=TagCloud(RngWrdLst as Range)
そして私はそれを次のように使用しています:
=TagCloud(tab_data[[Brands]:[Index]])
画像からわかるように、「COLUMN」列のセルではなく、列「Brands」と「Index」の可視セル範囲のみが必要です。
したがって、私が望む可視範囲は次のとおりです。
"$B$2:$C$3,$B$45:$C$45,$B$75:$C$78"
@Jeeped の編集:
ワークシート セルから呼び出される UDF 関数があり、列 B と C の ListObject 範囲 (databodyrange 全体ではなくこれらの列のみ) を渡した場合、RngWrdLst の可視範囲を見つけるにはどうすればよいですか?
例えば
ワークシートからの呼び出し:
=TagCloud(tab_data[[Brands]:[Index]])
関数定義:
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 には B と C の 2 つの列が含まれます。コードを変更して、関数から可視範囲のみを取得するにはどうすればよいですか?