是否有可能在Excel VBA数组中删除行或列
当你在Excel中select一个数组的时候,它忽略了一些行被隐藏的事实。
例如,如果在列A,B和C中有数据并且列B是隐藏的,则该数组仍然有3列和4行。
有没有办法
- 一旦创build数组,就从数组中删除列或行…即删除列B
- 告诉数组只考虑非隐藏的列当它被形成(所以它只会考虑列A,C
一些代码来说明我想要变暗的variables范围(“A2:C4”)。selectv =select
现在select3列宽4行深。 我只是想在select的两个列没有隐藏。
我能想到的唯一两种方法是(1)从原始select中删除某些东西(2)不首先select隐藏的列。
也许我可以select一个不连续的范围,然后把它变成一个数组?
你可以做到这一点
- 创build一个临时工作台
- 将“可见”单元格复制到临时表单中
- 读取单元格到一个VBA数组
- 删除临时表。
假设在Sheet2上,A1:C4中的数据隐藏了B列。
以下代码将导致V是包含仅来自列A和C的数据的二维数组(1到4,1到2)
Option Explicit Sub arrUnHidden() Dim R As Range Dim V As Variant Dim wsTemp As Worksheet Set R = Worksheets("Sheet2").Range("A1", Cells(Rows.Count, "C").End(xlUp)) Worksheets.Add ActiveSheet.Name = "Temp" Set wsTemp = Worksheets("Temp") R.SpecialCells(xlCellTypeVisible).Copy wsTemp.Cells(1, 1) V = wsTemp.UsedRange Application.DisplayAlerts = False 'suppress message when deleting a sheet Worksheets("temp").Delete Application.DisplayAlerts = True End Sub
几点:
0:你的意思是实际的数组还是你的意思是命名范围? Visual Basic有数组,excel有范围。 为了这个答案的目的,我将假定你的意思是命名范围,因为你不能从数组中删除项目,而无需调整数组的大小。
1:有办法从excel中删除行和列,或者移动范围来不包含某些元素。 它们在这里不胜枚举,但是ThisRange.Columns(1).Delete或.Offset都是选项。
2:而不是改变范围包含,我会使用一个考虑到单元格属性的每个循环。
正如评论所build议的那样,更多的信息可以使这个答案变得更好。