是否有可能在Excel VBA数组中删除行或列

当你在Excel中select一个数组的时候,它忽略了一些行被隐藏的事实。

例如,如果在列A,B和C中有数据并且列B是隐藏的,则该数组仍然有3列和4行。

有没有办法

  1. 一旦创build数组,就从数组中删除列或行…即删除列B
  2. 告诉数组只考虑非隐藏的列当它被形成(所以它只会考虑列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议的那样,更多的信息可以使这个答案变得更好。