[英]setting dynamic range vba
我一直在網絡上搜索,原因是稍后提到的我的范圍無法使用,但仍然很茫然。 任何幫助是極大的贊賞!
我要嘗試做的是根據可能移動的最后一行設置范圍(我會導入數據,並且數據每增長一周)。 但是,當我到達Set ExpenseNameRange時,由於某種原因,它並不認為它是一個范圍。
我需要它稍后用於sumproduct公式中的范圍。
下面是我的代碼。 任何幫助是極大的贊賞!
Dim Profitability As Worksheet
Dim Time As Worksheet
Dim Expense As Worksheet
Dim ExpenseValueRange As Range
Dim ExpenseNameRange As Range
Dim ExpenseDateRange As Range
Dim e As Integer
Dim d As Integer
Set Carryover = ThisWorkbook.Worksheets("2016 Carryover Forecast")
Set Profitability = ThisWorkbook.Worksheets("Profitability")
Set Time = ThisWorkbook.Worksheets("SYNC Time")
Set Expense = ThisWorkbook.Worksheets("SYNC Expense")
finalrowexpense = Expense.Range("A100000").End(xlUp).Row
**Set ExpenseNameRange = Expense.Range(Cells(2, 12), Cells(finalrowexpense, 12))**
Set ExpenseDateRange = Expense.Range(Cells(2, 19), Cells(finalrowexpense, 19))
Set ExpenseValueRange = Expense.Range(Cells(2, 23), Cells(finalrowexpense, 23))
For e = 37 To 63
employeename = Carryover.Cells(e, 33).Value
For d = 34 To 41
If employeename <> "" Then
ExpenseSum = Application.WorksheetFunction.SumProduct(Month(ExpenseDateRange) = Month(Cells(35, d)), ExpenseNameRange = employeename)
ExpenseSum = employeename.Offset(0, d).Value
考慮:
With Expense
Set ExpenseNameRange = Range(.Cells(2, 12), .Cells(finalrowexpense, 12))
Set ExpenseDateRange = Range(.Cells(2, 19), .Cells(finalrowexpense, 19))
Set ExpenseValueRange =Range(.Cells(2, 23), .Cells(finalrowexpense, 23))
End With
因為Cells()
本身引用ActiveSheet。
編輯#1:
另外,您必須將Cells()
與SUMPRODUCT()對齊 。
編輯#2:
如果Cells()
合格,則Range()
不必為:
Sub dural()
Dim r As Range
Sheets("Sheet1").Activate
Sheets("Sheet1").Select
With Sheets("Sheet2")
Set r = Range(.Cells(1, 1), .Cells(2, 2))
MsgBox r.Parent.Name
End With
End Sub
謝謝你的回答! 我設法跟蹤兔子洞足夠遠,並提出了其他可行的方法。 根據我的閱讀,Sumifs似乎比sumproduct更好。 Sumif不需要數組或任何其他特殊因素。
如果有人感興趣,這是我的循環代碼。
Sub Organize_Expenses()
Dim Carryover As Worksheet
Dim Profitability As Worksheet
Dim Time As Worksheet
Dim Expense As Worksheet
Dim ExpenseValueRange As Range
Dim ExpenseNameRange As Range
Dim ExpenseMonthRange As Range
Dim ExpenseYearRange As Range
Dim VendorNameRange As Range
Dim e As Integer
Dim d As Integer
Dim a As Integer
Dim b As Integer
Set Carryover = ThisWorkbook.Worksheets("2016 Carryover Forecast")
Set Profitability = ThisWorkbook.Worksheets("Profitability")
Set Time = ThisWorkbook.Worksheets("SYNC Time")
Set Expense = ThisWorkbook.Worksheets("SYNC Expense")
finalrowexpense = Expense.Range("A100000").End(xlUp).Row
Set ExpenseNameRange = Expense.Range("L2:L" & finalrowexpense)
Set ExpenseMonthRange = Expense.Range("AC2:AC" & finalrowexpense)
Set ExpenseValueRange = Expense.Range("w2:w" & finalrowexpense)
Set ExpenseYearRange = Expense.Range("AD2:AD" & finalrowexpense)
For d = 1 To 8
For e = 37 To 56
Employeename = Carryover.Cells(e, 33).Value
If Employeename <> "" Then
ExpenseSum = Application.WorksheetFunction.SumIfs(ExpenseValueRange, ExpenseNameRange, Employeename, ExpenseMonthRange, d, ExpenseYearRange, "2016")
Carryover.Cells(e, 33).Offset(0, d).Value = ExpenseSum
End If
Next e
Next d
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.