【问题标题】:Excel vba get dynamic range( fields) to create chartExcel vba获取动态范围(字段)以创建图表
【发布时间】:2013-12-25 14:48:05
【问题描述】:

Sheet2

我在 sheet1 中导出一个带有表格的 excel,并在 sheet2 中有一个图表, 但现在我有一个问题,表格是从存储过程生成的,字段:“2013/Q1 2013/Q2 2013/Q3 2013/Q4”是动态的,而且用户从网页中选择显示的统计值,现在,导出的图形(折线图),它的 X 轴包括我不需要字段(sheet2)的统计值,所以我编写 VBA 代码如下:

> Sheet2.ChartObjects("Chart 1").Activate
>     ActiveChart.ChartArea.Select
>      Sheets("Sheet1").Range("A1").Clear
>      ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1",Sheets("sheet1").Range("B1").End(xlDown).End(xlToRight).Address),
> PlotBy:= _
>        xlRows
>     ActiveWindow.Visible = False

我想得到“B1”到“E11”的范围(单元格是动态的,所以我们不能准确地得到单元格的位置), 并且行和列的所有标题字段和数据都是动态的,我该如何编写正确的VBA来做到这一点,谢谢 ps,对不起,英语不好

【问题讨论】:

    标签: vb.net excel vba


    【解决方案1】:

    在 VBA 中编写一个用于检测最后一列的 for 循环,假设列标题将始终位于第 1 行并且数据从 B 列开始:

    Sub FindRange()
    
    Dim i As Integer
    Dim rng As Range
    Range("B1").Select
    Set rng = Range(Selection, Selection.End(xlToRight)).Select
    Set rng = Range(Selection, Selection.End(xlToRight)).Select
    
    For i = 2 To Range(rng.Column & 1).Column
    
    Set rng = Range("A" & i)
        If rng.Value2 = "SUM" Then
            'We've found the end column i = 11
            Exit For
        End If
    
    Next i
    
    End Sub
    

    【讨论】:

    • 感谢您的想法,最后一列位于“E列”(动态,可能是F,G...列),因为无法显示统计信息,并且像“2013/”这样的字段Q3", 有 2 种类型,另一种类型如 "2013/4m",所以我想获取从 "B1" 到列 type1 或 type2 的最后一个地址的范围
    • 这就是为什么我两次显示Set rng = Range(Selection, Selection.End(xlToRight)).Select
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多