Excel 在函数中使用for循环变量
问题:是否可以在函数中使用for循环变量 我有以下代码:Excel 在函数中使用for循环变量,excel,vba,Excel,Vba,问题:是否可以在函数中使用for循环变量 我有以下代码: For Each hcell In hRng '(something irrelevant happens) For Each tCell In tRng If tCell = "Name1" Then RowNum = tWb.Sheets("Sheet_" & hcell).Cells(Rows.
For Each hcell In hRng
'(something irrelevant happens)
For Each tCell In tRng
If tCell = "Name1" Then
RowNum = tWb.Sheets("Sheet_" & hcell).Cells(Rows.Count, 2).End(xlUp).Row
EmpCol = 1 + tWb.Sheets("Sheet_" & hcell).Cells(1, 1).End(xlToRight).Column
tWb.Sheets("Sheet_" & hcell).Cells(1, EmpCol) = "Name1"
For i = 2 To RowNum
tWb.Sheets("Sheet_" & hcell).Cells(i, EmpCol) = Application.IfNa(Application.VLookup(hcell & tWb.Sheets("Sheet_" & hcell).Cells(i, 2), _
sheetDiWs.Range("A2:I" & sheetDiWs.Cells(Rows.Count, 1).End(xlUp).Row), 3, False), "")
Next i
ElseIf tCell = "Name2" Then
'(same process as above, but different name, different lookup column)
ElseIf tCell = "Nam3" Then
'(same process: different name, different lookup column)
End If
Next tCell
Next hCell
这是代码中不断重复的部分,我在考虑使用函数,而不是多次使用相同的代码:
RowNum = tWb.Sheets("Sheet_" & hcell).Cells(Rows.Count, 2).End(xlUp).Row
EmpCol = 1 + tWb.Sheets("Sheet_" & hcell).Cells(1, 1).End(xlToRight).Column
tWb.Sheets("Sheet_" & hcell).Cells(1, EmpCol) = "Name1"
For i = 2 To RowNum
tWb.Sheets("Sheet_" & hcell).Cells(i, EmpCol) = Application.IfNa(Application.VLookup(hcell & tWb.Sheets("Sheet_" & hcell).Cells(i, 2), _
sheetDiWs.Range("A2:I" & sheetDiWs.Cells(Rows.Count, 1).End(xlUp).Row), 3, False), "")
Next i
这里的问题是变量hcell值来自第一个FOR循环
有什么方法可以在我的(公共)函数中使用当前的hcell值吗?实际上,您更愿意创建一个过程(sub)而不是函数,并将所需的变量作为参数提交
Option Explicit
Sub test()
For Each hCell In hRng
'(something irrelevant happens)
For Each tCell In tRng
If tCell = "Name1" Then
DoRepeatingJob tCell, hCell.Value, tWb, sheetDiWs
ElseIf tCell = "Name2" Then
'(same process as above, but different name, different lookup column)
ElseIf tCell = "Nam3" Then
'(same process: different name, different lookup column)
End If
Next tCell
Next hCell
End Sub
Public Sub DoRepeatingJob(ByVal tCell As String, ByVal hCell As String, ByVal tWb As Workbook, sheetDiWs As Worksheet)
Dim RowNum As Long
RowNum = tWb.Sheets("Sheet_" & hCell).Cells(tWb.Rows.Count, 2).End(xlUp).Row
Dim EmpCol As Long
EmpCol = 1 + tWb.Sheets("Sheet_" & hCell).Cells(1, 1).End(xlToRight).Column
tWb.Sheets("Sheet_" & hCell).Cells(1, EmpCol) = tCell
Dim i As Long
For i = 2 To RowNum
tWb.Sheets("Sheet_" & hCell).Cells(i, EmpCol) = Application.IfNa(Application.VLookup(hCell & tWb.Sheets("Sheet_" & hCell).Cells(i, 2), _
sheetDiWs.Range("A2:I" & sheetDiWs.Cells(Rows.Count, 1).End(xlUp).Row), 3, False), "")
Next i
End Sub
但实际上,如果代码是您发布的代码,您不需要这些
ElesIfs
,只需要调整这一行tWb.Sheets(“Sheet_”&hCell.Cells(1,EmpCol)=tCell
,因此它需要变量tCell
:
Sub test()
For Each hCell In hRng
'(something irrelevant happens)
For Each tCell In tRng
If tCell = "Name1" Or tCell = "Name2" Or tCell = "Name3" Then
Dim RowNum As Long
RowNum = tWb.Sheets("Sheet_" & hCell).Cells(tWb.Rows.Count, 2).End(xlUp).Row
Dim EmpCol As Long
EmpCol = 1 + tWb.Sheets("Sheet_" & hCell).Cells(1, 1).End(xlToRight).Column
tWb.Sheets("Sheet_" & hCell).Cells(1, EmpCol) = tCell
Dim i As Long
For i = 2 To RowNum
tWb.Sheets("Sheet_" & hCell).Cells(i, EmpCol) = Application.IfNa(Application.VLookup(hCell & tWb.Sheets("Sheet_" & hCell).Cells(i, 2), _
sheetDiWs.Range("A2:I" & sheetDiWs.Cells(Rows.Count, 1).End(xlUp).Row), 3, False), "")
Next i
End If
Next tCell
Next hCell
End Sub
有点不清楚,但可以创建一个函数,将
hcell
变量传递给它,让它使用。。。这就是你要问的吗?实际上你要创建一个子函数而不是函数。