是否可以删除excel vba数组中的行或列

时间:2014-08-21 23:54:47

标签: arrays excel vba

从excel中的选择创建数组时,它会忽略某些行被隐藏的事实。

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

有没有办法

  1. 创建数组后,从数组中删除列或行......或者...... drop column B
  2. 告诉数组只考虑非隐藏列;正在形成(因此它只考虑列A,C。
  3. 一些代码来说明我想要的内容 dim v作为变体 范围( “A2:C4”)选择。 v =选择

    选择现在是3列宽4行深。我只想要选择中没有隐藏的两列。

    我能想到的唯一两种方法是 (1)从原始选择中删除一些东西 (2)不要首先选择隐藏列。

    也许我可以选择一个不连续的范围,然后把它变成一个数组?

2 个答案:

答案 0 :(得分:1)

您可以通过

完成此操作
  • 创建临时工作
  • 复制"可见"细胞到临时表
  • 将单元格读入vba数组
  • 删除临时表。

假设在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来考虑单元格属性的每个循环。

正如评论所建议的那样,更多信息可以帮助你更好地定制这个答案。