对于另一个范围内的单元格范围进行循环

时间:2018-09-13 06:41:54

标签: excel vba excel-vba

试图弄清楚下面的代码在做什么,但是不能弄清楚:

For Each c In Sheets("Control").Range("y3:y" & Range("y" & 
Rows.Count).End(xlUp).Row).Cells

Sheets("forecast").Range("a5") = c

我认为正在发生的事情:

c下设置为某个单元格,其中包含一个名称。在工作表控制的每个单元格的上部,从y3到末尾的范围,..然后开始混乱。接下来会发生什么:

Range(".." & Range(".." & Rows.Count).End(x1Up).Row).Cells

我该怎么读?

这是Sheets(“ Control”)中的表格:

enter image description here

2 个答案:

答案 0 :(得分:1)

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\International\AcceptLanguage]-您在这里有一个错字,它是Range(".." & Rows.Count).End(x1Up).RowxlUp是柠檬水,而不是l)。使用1可以避免此类错误!

无论如何,它的含义是这样的:在列Option Explicit中,以您的情况".."为例,转到底部的最后一行。然后上升,直到遇到第一个非空白单元格并获得其y

因此,如果您的值在Row范围内,那么从底部开始将在第20行结束,并为您提供Y1:Y20作为行号。

答案 1 :(得分:0)

有两种方法。您可以通过将其导入为范围对象或将其保存为数组来完成此操作。

首先:作为范围

Sub test()
    Dim Ws As Worksheet
    Dim rngDB As Range, c As Range
    Set Ws = Sheets("Control")
    With Ws
        Set rngDB = .Range("y3", "y" & .Range("y" & Rows.Count).End(xlUp).Row)
    End With
        For Each c In rngDB
            Sheets("forecast").Range("a5") = c
            Sheets("forecast").Range("b5") = c.Offset(0, 1)

End Sub

第二:作为变体数组

Sub test2()
    Dim Ws As Worksheet
    Dim rngDB As Range, c As Range
    Dim vDB
    Dim i As Long
    Set Ws = Sheets("Control")
    With Ws
        Set rngDB = .Range("y3", "z" & .Range("y" & Rows.Count).End(xlUp).Row)
        vDB = rngDB '<~~ get data from rngdb to array vDB
    End With
        For i = 1 To UBound(vDB, 1)
            Sheets("forecast").Range("a" & i + 4) = vDB(i, 1)
            Sheets("forecast").Range("b" & i + 4) = vDB(i, 2)

End Sub