Excel:比较2列之间的string,如果匹配,则修剪/删除匹配的string

我不擅长先进的Excel公式,并需要帮助在Excel中的数据清理迁移的目的。 这是我的场景:

Column A Column B DocName EmployeeName ACCT6789_John_Smith_ACCOUNT_DOC_25_JAN_2007 John_Smith ACCT1122_Jane_Doe_ACCOUNT_DOC_EID00022_21_DEC_2009 Jane_Doe ACCT1462_Phil_Morris_ACCOUNT_DOC_EID0252 Phil_Moris 

我需要ColumnA的string来查找与ColumnB完全匹配。 如果匹配,则从ColumnA中删除匹配的string。 如果没有完全匹配,将不会有任何操作,脚本将继续检查下一行。 我知道会有双下划线的问题,我希望在任何两个单词之间只有一个下划线。

例如上面的预期结果将是:

 ACCT6789_ACCOUNT_DOC_25_JAN_2007 John_Smith ACCT1122_ACCOUNT_DOC_EID00022_21_DEC_2009 Jane_Doe ACCT1462_Phil_Morris_ACCOUNT_DOC_EID0252 Phil_Moris 

仅使用电子表格中的公式,您可以执行以下操作:

假设C列是可用的(如果没有,find一个空的列)。 在第1行中键入此公式(如果您在第1行中有标题,请在第一个可用行中键入它,并将1调整为行号):

 =FIND(B1, A1) 

这会在A1发现B1 (“John Doe”) ("ACCT6789_John_Smith_ACCOUNT_DOC_25_JAN_2007")

在下一栏中,input

 =LEFT(A1, C1-1) & RIGHT(A1, LEN(a1) - C1 - LEN(B1)) 

这需要“我们find的string之前的A1的位”加上“我们find的东西之后的位”。

现在复制这个公式一路下来(selectC1和D1,然后双击右下angular的小方块是一路拖下来的快捷方式…)。 D列现在有你想要的结果。

最后,要将它们复制回A列,selectD列的全部,点击复制,然后在列A中执行Paste-Special-Values。最后,删除列C和D.

顺便说一句 – 这个方法假定在你find的名字的两边都有下划线,并且实际上将删除尾部的那个。 如果你不能确定这一点,你应该改变D列的公式

 =LEFT(A1, C1-1) & RIGHT(A1, LEN(a1) - C1 - LEN(B1) + 1) 

然后再做一轮删除双下划线,并将其replace为单个…这听起来像你不需要,虽然。

虽然这个线程是旧的,但我从另一个线程采取了一些代码,并尝试,看起来像解决scheme是近似匹配。 在这里我试图匹配Sheet1的一列与Sheet2的一列:

  1. 在excel中添加命令button
  2. 把下面的代码,并点击/运行button和function给你的结果在选定的列
  Private Sub CommandButton21_Click() Dim ws As Worksheet Dim LRow As Long, i As Long, lval As String '~~> Change this to the relevant worsheet Set ws = ThisWorkbook.Sheets("Sheet1") With ws '~~> Find Last Row in Col G which has data LRow = .Range("D" & .Rows.Count).End(xlUp).Row If LRow = 1 Then MsgBox "No data in column D" Else For i = 2 To LRow lval = "D" .Range("G" & i).Value = FuzzyFind(lval & i, .Range("PWC")) Next i End If End With End Sub Function FuzzyFind(lookup_value As String, tbl_array As Range) As String Dim i As Integer, str As String, Value As String Dim a As Integer, b As Integer, cell As Variant For Each cell In tbl_array str = cell For i = 1 To Len(lookup_value) If InStr(cell, Mid(lookup_value, i, 1)) > 0 Then a = a + 1 cell = Mid(cell, 1, InStr(cell, Mid(lookup_value, i, 1)) - 1) & Mid (cell, InStr(cell, Mid(lookup_value, i, 1)) + 1, 9999) End If Next i a = a - Len(cell) If a > b Then b = a Value = str End If a = 0 Next cell If Value <> "" Then FuzzyFind = Value Else FuzzyFind = "None" End If End Function