Excel VBA - 一次循环一列

时间:2015-07-23 17:13:45

标签: excel vba loops foreach nested-loops

我正在尝试遍历Sht1 (B2:B138)中的每一行,并设置一个"输入"单元格Sht2 (A1)到该循环中的每个项目,一次一个。然后,"输出中的值"单元格Sht2 (N7)将被复制回Sht1 (C2:C138)

例如:

那么

Sht2 (A1) = value in Sht1 (B2) Sht1 (C2) = value in Sht2 (N7)

重复

那么

Sht2 (A1) = value in Sht1 (B3) Sht1 (C3) = value in Sht2 (N7)

一遍又一遍,直到它到达列表的底部。最后我可能需要在Sht1 ColB中扩展列表,所以我一直在努力让它动态评估所需的迭代次数。

我在下面尝试的代码为我提供了所有正确的"输出"但它们不会在Sht2 ColC中的正确单元格中结束。请看下面。我研究并发现this Q/A有用并用它来影响代码。我提前感谢您的帮助。 My workbook如果您需要查看它。

Sub fnDescCalc()
'Define the objects

Dim wb As Workbook
Dim Framework As Worksheet
Dim SumFramework As Worksheet
Dim colB As Long
Dim colC As Long
Dim LastcolC As Integer
Dim LastcolB As Long

'Set the Variables
Set wb = ThisWorkbook
Set Framework = wb.Sheets("Framework")
Set SumFramework = wb.Sheets("Sum_Framework")

LastRowcb = Framework.Range("B:B").Find("*", searchdirection:=xlPrevious).Row
colB = 2

LastcolC = 138

'This is the beginning of the main loop
For colC = 2 To LastcolC

'This is the beginning of the nested loop
    For colB = 2 To LastcolB
    SumFramework.Range("A1") = Framework.Range("B" & colB).Value
    colB = colB + 1

Framework.Range("C" & colC) = SumFramework.Range("N7").Value
colC = colC + 1

Next colB

Next colC

End Sub

1 个答案:

答案 0 :(得分:1)

您提供的解释和代码并不匹配。所以我知道你想要做以下事情:

输入2个值。搜索值(SumFramework.Range(“A1”))和输入值(SumFramework.Range(“N7”))。现在,与“搜索”值匹配的工作表“框架”B列中列表中的每个项目都会在C列中分配输入值。如果我的理解错误,请详细说明:)

1。 在你的代码中,LastcolB永远不会被初始化,因此它将为0并且循环永远不会执行。

2。 您只需要一个循环来执行[编辑:您在评论中描述]:

MaxRow = Framework.Range("B:B").Find("*", searchdirection:=xlPrevious).Row
'Alternative if the last row is the actual last row and .Row < 1000:
'MaxRow = Framework.Range("B1000").End(xlUp).Row


For rowB = 2 To MaxRow
    SumFramework.Range("A1") = Framework.Range("B" & rowB).Value
    Framework.Range("C" & rowB) = SumFramework.Range("N7").Value
Next rowB
  1. “For ... Next”自动计数。使用colB = colB + 1,您可以跳过每个部分行。