【问题标题】:Excel VBA AutoFill dynamic range and increment by 10Excel VBA 自动填充动态范围并以 10 为增量
【发布时间】:2015-01-31 12:04:11
【问题描述】:

有没有办法让自动填充增加 10 而不是 1?以下代码在我的工作表中起作用。用户(地质学家)在 B1 中定义起始站号,在 B2 中定义结束站号。运行宏并从 C5 开始,该列填充有从开始到结束站的站号。但是,只需要每 10 个站点收集一次数据,我还没有弄清楚如何将其合并到我的代码中。而不是 1000、1001、1002...等,我想要 1000、1010、1020...

Sub StationFill()

Dim taskStationEnd As Long
Dim taskStationBegin As Long

taskStationBegin = Range("B1").Value
taskStationEnd = Range("B2").Value

With Worksheets("Data")
    .Columns(3).ClearContents
    Set SourceRange = .Range("C5")
    SourceRange.Value = taskStationBegin
    Set fillRange = .Range(SourceRange, _
      Cells(SourceRange.Row + taskStationEnd - taskStationBegin, SourceRange.Column))
    SourceRange.AutoFill Destination:=fillRange, Type:=xlFillSeries
End With

End Sub

(第一次发帖。不确定我的格式是否正确,代码换行符是否在正确的位置)

【问题讨论】:

    标签: excel vba autofill


    【解决方案1】:

    试试这个:

    Sub marine()
        Dim taskStationEnd As Long
        Dim taskStationBegin As Long
        Dim SourceRange As Range
    
        Const interval As Long = 10 '<~~ this is your interval
    
        With Sheets("Sheet1") '<~~ change to suit
            taskStationBegin = .Range("B1").Value
            taskStationEnd = .Range("B2").Value
            Set SourceRange = .Range("C5")
            SourceRange = taskStationBegin
            SourceRange.Offset(1, 0) = taskStationBegin + interval
            SourceRange.Resize(2).AutoFill _
                SourceRange.Resize(((taskStationEnd - taskStationBegin) / interval) + 1) _
                , xlFillSeries
        End With
    End Sub
    

    【讨论】:

    • 谢谢!这很好用。我需要更多地考虑 SourceRange Offset 和 Resize 是如何工作的,以完全理解您的解决方案,但很高兴有一些东西可以分开和理解,而不是我拼凑起来的东西。
    • @AnnaNmty Offset 就像您按箭头键一样工作。所以.Offset(1, 0) 意味着您将目标单元格从引用中移出 1 行,即您的 Range Object。调整大小就像在按住 Shift 的同时按箭头键。 .Resize(2) 表示您将选择扩展到 2 行。我省略了 column 参数,因为不需要调整列数。如果它是相反的方式,那么你省略这样的行参数.Resize(, 2)
    • 我现在有一个类似的任务,只是这次自动填充一行而不是一列。根据我对您的解释的理解,我将偏移量更改为.Offset(0, 1),并将我的调整大小更改为.Resize(, 2)。我收到“Range 类的 AutoFill 方法失败”的错误描述。任何有关如何纠正此问题的帮助表示赞赏。
    • @AnnaNmty 啊,你几乎拥有它。您只需要将这一行也将SourceRange.Resize(((taskStationEnd - taskStationBegin) / interval) + 1) 更改为SourceRange.Resize(, ((taskStationEnd - taskStationBegin) / interval) + 1)
    • 谢谢!这让我发疯了!
    【解决方案2】:

    我已尝试使用 Excel 2010,并且有一个可用的增量值(步骤)。

    Range("A1:A26").DataSeries Rowcol:=xlColumns, Type:=xlLinear, **Step:=10**
    

    也许对你有帮助。

    亲切的问候, 克里斯托夫

    【讨论】:

    • 我无法弄清楚如何让 Step 为我的任务工作,但感谢您让我知道它的存在!我有一些阅读和学习要做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2014-03-26
    • 2010-12-04
    • 2019-06-16
    • 1970-01-01
    相关资源
    最近更新 更多