VBA-使用条件列表选择并清除或选择替换值

时间:2018-11-02 00:36:04

标签: excel vba replace

好的,我回来了。这次,我试图快速选择与单独列表中的值匹配的范围内的所有值,我的第一次迭代将清除无效ID的内容,而我的第二次迭代将选择这些值,然后替换它们具有相应的新值。

我问了另一个有关VBA的问题,并指出我曾尝试过自学并找到解决这些问题的资源,但人们似乎对我在问的问题感到不满,如果您至少可以指导我我可以学习到有关这些问题的地方(甚至在某个地方我可以学习基本逻辑并拥有可用功能的列表,而无需经历所有“如何制作第一个Excel VBA以解决没人关心的问题”)会很感激的)

无论如何,我试图观看一些视频,然后一起破解一些东西,但是很明显,他们使用的功能无法适应其他用途。这是我目前所拥有的:

Sub FilterElim()
    finalRow = Range("g2").End(xlDown).Row
    Range("A1").ClearContents _
        Action:= xlClearContents, _
        CriteriaRange: Range("Sheet4!B1:B10"), _
        Unique:= False
End Sub

因此,基于一些有用的问题,我正在进行编辑以包括示例和期望的结果

示例集: enter image description here

所需的最终结果:

enter image description here

我想我可能需要在ClearContents之前根据“标准”进行某种选择,但是我没有发现任何有关如何实现该目标的信息。谢谢,麻烦您了。

| Contractor   ID | Cont Name         | Proj 1 | Proj 2 | Proj 3 |   |   | Old ID | Reconciliation |
|-----------------|-------------------|--------|--------|--------|---|---|--------|----------------|
| C1001           | Boba Fet          | P1120  |        |        |   |   | P1001  | Void           |
| C1003           | Jules Winnfield   | P1031  | P1045  |        |   |   | P1002  | P1010          |
| C1002           | Dom Cobb          | P1001  |        |        |   |   | P1005  | Void           |
| C1010           | Patrick Verona    | P1020  | P1224  | P1251  |   |   | P1020  | Void           |
| C1007           | Matt Damon        | P1008  | P1005  | P1300  |   |   | P1045  | P1100          |
| C1004           | Ned Plimpton      | P1002  |        |        |   |   | P1224  | P1300          |
| C1020           | Derek Zoolander   | P1020  | P1290  |        |   |   |        |                |
| C1009           | Charles Marlow    | P1002  | P0090  |        |   |   |        |                |
| C1011           | Robert Jordan     | P1119  |        |        |   |   |        |                |
| C1015           | Perrin Aybara     | P1200  | P1224  |        |   |   |        |                |
| C1005           | Fuzzy Dunlop      | P1005  |        |        |   |   |        |                |
| C1008           | Thomas A Anderson | P1001  | P1000  |        |   |   |        |                |
|                 |                   |        |        |        |   |   |        |                |

1 个答案:

答案 0 :(得分:3)

是什么让您选择VBA解决方案? 不了解数据和预期结果就很难做很多事情。

非VBA选项:

=IFERROR(INDEX($G$2:$G$15,MATCH(A32,$F$2:$F$15,0)),B32)

enter image description here

对于VBA选项,您可以尝试:

Option Explicit

Sub update_id()

Dim D1 As Object: Set D1 = CreateObject("scripting.dictionary")
Dim R1 As Range: Set R1 = Range("A2:A32")
Dim R2 As Range: Set R2 = Range("E2:E15")
Dim Rtmp As Range

For Each Rtmp In R2
    D1(Rtmp.Value) = Rtmp.Offset(0, 1).Value
Next Rtmp

For Each Rtmp In R1
    If D1.exists(Rtmp.Value) Then Rtmp.Offset(0, 1) = D1(Rtmp.Value)
Next Rtmp

End Sub

进行以下设置:

enter image description here

同样,如果没有更好地了解您的数据和问题,就很难做到更加精确。