在excel VBA中比较两个不同列的值与唯一条件

我试图比较两个不同列的值。

图片

所以有两种情况:

  1. 在'A'列中存在一个两位数值,这导致'B'列中的七位数值。
  2. 在'A'列中存在一个三位数值,这导致'B'列中的八位数值。

我想validation'B2'和'B3'是否分别以14和21开头,如果没有Msgbox'行号错误'。 如果没有Msgbox'行号错误',则分别以'B3'和'B4'开头,分别为109和289。

把这个公式放在C2中,并拷贝下来:

=IF(AND(LEN(SUBSTITUTE(B2,A2,""))=5,FIND(A2,B2&A2)=1),"No Error","Error") 

在这里输入图像说明


要得到不起作用的行号列表,可以使用以下公式:

 =AGGREGATE(15,6,ROW($A$2:$A$7)/((--LEFT($B$2:$B$7,LEN($A$2:$A$7))<>$A$2:$A$7)+(LEN($B$2:$B$7)-LEN($A$2:$A$7)<>5)>0),ROW(1:1)) 

把它放在第一个单元格,然后复制/粘贴,直到你用完了错误的行。

在这里输入图像说明

我会用一个UDF。 input这是一个标准模块:

 Public Function IsItGood(r1 As Range, r2 As Range) As String Dim v1 As String, v2 As String, L As Long v1 = r1.Text v2 = r2.Text L = Len(v1) If v1 = Left(v2, L) Then IsItGood = "Noerror" Else IsItGood = "Error in this row" End If End Function 

然后在C2中input:

 =isitgood(A2,B2) 

并抄下来:

在这里输入图像说明

你可以试试这个…

 Sub CompareColumns() Dim lr As Long, n As Long Dim rng As Range, cell As Range Dim strA As String, strB As String, str As String Dim NotMatched As Boolean lr = Cells(Rows.Count, 1).End(xlUp).Row 'Assuming your data starts from Row2 Set rng = Range("B2:B" & lr) str = "The following cells don't match." & vbNewLine & vbNewLine For Each cell In rng If cell <> "" Then n = Len(cell.Offset(0, -1)) If n > 0 Then strA = cell.Offset(0, -1).Text strB = Left(cell, n) If strA <> strB Then NotMatched = True str = str & cell.Offset(0, -1).Address(0, 0) & " : " & cell.Offset(0, -1).Value & vbTab & cell.Address(0, 0) & " : " & cell.Value & vbNewLine End If Else str = str & cell.Offset(0, -1).Address(0, 0) & " : " & cell.Offset(0, -1).Value & vbTab & cell.Address(0, 0) & " : " & cell.Value & vbNewLine End If End If n = 0 strA = "" strB = "" Next cell If NotMatched Then MsgBox str, vbInformation Else MsgBox "Both columns match.", vbInformation End If End Sub