首页 文章

如何使用Excel VBA中循环中的列表中的名称替换单元格中的数字

提问于
浏览
0

在我不断寻求为工作场所安排随叫随到的日程安排工作的过程中,我遇到了另一个道路颠簸 .

在我看到这样的情况之前,我得到了很好的帮助,安排了一个编号的时间表:

Picture of numbered schedule

这些数字中的每一个都对应于列表中的特定名称,右侧为绿色,称为“个人” .

现在我想用绿色列表中的名称替换这些数字 .

我尝试这样做,通过选择带有数字的单元格范围,然后循环使用列表中的名称替换所有单个数字:

Sub FindReplaceAllTest(numOfEmployees As Integer)

Dim sht As Worksheet
Dim fnd As Integer
Dim rplc As Variant

fnd = 1
rplc = ThisWorkbook.Sheets("Duty Roster").Cells("17, fnd + 1").Value

For Each sht In ActiveWorkbook.Worksheets

    Range("B2:F54").Select
    Selection.Replace What:=fnd, replacement:=rplc, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, _
        SearchFormat:=False, ReplaceFormat:=False

    If fnd < numOfEmployees Then
        fnd = fnd + 1
    ElseIf fnd = numOfEmployees Then
        fnd = 0
    End If

Next sht

End Sub

变量 numOfEmployees 收集在较早的SUB中,其中绿色列表中的名称被计数并传递到此变量中,这是为了创建编号列表的过程 .

不幸的是,它没有产生预期的结果 . 我在行上收到错误'1004':

rplc = ThisWorkbook.Sheets("Duty Roster").Cells("17, fnd + 1").Value

这似乎是由该行中的 fnd 变量引起的 . 当我取出 fnd 并用常规行引用替换它时,我得到如下结果:

"Fnd" switched out for "2": "rplc = ThisWorkbook.Sheets("Duty Roster").Cells("17, 2").Value"

即使我在行中加上“2”,我仍然得到列表的名称作为替代 .

2 回答

  • 0

    正确的sintax如下

    rplc = ThisWorkbook.Sheets(“Duty Roster”) . Cells(17,fnd 1).Value

    这将获得列“fnd 1”和第17行中单元格的值

    此外,你循环遍历工作表但从未实际使用它们,因为你既没有使用“sht”也没有使用“点”为任何范围对象添加前缀,以将其引用为“统治”sht . 如下:

    对于每个sht在ActiveWorkbook.Worksheets中

    sht.Range("B2:F54").Replace What:=fnd, replacement:=rplc, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, _
        SearchFormat:=False, ReplaceFormat:=False
    
  • 0

    来自这个:

    Schedule before numbers been replaced by the green list of employees

    这段代码:

    Sub FindReplaceAllTest(numOfEmployees As Integer)
    
    Dim n As Integer
    Dim fnd As Integer
    Dim rplc As String
    
    fnd = 1
    
        Do Until n = numOfEmployees + 1
    
            rplc = ThisWorkbook.Sheets("Duty Roster").Cells(fnd + 1, 17).Value
    
            Range("B2:F54").Select
            Selection.Replace What:=fnd, replacement:=rplc, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False,_
            SearchFormat:=False, ReplaceFormat:=False
    
            n = n + 1
            fnd = fnd + 1
        Loop
    
    End Sub
    

    产生了这些结果:

    Schedule after numbers been replaced by the green list of employees

    非常感谢user3598756为我提供了解决这个问题的方法!她/他指出我正在编写我不需要的代码中的部分所以我用 Do Until Loop 切换了我的 For Each Loop 并用 n 替换了 sht 变量(并根据我的需要重写了它们)以使其工作 . 他还让我意识到我混淆了列/行引用的位置 . 编辑之后,我的代码也开始产生我想要的结果 .

    所以我的代码现在做的是将变量 n 与变量 numOfEmployees + 1 进行比较,以确保当 n >而不是 numOfEmployees 时循环停止 . 确保包含所有数字 . 此外,循环在我指定的范围内查看 fnd ,并使用变量 rplc 中找到的单元格中的值切换该数字的所有实例 .

    这是我的(我希望是正确的,我对此很新)简化了对我所做的事情的回答 .

    非常感谢帮助!

相关问题