选择动态范围的单元格

时间:2019-08-27 05:06:16

标签: excel vba

我正在自动执行一个每周报告,该报告做了一些重复的工作来清理和清理数据集。在清理过程结束时,我运行了多个报告。

在上一份报告中,我正在汇总工作表“数据透视表”中数据透视表中的数据。我需要选择一个动态范围以在工作表“图表”上生成折线图。

我在选择动态范围时遇到了麻烦。我很喜欢创建图表部分。

我的数据透视表看起来像这样;

 |    A   | B | C | D | E | F | G | H | I | J
1|        |   |   |   |   |   |   |   |   |
2|        |Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Total
3|Duration| 3 | 3 | 2 | 1 | 2 | 3 | 4 | 5 | 23

数据集包括2017年,2018年和2019年的数据。

我仅过滤2019年数据。我们只想创建最近6个月的图表。因此,如果我在八月份运行报表,我希望脚本选择I2:D2,然后复制到剪贴板,以便粘贴到“图表”工作表中以生成折线图。

这是我的挑战;

第一次挑战-我需要选择要追溯到6个月(D2)的当前月份(I2)。

第二个挑战-假设我在三月份(D3)运行了该报告,脚本只能选择(D3:B3)

我想出了如何找到当月的单元格,选择它,然后将地址添加到变量中。

MyMonth = MonthName(Month(Date)) ' In this case: August

    With Worksheets("Pivot").Cells
        Set cellFound = .Find(MyMonth, LookIn:=xlValues)

        If Not cellFound Is Nothing Then
            cellFound.Select ' Selects I2
        End If
    End With

上面的操作符合我的期望,找到当月的单元格,选择单元格,然后将地址($ I $ 2)添加到变量中。我不知道从这里去哪里。

1 个答案:

答案 0 :(得分:0)

尝试一下:

1)将“数据透视表”工作表的VBA名称更改为“数据透视表”

enter image description here

2)复制此代码并将其粘贴到模块中,并逐步执行以查看其工作原理。

Sub SelectCells()

    Dim searchRange As Range
    Dim cellFound As Range

    Dim currentMonth As Single
    Dim firstMonth As Single
    Dim pastMonths As Single

    pastMonths = 6

    currentMonth = Month(Date) ' In this case: August
    firstMonth = WorksheetFunction.Max(currentMonth - pastMonths, 1)

    ' Select current month going back 6 months
    Pivot.Range("B3").Offset(0, firstMonth - 1).Select
    Pivot.Range("B3").Offset(0, currentMonth - 1).Select

    Pivot.Range(Pivot.Range("B3").Offset(0, firstMonth - 1), Pivot.Range("B3").Offset(0, currentMonth - 1)).Select

End Sub

一些建议: 一种。避免选择单元格(我仅向您演示) b。创建图表时,请将源设置为原始范围,而不要创建副本

注意:如果有帮助,请记住标记问题,以便其他人可以找到它们。