首先,以下是我的输入样本数据:
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"
的最后一个八位字节是:
62
,61
&62
...所以[Correction Flag]
"Not OK"
。
但是,对于[ID]
2 ,最后一个八位字节为:
80
,80
&80
...因此[Correction Flag]
应为 "OK"
。
[Port Type]
EXTRA 将被忽略。非常感谢你的帮助。
答案 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)
以下数组输入的公式将执行您描述的操作。
062
和62
将被视为相同)。ID
,Port_Type
,IP_Address
)的大小必须相同,为了计算速度,越小越好。{...}
。=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"))