Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 是否可以在excel vba数组中删除行或列_Arrays_Excel_Vba - Fatal编程技术网

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

Arrays 是否可以在excel vba数组中删除行或列,arrays,excel,vba,Arrays,Excel,Vba,从excel中的选定内容创建数组时,会忽略某些行是隐藏的这一事实 例如,如果在列A、B和C中有数据,而列B是隐藏的,则数组仍有3列和4行 有什么办法可以做到这一点吗 创建数组后从数组中删除列或行,或者。。。即删除B列 告诉数组时只考虑非隐藏列;S是形成的(所以它只考虑列A,C.)。 一些代码来说明我想要什么 dim v作为变体 范围(“A2:C4”)。选择 v=选择 选择现在是3列宽4行深。我只想要选择中没有隐藏的两列 我能想到的唯一两种方法是 (1) 从原始选择中删除某些内容 (2) 首先不要

从excel中的选定内容创建数组时,会忽略某些行是隐藏的这一事实

例如,如果在列A、B和C中有数据,而列B是隐藏的,则数组仍有3列和4行

有什么办法可以做到这一点吗

  • 创建数组后从数组中删除列或行,或者。。。即删除B列
  • 告诉数组时只考虑非隐藏列;S是形成的(所以它只考虑列A,C.)。 一些代码来说明我想要什么 dim v作为变体 范围(“A2:C4”)。选择 v=选择

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

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

    也许我可以选择一个非连续范围,然后将其转换为一个数组?

    几个点:

    0:您指的是实际数组还是命名范围?Visual Basic有数组,excel有范围。在回答此问题时,我假定您指的是命名范围,因为在不调整数组大小的情况下无法从数组中删除项

    1:有多种方法可以从excel中删除行和列,或将范围移动到不包含某些元素的位置。这些方法太多,此处无法提及,但ThisRange.columns(1).delete或.Offset都是选项

    2:我不会更改范围包含的内容,而是使用一个for-each循环来考虑单元格属性


    正如评论所建议的那样,更多的信息将使这个答案更适合你。

    你可以通过

    • 创建临时工作表
    • 将“可见”单元格复制到临时工作表
    • 将单元格读入vba数组
    • 删除临时工作表
    假设在表2中A1:C4中有隐藏B列的数据

    下面的代码将导致V是一个2D数组(1到4,1到2),其中只包含a列和C列中的数据

    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
    

    你能添加一些代码来说明吗?