试图弄清楚下面的代码在做什么,但是不能弄清楚:
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”)中的表格:
答案 0 :(得分:1)
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\International\AcceptLanguage]
-您在这里有一个错字,它是Range(".." & Rows.Count).End(x1Up).Row
(xlUp
是柠檬水,而不是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