autofilter :是針對既有資料,設定一定程度的條件,此條件可以是單一也可以是多條件後,開始做篩選,但前提是excel本身已準備好資料讓你篩選。
mysql 語法:可以執行最基本的條件查詢、計算後,顯示結果。
比較不同平台,一個是excel,一個是mysql。
其實小編相信很多網路大神一定會說,這還需要比較?
小編想要整理出,不同資料筆數之間差異,當然學習歷程時間也是一個差異,畢竟學excel跟學sql還是有點本質上的不同,但有ai後,似乎有打雞血的up點。
所以小編,以自己常在整理的資料,來做簡單比較:
目前小編每個月會根據台灣上市櫃公司,做產業別資料整理,隨著時間拉長,資料整理期間自然越來越長,就選這個常在整理的資料來比較吧!!
條件:
查詢110/01~110/12的合計15個產業別各月產業別營收
結果:
EXCEL,133.5秒
SQL,76.46秒;
小編進一步改成直接查詢105/01~114/05拉大13倍查詢範圍,變成71.203,決定在測一次70.698。
比較後,小編呵呵笑了,原來比較後,也確認了是EXCEL寫資料表時間最耗時,
對SQL來說擴大13倍查詢根本不是問題。
小編就不測試EXCEL擴大13倍後,需要花費多少時間了。
也有另外一個可能,就是小編寫的AUTOFILTER 效率太差,應該拿去效率最好的方法去PK阿。
QQ。
方法有很多,熟悉有幾個,能學好多個,答案靠己尋。
附上小編自己的VBA:(很差,參考)
SUB C1' SQL
shell "powercfg.exe setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c " '高效能
On Error GoTo LINE1
ActiveSheet.Range("A:G").Clear
S1 = ActiveSheet.Range("aa2000").End(xlUp).Row
data = INCOME_SQL_SUM_catrgory("105/01", "114/05")
For i = LBound(data, 1) To UBound(data, 1)
For j = LBound(data, 2) To UBound(data, 2)
If IsNull(data(i, j)) Then data(i, j) = "" ' 替換Null為空字串
If IsNumeric(data(i, j)) Then data(i, j) = CStr(data(i, j)) ' 統一轉文字型態
Next j
Next i
ActiveSheet.Range("A1").Resize(UBound(data, 2), UBound(data, 1) + 1) = WorksheetFunction.Transpose(data)
For i = 1 To UBound(data, 2) + 1 Step 1
If ActiveSheet.Range("C" & i + 1) <> "" And ActiveSheet.Range("C" & i + 1) <> "" And _
ActiveSheet.Range("C" & i + 1) <> 0 And ActiveSheet.Range("C" & i + 1) <> 0 Then
ActiveSheet.Range("F" & i + 1).Value = (val(ActiveSheet.Range("C" & i + 1).Value) - _
val(ActiveSheet.Range("D" & i + 1).Value)) / val(ActiveSheet.Range("D" & i + 1).Value) End If
Next
TOPIC = Array("產業別", "月份", "當月營收", "去年當月營收", "新高家數", "年增減(%)")
ActiveSheet.Range("A1:F1").Insert
ActiveSheet.Range("A1:F1") = TOPIC
s3 = ActiveSheet.Range("B1000000").End(xlUp).Row
ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(s3, 7 + 2)).Sort key1:=ActiveSheet.Range("a" & ":" & "a"), order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlStroke, DataOption1:=xlSortNormal
Beep
Beep
Beep
MsgBox Timer - T
Exit Sub
LINE1:
MsgBox "ERROR"
Resume
END SUB
SUB C2 'AUTOFILTER
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
' Note: this is a sheet-level setting.
' ActiveSheet.DisplayPageBreaks = False
SOURCE = Excel.ActiveWorkbook.Name
Shell "powercfg.exe setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c " '高效能
On Error GoTo LINE1
Sheets("產業別").Range("A:E").Clear
S1 = Sheets("產業別").Range("aa2000").End(xlUp).Row
list_data = Sheets("產業別").Range("aa1:aa" & S1)
list_data = 移除重複(list_data)
S1 = Sheets("產業別").Range("z2000").End(xlUp).Row
list_data2 = Sheets("產業別").Range("z1:z" & S1)
list_data2 = 移除重複(list_data2)
Sheets("產業別").Range("a:e").Clear
ADD = 2
TOPIC = Array("產業別", "月份", "當月營收", "去年當月營收", "年增減(%)")
Sheets("產業別").Range("A1:E1") = TOPIC
SOURCE = Excel.ActiveWorkbook.Name
For j = LBound(list_data2) To UBound(list_data2) Step 1 '(J) <> ""
Sheets("月營收").Activate
'XX1 = Application.CountA(Sheets("月營收").Range("A:a")) '.End(xlUp).Row
XX1 = Sheets("月營收").Range("B1000000").End(xlUp).Row
Sheets("月營收").Range("$a$1:$J$" & XX1).AutoFilter Field:=3, Criteria1:= _
"=" & list_data2(j) '
For O = LBound(list_data) To UBound(list_data) Step 1
Sheets("月營收").Range("$a$1:$J$" & XX1).AutoFilter Field:=4, Criteria1:= _
"=" & list_data(O) '
Set 當月營收 = Sheets("月營收").Range("E1:E" & XX1).SpecialCells(xlCellTypeVisible)
Set 當月營收12高 = Sheets("月營收").Range("L1:L" & XX1).SpecialCells(xlCellTypeVisible)
Set 去年當月營收 = Sheets("月營收").Range("G1:G" & XX1).SpecialCells(xlCellTypeVisible)
Sheets("產業別").Cells(ADD, 1).Value = list_data2(j)
Sheets("產業別").Cells(ADD, 2).Value = list_data(O)
Sheets("產業別").Cells(ADD, 3).Value = Application.Sum(當月營收)
Sheets("產業別").Cells(ADD, 4).Value = Application.Sum(去年當月營收)
Sheets("產業別").Cells(ADD, 6).Value = Application.Sum(當月營收12高)
On Error Resume Next
Sheets("產業別").Cells(ADD, 5).Value = (Sheets("產業別").Cells(ADD, 3).Value - Sheets("產業別").Cells(ADD, 4).Value) / Sheets("產業別").Cells(ADD, 4).Value
On Error GoTo LINE1
ADD = ADD + 1
Next
Sheets("月營收").AutoFilterMode = False
Next
Windows(SOURCE).Activate
income_row_年增率 = Sheets("產業別").Range("a" & "65536").End(xlUp).Row
Set myRange_R = Sheets("產業別").Range("A1:E" & income_row_年增率)
myRange_R.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
Set myRange_R = Nothing
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.Calculation = xlCalculationAutomtic
Application.EnableEvents = True
END SUB
沒有留言:
張貼留言