首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何循环遍历excel VBA宏中的行列

如何循环遍历excel VBA宏中的行列
EN

Stack Overflow用户
提问于 2009-07-15 00:52:06
回答 4查看 224.1K关注 0票数 9

Hi,我正在尝试创建一个宏,该宏具有一个循环,该循环为每个站点复制一个向下列1 (VOL)和另一个向下列2(容量)的函数。到目前为止,这就是我所拥有的:

代码语言:javascript
复制
Sub TieOut()
    Dim i  As Integer
    Dim j As Integer

    For i = 1 To 3
        For j = 1 To 3
            Worksheets("TieOut").Cells(i, j).Value = "'=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A9,"m/dd/yyyy"),'ZaiNet Data'!$C$1:$C$39038,0), 4)"
        Next j
    Next i

End Sub

,我想要的图片如下:,您可以看到,我已经手动复制和粘贴了我的两个函数到每一列。我只需要一个能循环通过的宏。

我想被循环到每个站点的VOL列上的函数是:

代码语言:javascript
复制
=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A438,"M/DD/YYYY"),'ZaiNet Data'!$C$1:$C$39038,0), 4)

我想要循环的函数每个站点的容量列是:

代码语言:javascript
复制
=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A438,"M/DD/YYYY"),'ZaiNet Data'!$C$1:$C$39038,0), 5)

有人能帮忙吗?谢谢!

更新

*如何使循环自动运行,而不必手动将公式输入前两个单元格并单击宏?

此外,如何使循环在所有列/行中运行?(横向)*

我包括了两个屏幕截图来说明我的意思。下面是我的当前代码。

谢谢!

代码语言:javascript
复制
    Sub Loop3()
    Selection.Copy
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    ActiveCell.Offset(-1, 1).Select
    Selection.Copy
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    ActiveCell.Offset(0, -1).Select

    Dim i  As Integer
    Dim j As Integer
        With Worksheets("Loop")
            i = 1
            Do Until .Cells(10, i).Value = "blank"
                For j = 1 To 10
                    .Cells(j, i).Formula = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!E$7&TEXT(Loop!$A9,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),4)"
                    .Cells(j, i + 1).Formula = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!E$7&TEXT(Loop!$A9,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),5)"
                Next j
                i = i + 2
            Loop
    End With

    Selection.Copy
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    ActiveCell.Offset(-1, 1).Select
    Selection.Copy
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    ActiveCell.Offset(0, -1).Select

End Sub
EN

回答 4

Stack Overflow用户

发布于 2009-07-15 09:37:30

以下是我的建议:

代码语言:javascript
复制
Dim i As integer, j as integer

With Worksheets("TimeOut")
    i = 26
    Do Until .Cells(8, i).Value = ""
        For j = 9 to 100 ' I do not know how many rows you will need it.'
            .Cells(j, i).Formula = "YourVolFormulaHere"
            .Cells(j, i + 1).Formula = "YourCapFormulaHere"
        Next j

        i = i + 2
    Loop
 End With
票数 6
EN

Stack Overflow用户

发布于 2009-07-15 01:47:24

试试这个:

创建一个包含以下内容的宏:

代码语言:javascript
复制
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select

这个特定的宏将复制当前单元格(将光标放在要复制的VOL中),然后复制CAP单元格。

这仅仅是一个循环,因此您可以自动地将当前活动单元格(光标所在的位置)复制到1行。

只需将其放入For循环语句中,就可以执行x次。像这样:

代码语言:javascript
复制
For i = 1 to 100 'Do this 100 times
    Selection.Copy
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    ActiveCell.Offset(-1, 1).Select
    Selection.Copy
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    ActiveCell.Offset(0, -1).Select
Next i
票数 1
EN

Stack Overflow用户

发布于 2012-06-13 18:55:16

这个类似于@Wilhelm的解决方案。循环基于计算填充日期列所创建的范围自动进行。这是完全根据这里的对话和截图拍出来的。

请注意:这假设标题始终位于同一行(第8行)。更改第一行数据(向上/向下移动标题)将导致范围自动化中断,除非您编辑范围块以动态接收标题行。其他假设包括第一卷和容量公式列标题分别命名为“Vol.I”和"Cap“。

代码语言:javascript
复制
Sub Loop3()

Dim dtCnt As Long
Dim rng As Range
Dim frmlas() As String

Application.ScreenUpdating = False

'The following code block sets up the formula output range
dtCnt = Sheets("Loop").Range("A1048576").End(xlUp).Row              'lowest date column populated
endHead = Sheets("Loop").Range("XFD8").End(xlToLeft).Column         'right most header populated
Set rng = Sheets("Loop").Range(Cells(9, 2), Cells(dtCnt, endHead))  'assigns range for automation

ReDim frmlas(1)      'array assigned to formula strings
    'VOL column formula
frmlas(0) = "VOL FORMULA"
    'CAPACITY column formula
frmlas(1) = "CAP FORMULA"

For i = 1 To rng.Columns.count
If rng(0, i).Value = "Vol" Then         'checks for volume formula column
    For j = 1 To rng.Rows.count
        rng(j, i).Formula= frmlas(0)    'inserts volume formula
    Next j
ElseIf rng(0, i).Value = "Cap" Then     'checks for capacity formula column
    For j = 1 To rng.Rows.count
        rng(j, i).Formula = frmlas(1)   'inserts capacity formula
    Next j
End If
Next i

Application.ScreenUpdating = True

End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1128841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档