- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
本帖最後由 Andy2483 於 2022-12-14 16:00 編輯
謝謝論壇,謝謝各位前輩
後學還沒上論壇前會用WIith ~End WIith,覺得可以跑就好,耗時就算了!
時間流逝,檔案資料變大,重複FIND()太慢了
上論壇學習陣列與字典後,有些程式碼原來 1 分鐘的舊方法程序,改陣列&字典後現在只要 0.1 秒
以下是這主題範例用以前沒有用陣列和字典的舊方法:
連宣告都不在呼,宣告一個變數可能可以簡化很多行程式碼
Sub test_20221214()
AC_WO_NA = ActiveWorkbook.Name
Workbooks.Add
[A1] = "N0"
[B1] = "日期"
[C1] = "時間"
[D1] = "規格"
[E1] = "數值"
[F1] = "MX"
N = 1
With Workbooks(AC_WO_NA).Sheets("SOS")
For i = 3 To .[D65536].End(xlUp).Row
If .Cells(i, "D") Like "*##/## *:* *-* 長* *#*、*" = True Then
R = R + 1
C = 0
For j = 1 To Len(.Cells(i, "D"))
If Mid(.Cells(i, "D"), j, 5) Like "##/##" = True Then
C = C + 1
N = N + 1
Cells(N, 1) = "'" & R & "." & C
Cells(N, 2) = Mid(.Cells(i, "D"), j, 5)
End If
If Mid(.Cells(i, "D"), j, 5) Like "##:##" = True Then
Cells(N, 3) = Mid(.Cells(i, "D"), j, 5)
End If
If Mid(.Cells(i, "D"), j, 99) Like " AA-* 長*" = True Then
Cells(N, 4) = Mid(.Cells(i, "D"), j + 1, InStr(Mid(.Cells(i, "D"), j, 99), " 長") - 2)
End If
If Mid(.Cells(i, "D"), j, 99) Like " 長#*、*" = True Then
Cells(N, 5) = Mid(.Cells(i, "D"), j + 2, InStr(Mid(.Cells(i, "D"), j, 99), "、") - 3)
End If
Next
End If
Next
End With
M = 0
For i = 2 To [A65536].End(xlUp).Row + 1
If Mid(Cells(i, 1), 1, InStr(Cells(i, 1), ".")) = Mid(Cells(i + 1, 1), 1, InStr(Cells(i + 1, 1), ".")) Then
If Cells(i, 5) > M Then
N = i
M = Cells(i, 5)
End If
If Cells(i + 1, 5) > M Then
N = i + 1
M = Cells(i + 1, 5)
End If
Else
Cells(N, 6) = "V"
M = 0
End If
Next
[B:B].NumberFormatLocal = "yyyy/m/d"
Cells.Columns.AutoFit
End Sub
有練習才會遇到困難和錯誤! 一起來學習 |
|