循环遍历表中的行并将单元格值分配给命名变量

时间:2016-07-17 02:06:55

标签: excel-vba excel-2010 vba excel

第一个问题是这样的。

我正在尝试创建一个循环,它将通过表中的行来工作,并将各列的单元格值分配给声明的变量。 计划是在逻辑语句中使用这些变量并使用命名范围输入单元进行计算,然后将输出传输到工作表,在工作表中它将构成数据透视表的基础。

我正在使用的遗留工作簿模板有一堆vlookup,if语句等,没有命名范围;它是杂乱的,有人插入了列/行,打破了一些公式。

几年前我在使用MSAccess查询和vba做了类似的事情,但是从那时起或者在excel中都没有做太多的vba。

到目前为止,它添加到MSDN参考我发现以下有用 https://stackoverflow.com/a/21490552https://stackoverflow.com/a/12497229/6598860

'Declare variables
Dim Var1 As String    'To store Value from Table Column "Col1"
Dim Var2 As String    'To store Value from Table Column "Col2"
Dim Var3 As Variant    'To Store Value from Table Column "Date"
Dim SD As String    'To Store Value from Named Input Cell "StartDate"
Dim ED As String    'To Store Value from Named Input Cell "EndDate"
Dim counter As Integer    'Counter for pasting to row in worksheet "Dump"

'Set Date Range
SD = Range("StartDate").Value
ED = Range("EndDate").Value

'Set Counter
counter = 1

'Loop through rows in table "tblMyData"on Worksheet "Data" and
'assign values to variables (this bit is breaking down)
Dim lo As Excel.ListObject
Dim lr As Excel.ListRow
Set lo = Worksheets("Data").ListObjects("tblMyData")
For Each lr In lo.ListRows
    Var1 = Range(lr.Range, lo.ListColumns("Col1").Range).Value
    Var2 = Range(lr.Range, lo.ListColumns("Col2").Range).Value
    Var3 = Range(lr.Range, lo.ListColumns("Date").Range).Value

    'Logic Statement e.g.
    If SD > Var3 > ED Then
        Worksheets("Dump").Activate
        Cells(counter, 1).Value = Var1 * Var2
        Cells(counter, 2).Value = Var3
    Else

    End If
Next

我将用更具描述性的内容替换变量名称和列名称,但希望这说明了我想要实现的目标。 任何帮助或建议将不胜感激。 感谢

2 个答案:

答案 0 :(得分:2)

更改

Range(lr.Range, lo.ListColumns("Col1").Range).Value

Intersect(lr.Range, lo.ListColumns("Col1").Range).Value

我是如何在列和行的交叉处引用单个单元格的。

答案 1 :(得分:0)

我不确定这是否是唯一的错误,但我会用下面的代码替换底部的IF:

'Logic Statement e.g.
If SD > Var3 And Var3 > ED Then
    With Worksheets("Dump")
        .Cells(counter, 1).Value = Var1 * Var2
        .Cells(counter, 2).Value = Var3
    End With
Else
    'if you are not doing anything with the Else you can just remove it
End If