2015-08-08 146 views
1

我有一些防火牆日誌我找過,我想,這樣的Excel顯示我對每個IP的第一和最後的時間戳(兩個單獨的列)來排列。 我有五列的表格:Excel的崩潰

  • ColumnA:唯一的IP地址(計數:1275)
  • ColumnB:在哪裏,我想第一個訪問的時間是
  • ColumnC:如果我想上次訪問的時間是
  • ColumnD:非uniqued IP地址(計數:300001)
  • ColumnE:與第4列排列的非uniqued時間戳(計數:300001)

我的公式似乎可以在較小的數據集上正常工作,但是當我嘗試這樣做時,excel崩潰,可以理解,因爲它是一個40萬行的表。有沒有辦法讓這個CPU佔用更少,以便Excel能夠完成這個任務?有沒有更好的方法來做到這一點?下面是此次的公式我使用:

=MIN(IF(A1=D1:D400001,E1:E400001))

按Ctrl + Shift + Enter

謝謝!

+1

它必須是一個公式嗎?你能轉發數據嗎?將IP地址放在行上,並在值上加上時間戳(按最小值彙總值字段)。 – rwilson

+0

你爲什麼要看10萬空白行?你的公式說「D1:D400001」,但你的敘述狀態*'數:300,001'*在同一範圍內。 – Jeeped

+0

如果你已經刪除了所有的條件格式,自定義格式等,並保留原始數據,那麼你應該沒有問題。您的數組公式在54.04秒內通過1275個唯一的IP在真實的400K非空值上運行。我測試了一個[AGGREGATE](https://support.office.com/en-us/article/AGGREGATE-function-43B9278E-6AA7-4F17-92B6-E19993FA26DF)等價物,它的運行速度爲66.85秒。考慮到舊筆記本電腦上的數據量,不要閃電般快速但完全可以接受。 – Jeeped

回答

2

當處理這麼多行數據時,最好的辦法是創建一個數據透視表(見下面的表格)。樞軸桌非常快,適合於這種情況。

enter image description here

1.放置IP地址(非唯一的IP地址欄)上的 「行」。

2。拖放「VALUES」上的TimeStamps(非唯一時間戳記列)。這將默認爲SUM或COUNT,但使用字段設置可將其更改爲MIN。

再次在「VALUES」上拖動TimeStamps,這次將字段設置更改爲MAX。

這張表實際上會給你與使用MINIF和MAXIF公式相同的結果。

正如Tom Sharpe指出的那樣,數據透視表將僅列出在「非唯一IP地址」列中找到的可能包含或不包含全部1,275個唯一IP地址的IP地址。爲了解決這個問題(如有必要),您可以使用數據透視表本身作爲查找表創建一個公式,並將這些值返回到原始電子表格。

+0

數據透視表非常強大。謝謝你,先生,這樣做了! – Alkthree

0

這種老派的做法如何?我的公式開始第2行,因爲我喜歡的列標題進行排序的: -

(1)分類上山坳d那麼E

(2)使用MATCH(,, 0),以獲得第一次約會每個IP數&指數B2: -

=IFERROR(INDEX(E$2:E$300000,MATCH(A2,D$2:D$300000,0)),"") 

(3)使用MATCH(,, 1),以獲得在C2每個IP數& INDEX的最後日期: -

=IF(B2="","",INDEX(E$2:E$300000,MATCH(A2,D$2:D$300000,1))) 

如果式在B2中找不到匹配項,因爲A2中的IP地址尚未使用,則在B2和C2中都顯示一個空白。

我跑它運行的設施,工廠的PC上的一些模擬數據,並花了約5秒進行排序,和相似的時間來更新公式。

值得考慮更大的數據量,因爲排序時間上升爲nlog(n),而不是n 。

它標記爲Excel中,但它也是東西,將很容易被任何SQL數據庫進行處理。