如何在选定的单元格内查找并替换多个值?

如何在选定的单元格内查找并替换多个值?

我想在 Excel 中对某个范围内的多个值运行查找和替换,其中的值来自 2 列:A 为原始字符串;B 为替换字符串。我已经找到了一个可以工作的宏(感谢 nixda),但无法处理原始字符串中某些较长值之间的破折号。

理想情况下,我希望能够只在我选择的范围上运行它。如果我还能选择查找范围,那就更好了。

以下是原始值和替换值列的示例值:

原始值列:

T1-D7-F2-F3-    
T1-D7-F2-F3-C33    
U4 U5 Q2 Q4    
U3-Q7.U1    
R42-43-22-23-

重置价值列:

T1,D7,F2,F3    
T1,D7,F2,F3,C33    
U4,U5,Q2,Q4    
U3,Q7,U1    
R42,R43,R22,R23

更新以回应 Gary 学生的回答

“数据”选项卡 A 列中的值:

1000PF CAP
4 SCREWS
D21 D22 - 709
D4-U3-RV3-Q2-U3
D7 - 00004224
D7 - 0004224
D7 - 004224
D7-F2-C33-F3-U6
D7-F3-J1
END PLATE
END PLATES
F2 F3 - 219
F2-F3-T1
Q11-Q3-J2-J9-
Q2 Q10 U12
Q2 Q3 Q10 Q11
Q2 Q3 Q11 Q10
Q2- Q4- U4- U5
Q2-Q5-Q8-Q10
Q3-Q11.R95
Q5-C10-C35
Q5-C19

“tabl”选项卡中的值,A列将与上面的相同

“tabl”选项卡 B 列中的值(替换值):

1000PF_CAP
4SCREWS
D21,D22,000709
D4,U3,RV3,Q2,U3
D7,004224
D7,004224
D7,004224
D7,F2,C33,F3,U6
D7,F3,J1
END_PLATE(S)
END_PLATE(S)
F2,F3,000219
F2,F3,T1
Q11,Q3,J2,J9
Q2,Q10,U12
Q2,Q3,Q10,Q11
Q2,Q3,Q11,Q10
Q2,Q4,U4,U5
Q2-Q5-Q8-Q10
Q3,Q11,R95
Q5,C10,C35
Q5,C19

运行宏后,我得到了以下结果,而不是我期望的结果:

1000PF_CAP CAP
4SCREW(S)S
D21,D22 - 709
D4,U3,RV3-Q2-U3
D700004224
D70004224
D7004224
D7,F2-C33-F3-U6
D7,F3-J1
END_PLATE(S)
END_PLATE(S)S
F2,F3 - 219
F2,F3-T1
Q11-Q3-J2,J9-
Q2,Q10 U12
Q2 Q3 Q10,Q11
Q2,Q3,Q11 Q10
Q2,Q4- U4,U5
Q2-Q5Q8-Q10
Q3,Q11.R95
Q5C10,C35
Q5C19

有任何想法吗?


编辑

跑步后这个宏要替换值,我对以下值有疑问:

左下方列 = 查找列 A 和 B 具有相同的值(不应改变,除了 R 3 应该变成 R3)。

右下方=运行宏后的结果。

Q?  Q?
Q1  Q?
Q2  Q?
Q3  Q?
Q4  Q?
Q5  Q?
Q6  Q?
Q7  Q?
Q8  Q?
Q9  Q?
QR? QR?
R 3 R?
R?  R?
R0  R?
R1  R?
R2  R?
R3  R?
R4  R?
R5  R?
R6  R?
R7  R?
R8  R?
R9  R?
RE  R?
RV  R?

答案1

这是一个小示例宏。翻译表位于名为“tabl”的选项卡中,要编辑的数据位于名为“data”的选项卡中:

Sub ChangeValues()
    Dim N As Long, L As Long
    Dim rLook As Range
    Sheets("tabl").Select
    N = Cells(Rows.Count, "A").End(xlUp).Row
    aryA = Range("A1:A" & N)
    aryB = Range("B1:B" & N)
    Sheets("data").Select
    Set rLook = Application.InputBox(Prompt:="Select replacement range", Type:=8)
    For L = 1 To N
        rLook.Replace aryA(L, 1), aryB(L, 1)
    Next L
End Sub

答案2

如果你安装RegEx 查找/替换插件,您可以使用以下正则表达式来实现这一点,我已经测试过了。它有效。

Find:           \s*[-.]\s*
Replacement:    ,
Find:           \s+(?!$)
Replacement:    _

相关内容