【问题标题】:VBA Macro Checking range for multiple Criteria多个条件的 VBA 宏检查范围
【发布时间】:2015-12-09 01:50:00
【问题描述】:

我编写了一个宏来检查一个值的选择,如果它适合那个值,就用别的东西替换它。好的,当它只是一个值时,这很容易。当我尝试添加多个值时,我不断遇到不同的错误。希望你们中的一个人能指出我遗漏的地方:)

 Sub PTranslate()
 Dim cell As Range
 On Error Resume Next
 For Each cell In Selection
 If cell = "DZC" Or "0654548" Then
 cell.Value = "Douglas C"
      ElseIf cell = "RLP" Or "0623344" Then
 cell.Value = "Ryan P"
 End If
 Next


 End Sub

【问题讨论】:

  • 值得一提的是,我一开始只有一个条目,但计划长到 2-300 个。

标签: excel selection vba


【解决方案1】:

使用“选择案例”来获得长列表:

For Each cell In Selection
    Select Case cell.Value
        Case "DZC", "0654548"
             cell.Value = "Douglas C"
        Case "RLP", "0623344"
             cell.Value = "Ryan P"
        ...
        Case Else
             ...
     End Select
Next cell

【讨论】:

  • 试过了,没用。不过,我稍后再谈。用户错误是一回事:)
【解决方案2】:

简短的回答是这样的。正确的语法是在多个条件If 语句中每次引用对象。

 Dim cell As Range, sVal as String

 For Each cell In Selection

    sVal = Cstr(cell.Value2)

    If sVal = "DZC" Or sVal = "654548" Then 'sVal = "0654548" Then
        cell.Value = "Douglas C"
    ElseIf sVal = "RLP" Or sVal = "623344" Then 'sVal = "0623344" Then
        cell.Value = "Ryan P"
    End If

 Next

如果您将有许多查找值,最好在工作簿中创建一个列表并将单元格值替换为查找列表中的关联值。你也可以使用Select Case,但如果有大约 300 个选项,那甚至会很丑。

假设您在 A1:B300 范围内的 mySheet 中构建您的列表,那么代码将是:

Dim cell As Range

 For Each cell In Selection

    If Not IsErr(Application.WorksheetFunction.VLookup(cell.Value2, Sheets("mySheets").Range("A1:B300"), 2, 0)) Then

        cell.Value = Application.WorksheetFunction.VLookup(cell.Value2, Sheets("mySheets").Range("A1:B300"), 2, 0)

    End If

 Next

【讨论】:

  • 我自己遇到了同样的问题-它只会过滤第一个选择。这次它甚至没有打扰第一个 IF 标准的 OR 部分
  • 查看我编辑的代码。我有一个想法可能会有所帮助。我也看到了您的示例数据。您确定前导零将始终存在(因为它不在您的示例数据中)。如果不是,请去掉 vba If 语句中的前导零。
  • 发布了结果的屏幕截图。我回家后会再搞砸一些:)
  • 这似乎是一个领先的“0”问题。
  • @DougCoats - 不需要设置sValue。我补充说,在我看到您的数据集之前,我添加了一种预感,这是数据与书面代码转换的方式。你可以离开它。它不会受到伤害,在某种程度上它更干净,更容易阅读。我不知道您的数据是如何填充的,但是如果您在数据进入之前将单元格格式化为文本,它将保留任何前导 0。
猜你喜欢
  • 2018-09-27
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多