【问题标题】:Copy a filtered Excelsheet into a multi array in VBA将过滤后的 Excelsheet 复制到 VBA 中的多数组中
【发布时间】:2015-04-08 12:23:23
【问题描述】:

我已经在这里和那里阅读了一些关于 SpecialCells(xlCellTypeVisible) 的内容,但我没有设法将它放入代码中。 我想将具有多列和多行的过滤 Excel 工作表复制到一个数组中,而不使用新工作表来复制它。

目前这是我的代码(用于未过滤的工作表):

    For i = 1 To LastRow
        For j = 1 To 9
        strArray(i, j) = Cells(i, j).Value2
        Next j
    Next i

任何提示或线索如何做到这一点?

【问题讨论】:

    标签: vba excel multidimensional-array filter


    【解决方案1】:

    有时我的思维不太好。检查隐藏行给了我答案!这成功了!

        k = 1
    For i = 1 To LastRow
        For j = 1 To 9
        If Sheets("Feuil2").Rows(i).Hidden = False Then
        strArray(k, j) = Cells(i, j).Value2
        Else
        End If
        Next j
        If Sheets("Feuil2").Rows(i).Hidden = False Then
        k = k + 1
        Else
        End If
    Next i
    

    【讨论】:

      【解决方案2】:

      你应该这样做:

      strArray= Sheets(Sheet_name).AutoFilter.Range.Value
      

      您已经将 Range 转换为 Array!

      【讨论】:

      • 这个想法很好,但它需要所有值而不是过滤的值(日期)。
      • 并且使用 strArray = Sheets("Feuil2").AutoFilter.Range.SpecialCells(xlCellTypeVisible).Value 它只需要第一个可见单元格。所以可能它必须成为一种循环。
      • “第一个可见单元格”是什么意思?第一排?不过这很奇怪......因为我使用ShF.AutoFilter.Range.Columns(ColRef).Value,它工作得很好......
      • 您是否过滤了部分数据?我首先按名称对数据进行排序,然后按日期对数据进行排序。所以我得到了 38 行,其中第一个名字是日期,而另一部分是第二个名字。所以 1-38 和 129-218 等等。所以你的代码在 38 岁之后被删减。在这里他们发现相同:pcreview.co.uk/threads/…
      • 我会小心我的,因为它似乎在其他地方不起作用!^^ .Count 属性在过滤后会给你 38 吗?您是否尝试遍历行并测试是否可见?或者你可以尝试使用MS Forms 2.0 Object Library(如果找不到,在磁盘上查找fm20.dll并添加到References中)并使用GetFromClipboardPutInClipboard函数(我时间不多,会有一些明天可以继续提供帮助)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2021-07-02
      • 2012-10-09
      • 2019-05-21
      • 2021-12-09
      • 2012-12-07
      • 2016-12-31
      相关资源
      最近更新 更多