[英]Loop through Rows in Table and assign cell value to named variable
第一個問題就是這樣。
我正在嘗試創建一個循環,該循環將以遍歷表中的行的方式工作,並將各個列的單元格值分配給聲明的變量。 計划是在具有指定范圍輸入單元的邏輯語句和計算中使用這些變量,然后將輸出傳輸到工作表,在此它將構成數據透視表的基礎。
我正在使用的舊工作簿模板具有大量的vlookups,if語句等,沒有命名范圍。 它太亂了,有人插入了破壞某些公式的列/行。
幾年前,我在MSAccess查詢和vba上做過類似的事情,但是自那時以來或在excel中都沒有做太多的vba,也沒有做過。
到目前為止,除了MSDN參考之外,我發現以下有用的https://stackoverflow.com/a/21490552和https://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
我將用更具描述性的名稱替換變量名和列名,但希望這可以說明我正在嘗試實現的目標。 任何幫助或建議,將不勝感激。 謝謝
更改
Range(lr.Range, lo.ListColumns("Col1").Range).Value
至
Intersect(lr.Range, lo.ListColumns("Col1").Range).Value
。
這就是我引用列和行的交點處的單個單元格的方式。
我不確定這是否是唯一的錯誤,但是我將用下面的代碼替換底部的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.