【问题标题】:VBA For loop within IF and For LoopIF 和 For 循环中的 VBA For 循环
【发布时间】:2021-07-30 04:56:50
【问题描述】:

我正在尝试编写一个宏来将管家的名字放在一个单元格中,如果他们被分配到那个类别的话。到目前为止,我编写了此代码,但它不起作用。我正在尝试获取它,以便如果一个工作表中的列的单元格与另一个工作表的单元格匹配,并且如果匹配,那么它将在单独的单元格中打印管家的姓名,以识别该类别由那个人。

工作表 Demetri 中的数字在 E27 到 E38 的范围内,我想查看工作表 Share_Dump 中 BE4 到 BE163803 范围内的单元格是否在 Demetri 工作表的范围内。

Sub steward_products()
Dim d, s As Worksheet

Set d = Worksheets("Demetri")
Set s = Worksheets("Share_Dump")

For i = 4 To 163803 Step 1
    For j = 27 To 38 Step 1
        If s.Cells(i, 3) = d.Cells(j, 5) Then
            s.Cells(i, 57) = "Demetri"
        End If
    Next j
Next i

【问题讨论】:

  • 我想你忘了解释问题是什么。
  • 顺便说一句:Dim d, s As Worksheet 表示Dim d As Variant, s As Worksheet - 你可能想要Dim d As Worksheet, s As Worksheet
  • 这是很多的迭代!从/向工作表单元格读取/写入可能是您在循环中可以做的最慢的事情;考虑利用Application.WorksheetFunction.Match 而不是嵌套循环......这表明=IF(ISERROR(MATCH($C4, 'Demetri'!$E$27:$E$38, 0), ""), "Demetri")Share_Dump 工作表的第57 列/第4 行中,然后一直填充到第163803 行就可以满足您的需要无需任何代码即可完成。

标签: excel vba for-loop if-statement


【解决方案1】:

请尝试此代码。我认为它会满足您的需求。

Option Explicit

Sub Steward_Products()
    ' 236

    ' use descriptive names and use the declarations to explain them
    ' use Option Explicit and capitalization to avoid typos
    Dim WsSteward   As Worksheet                ' Demetri
    Dim WsDump      As Worksheet                ' Share_Dump
    Dim Fnd         As Range

    Set WsSteward = Worksheets("Demetri")
    Set WsDump = Worksheets("Share_Dump")

    With WsDump
        ' presuming that columns 28:38 are not longer than column 27
        Set Fnd = .Range(.Cells(4, 27), .Cells(.Rows.Count, 27).End(xlUp)) _
                  .Resize(, 12)
        
        Set Fnd = Fnd.Find(WsSteward.Cells(5, "J").Value, _
                           LookIn:=xlValues, LookAt:=xlWhole)
    
        If Fnd Is Nothing Then
            MsgBox "Product """ & WsSteward.Cells(5, 10).Value & """ wasn't found.", _
                   vbInformation, "Invalid product description"
        Else
            .Cells(Fnd.Row, 57) = "Demetri"
        End If
    End With
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多