匹配IP的最后一个子网并放置一个标签

时间:2018-02-02 10:50:10

标签: arrays excel vba ip-address string-comparison

首先,以下是我的输入样本数据:

ID  Port Type   IP Address       Correction Flag
1   ETH         135.34.32.62    
1   ETH         135.34.160.61   
1   ETH         100.60.30.62    
1   EXTRA       55.26.76.150    
2   ETH         135.34.32.80    
2   ETH         135.34.160.80   
2   ETH         100.60.30.80    
2   EXTRA       55.26.76.144    
3   ETH         135.34.33.238   
3   ETH         13.534.161.238  
3   ETH         100.60.31.238   
3   EXTRA       55.26.76.77 

我想检查每个[ID] [Port Type] = "ETH"[IP Address]的最后一个八位字节是否相同。如果最后一个八位字节不同[Correction Flag]应为 "Not OK" ,否则,它可以是 "OK"

示例:

  • [ID] 1 "ETH"的最后一个八位字节是:

      

    6261& 62

    ...所以[Correction Flag] "Not OK"

  • 但是,对于[ID] 2 ,最后一个八位字节为:

      

    8080& 80

    ...因此[Correction Flag]应为 "OK"

  • [Port Type] EXTRA 将被忽略

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

这里不需要VBA。 将此公式放在第一个IP编号旁边并填写:

=IF(AND(B4=B3,B3=B2),IF(AND(RIGHT(C2,3)=RIGHT(C3,3),RIGHT(C2,3)=RIGHT(C4,3)),"OK","Not OK"),"")

B2是第一个界面,B3秒,等等 C2是第一个IP号

答案 1 :(得分:2)

Sam指出不需要VBA。我可能会选择SUMPRODUCT功能 - 就像这样

=IF(IF(B2="ETH";SUMPRODUCT((A:A=A2)*(B:B="ETH")*(RIGHT(C:C;3)<>RIGHT(C2;3)));0)>0;"Not OK";"OK")

这样,无论您拥有多少行,或者即使ID被混淆,它也会起作用。

答案 2 :(得分:2)

以下数组输入的公式将执行您描述的操作。

  • 不要求对表进行排序。
  • 由于它们代表相同的八位字节,因此将忽略前导零(例如06262将被视为相同)。
  • 指定范围(IDPort_TypeIP_Address)的大小必须相同,为了计算速度,越小越好。
  • 确保在按下输入时按 ctrls + shift 确认公式。如果您正确执行此操作,Excel将在公式周围放置大括号{...}
=IF(B2<>"eth","",IF(SUM(N(FREQUENCY(AGGREGATE(15,6,1/IF(ID=A2,IF(Port_Type="eth",TRIM(RIGHT(SUBSTITUTE(IP_Address,".",REPT(" ",99)),99)))),ROW(INDIRECT("1:" & SUM(--(ISNUMBER(1/IF(ID=A2,IF(Port_Type="eth",TRIM(RIGHT(SUBSTITUTE(IP_Address,".",REPT(" ",99)),99)))))))))),AGGREGATE(15,6,1/IF(ID=A2,IF(Port_Type="eth",TRIM(RIGHT(SUBSTITUTE(IP_Address,".",REPT(" ",99)),99)))),ROW(INDIRECT("1:" & SUM(--(ISNUMBER(1/IF(ID=A2,IF(Port_Type="eth",TRIM(RIGHT(SUBSTITUTE(IP_Address,".",REPT(" ",99)),99)))))))))))>0))=1,"OK","not OK"))

enter image description here