如何生成一列B中有而A中沒有的IP段?
這是兩列IP段 有些IP段A、B都有 請問如何生成一列B中有而A中沒有的IP段 多謝了!
來提供一個終極解決方案作為大殺器,還是使用運行效率不高但是效果奇佳的數組函數。
Excel面臨的大部分情況都是有限的數據量,幾乎不用考慮效率問題,而以靈活性優先。
以上大殺器提供了A列和B列數據篩選的各種解決方案,題主的問題適用於D列,數組函數如下:
=IF(ROW($A1)&<=SUM((COUNTIF(Data1,Data2)=0)*1),INDEX(Data2,SMALL(IF(ISERROR(MATCH(Data2,Data1,0)),ROW(INDIRECT("1:"ROWS(Data2)))),ROW($A1))),"")
其中data1和data2是A及B列的數據,通過數據區域來定義。
面對如此複雜的公式,大部分人都會懵逼,在這裡一步步來解釋。
第一層,
if(ROW($A1)&<=SUM((COUNTIF(Data1,Data2)=0)*1), Module1, "")
因為不知道滿足篩選條件的數據有多少個,所以寫一個if函數來判斷,方便寫好第一個函數直接往下拖拽,當超過數據個數的時候,顯示為空(「」)。
第二層,Module1INDEX(Data2, Module2)
利用Index在data2(B列)從上往下取出第j個滿足篩選條件的數,j隨著往下拖拽,從1挨個遞增。
第三層,Module2SMALL(Module3,ROW($A1))
利用Small函數,從上往下(=從小往大選)選出第j個滿足篩選條件數據所對應的行數,j隨著往下拖拽,從1挨個遞增。
第四層,Module3IF(ISERROR(MATCH(Data2,Data1,0)),ROW(INDIRECT("1:"ROWS(Data2))))
生成一個數組,如果B列中的數在A列中不存在,則數組的元素為該行的行數;如果存在,則數組的元素為空(「」)。在本案例中,該數組為{",2,3,"",5,6,7,"",9,"",""}。
所以回到第三層時,取第一個數時,就是取上述數組中第1小的數,那即是2,對應回去就是BB。
其他各種篩選條件寫出來的數組函數類似,不贅述了。
...更多文章請到數據冰山 - 知乎專欄...更多回答請看何明科的主頁
c1公式=vlookup(b1,a:a,1,false),下拉,篩選所有錯誤值
這時候就該安利一波python
import csv
from faker import Factory
"""
生成假數據,並寫入csv file.
引用faker生成ipv4的ip
會生成名為 ip_test.csv的文件,預設1000條數據
"""
def generate_fake_ip(number=1000):
# 先造些假數據,並寫入csv file
fake = Factory.create()
with open("ip_test.csv", "wb") as f:
writer = csv.writer(f)
# 寫入100條假數據, 按照ipv4格式
for _ in xrange(number):
writer.writerow([fake.ipv4(network=False), fake.ipv4(network=False)])
"""
讀取csv文件,並比較A, B兩列
假設A,B自身均沒有重複
比較可簡化為 setB - setA
Note: 未return
"""
def what_ever_you_wanna_call_this_function(fileName="ip_test.csv"):
a = set([])
b = set([])
with open(fileName, "rb") as f:
reader = csv.reader(f)
for row in reader:
a.add(row[0])
b.add(row[1])
result = b - a
print result
"""
讀取csv文件,並比較A,B兩列
假設A,B自身有重複,跟位置信息相關
result為 (index, A, B) 形式的tuple 所組成的list
Note: 未return
"""
def still_need_more(fileName="ip_test.csv"):
result = []
with open(fileName, "rb") as f:
reader = csv.reader(f)
for index, row in enumerate(reader):
if row[0] == row[1]:
result.append((index, row[0], row[1]))
print result
if __name__ == "__main__":
#generate_fake_ip(100)
#what_ever_you_wanna_call_this_function()
still_need_more()
生成的假數據
如果A, B自身不包含重複元素
如果A,B包含重複元素
調用SQL語句,最快的辦法,EXCEL自帶功能。
diff &<(sort i1) &<(sort i2) |grep "&<"|awk "{print $2}"
_百度經驗
看上面鏈接,應該是這個吧
//--------------------------------------------------------------
上面的不對,C1里填入這個
=IF(COUNTIF(A1:A20,B1),B1,"")
然後下拉。有時下拉後excel會把A1:A20變成A2:A21,A3:A22,或者你自己修改幾行,excel就懂了,或者如果A列沒有其他的數,可以直接定義成就是A列,變成這樣
=IF(COUNTIF(A:A,B1),B1,"")
這樣下拉
效果是這樣的:
推薦閱讀:
※做 PPT 時最喜歡哪種字體?為什麼?
※OA協同辦公系統主要考量標準有哪些?
TAG:MicrosoftExcel | 辦公軟體 | Excel公式 |