VBA:如何从过滤后的数据中获取当前区域?

Posted

技术标签:

【中文标题】VBA:如何从过滤后的数据中获取当前区域?【英文标题】:VBA: How to get current region from filtered data? 【发布时间】:2018-01-16 00:54:39 【问题描述】:

我想弄清楚如何在过滤到变体对象后获取数据。当我使用这个时:

table = ActiveSheet.Range("A1").CurrentRegion

我正在获取所有数据,但我只想过滤。

工作簿屏幕截图:

【问题讨论】:

【参考方案1】:

您可以使用SpecialCells(xlCellTypeVisible) 来获取过滤后的行:

Dim Tbl As Range

Set Tbl = ActiveSheet.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
' for DEBUG onlu
Debug.Print Tbl.Address

编辑 1:完整代码

Option Explicit

Sub VarfiltRange()

Dim BasketCostFiltRng As Range
Dim LastRow As Long
Dim VarRes As Double

With Worksheets("Sheet1") '< -- modift "Sheet1" to your sheet's name
    LastRow = .Cells(.Rows.Count, "D").End(xlUp).Row

    ' get only the filteres rows in column D
    Set BasketCostFiltRng = .Range("D2:D" & LastRow).SpecialCells(xlCellTypeVisible)

    ' get the variance of only visible cells in Column "D" (after you filter to show only 1100 and 1112 in column "A")
    VarRes = WorksheetFunction.Var(BasketCostFiltRng)
    MsgBox VarRes
End With

End Sub

【讨论】:

好的,现在我有一个包含这个单元格所有信息的对象,我怎样才能获得价值?我需要这些数据来计算每个月的方差。 @KamilZawistowski 您可以将其读入数组,但为此您需要共享您的工作表数据,以便我们更好地理解 drive.google.com/open?id=0B5PmrbRk4Uarai1fQk9SLWNrb1U 你有示例工作簿。假设我想要文件管理器客户号。 ,,Zakupy'' 工作表中的 1126 和 1100,然后我想计算篮子成本的差异。 @KamilZawistowski 这不是它在 SO 上的工作方式,您可以将相关数据的屏幕截图分享到您的帖子中。 @KamilZawistowski 那么您要从数据中的哪一列计算方差?【参考方案2】:

您可以使用SpecialCells 来获取:

Sheet1.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Address

【讨论】:

就在我之后几秒钟......你潜伏在这个;)

以上是关于VBA:如何从过滤后的数据中获取当前区域?的主要内容,如果未能解决你的问题,请参考以下文章

VBA中的Excel过滤和复制

如何从 jQuery Datatable 中获取过滤后的数据结果集

VBA中如何获取一个表格的行数和列数

使用 VBA 将过滤后的数据复制到另一个工作表

如何在 Angular 中获取过滤后的 ngRepeat 数组的长度?

在 Excel VBA 中,如何保存/恢复用户定义的过滤器?