首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Excel VBA中将单元格中的数字替换为循环中列表中的名称

如何在Excel VBA中将单元格中的数字替换为循环中列表中的名称
EN

Stack Overflow用户
提问于 2016-08-15 15:55:28
回答 2查看 451关注 0票数 0

在我不断追求让工作变得更轻松的过程中,我遇到了另一个障碍。

我真的得到了很大的帮助,在安排一个编号的时间表之前,它看起来像这样:

Picture of numbered schedule

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

现在我想用绿色列表上的名字用一个循环替换这些数字。

我试着这样做,用数字选择单元格的范围,然后循环用列表中的名称替换所有单独的数字:

代码语言:javascript
复制
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‘:

代码语言:javascript
复制
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“,我仍然会得到列表的名称作为替代。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-15 16:21:28

正确的sintax如下所示

rplc =ThisWorkbook.Sheets(“值班表”).Cells(17,fnd + 1).Value

这将得到"fnd+1“列和第17行中的单元格的值

此外,您正在遍历工作表,但实际上从未使用过它们,因为您既没有使用" sht“,也没有在任何range对象前加上一个”点“来引用”统治“sht。如下所示:

对于ActiveWorkbook.Worksheets中的每个sht

代码语言:javascript
复制
sht.Range("B2:F54").Replace What:=fnd, replacement:=rplc, _
    LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, _
    SearchFormat:=False, ReplaceFormat:=False
票数 0
EN

Stack Overflow用户

发布于 2016-08-15 17:39:07

来自以下内容:

Schedule before numbers been replaced by the green list of employees

这段代码:

代码语言:javascript
复制
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 > than numOfEmployees时循环停止。确保所有的数字都包含在内。此外,该循环查看我指定的范围内的fnd,并用在变量rplc处找到的单元格中的值替换出该数字的所有实例。

这就是我(我希望是正确的,我是个新手)对我所做的事情的简单回答。

非常感谢你的帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38951304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档