从excel中的选择创建数组时,它会忽略某些行被隐藏的事实。
例如,如果您在列A,B和C中有数据并且B列被隐藏,则该数组仍有3列和4行。
有没有办法
一些代码来说明我想要的内容 dim v作为变体 范围( “A2:C4”)选择。 v =选择
选择现在是3列宽4行深。我只想要选择中没有隐藏的两列。
我能想到的唯一两种方法是 (1)从原始选择中删除一些东西 (2)不要首先选择隐藏列。
也许我可以选择一个不连续的范围,然后把它变成一个数组?
答案 0 :(得分:1)
您可以通过
完成此操作假设在Sheet2上你有A1:C4中的数据,其中B列是隐藏的。
以下代码将导致V为包含仅来自A列和C列的数据的2D数组(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
答案 1 :(得分:0)
有几点:
0:你的意思是实际数组还是指命名范围? Visual Basic有数组,excel有范围。出于本答案的目的,我将假设您的意思是命名范围,因为您无法在不调整数组大小的情况下从数组中删除项目。
1:有一些方法可以从excel中删除行和列,或者移动范围以不包含某些元素。它们在这里太多了,但是ThisRange.Columns(1).Delete或.Offset都是选项。
2:我不会改变范围包含的内容,而是使用a来考虑单元格属性的每个循环。
正如评论所建议的那样,更多信息可以帮助你更好地定制这个答案。