Office 板


LINE

軟體:EXCLE 版本:2010 您好 我運用EXCEL VBA撰寫一個巨集指令 內容是讀取100個JSON檔案後再將其內容重行排版後 輸出成1個TXT檔(目的是為了格式轉換) 但是我發現開啟這個EXCEL並第1次執行時耗時6.8秒 在未關閉EXCEL檔案情況下,執行第2次時耗時7.7秒 依此類推,第3次耗時8.9秒、第4次耗時10.64秒、第5次耗時13.56秒... 請問原因是什麼呢?因為我原始資料有達數十萬筆,如果依照這樣的速率 將無法繼續執行下去 感謝回復 巨集內容如下: Sub test() Dim Time0# Time0 = Timer Dim OutputFilePath As String OutputFilePath = "D:\output.txt" Open OutputFilePath For Output As #1 len1 = WorksheetFunction.CountA(Range("'工作表1'!A:A")) For i = 1 To 100 On Error Resume Next num1 = WorksheetFunction.Find(",", 工作表1.Cells(i, 1)) numA = Mid(工作表1.Cells(i, 1), 1, num1 - 2) numB = Mid(工作表1.Cells(i, 1), num1 - 1, 1) num2 = WorksheetFunction.Find(",", 工作表1.Cells(i, 1), num1 + 1) numC = Mid(工作表1.Cells(i, 1), num1 + 1, num2 - num1 - 1) num3 = WorksheetFunction.Find(",", 工作表1.Cells(i, 1), num2 + 1) numD = Mid(工作表1.Cells(i, 1), num2 + 1, num3 - num2 - 1) num4 = WorksheetFunction.Find(",", 工作表1.Cells(i, 1), num3 + 1) numE = Mid(工作表1.Cells(i, 1), num3 + 1, num4 - num3 - 1) numF = Mid(工作表1.Cells(i, 1), num4 + 1, 8) Sheets("工作表2").Select filepath1 = "TEXT;D:\ " & 工作表1.Cells(i, 1) With ActiveSheet.QueryTables.Add(Connection:= _ filepath1, Destination _ :=Range("$A" & 1)) .Name = 工作表1.Cells(i, 1) .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 65001 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With num5 = Len(工作表2.Cells(1, 11)) numG = Mid(工作表2.Cells(1, 11), 9, num5 - 9) 工作表2.Rows("1:1").Select Selection.Delete Shift:=xlToLeft Print #1, 工作表1.Cells(i, 1); " "; numA; " "; numB; " "; numC; " "; numD; " "; numE; " "; numF; " "; numG Next Close #1 MsgBox "執行時間 " & Timer - Time0 & " 秒" & vbCrLf & "平均時間" & (Timer - Time0) / 100 & "秒" End Sub --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.38.71
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Office/M.1537800892.A.93A.html ※ 編輯: genow (111.249.38.71), 09/24/2018 23:09:18 ※ 編輯: genow (111.249.38.71), 09/24/2018 23:10:15
1F:→ newacc: num值或許可以使用split方式來解析Cells(i,1) 09/24 23:21
2F:→ newacc: 程式中會大量調用Cells內容,可以試試看一開始直接把工作 09/24 23:22
3F:→ newacc: 表1的A1:A100值先存在一個array裡面,之後迴圈裡需要時再 09/24 23:22
4F:→ newacc: 從array(i)叫值出來 09/24 23:22
5F:→ newacc: 不過我會想先分段計時看看,才知道一直呼叫cells值是不是 09/24 23:24
6F:→ newacc: 拖慢速度的原因 09/24 23:24
7F:→ newacc: 另外,不確定Print會不會也是拉長速度的原因,可以試試看 09/24 23:25
8F:→ newacc: 先全部存在一個變數裡,迴圈跑完之後再寫進txt檔裡 09/24 23:25
9F:→ newacc: 我猜工作表2刪100次也是一個主因,建議不要在迴圈中執行 09/24 23:27
10F:→ newacc: delete動作,可以跟工作表1一樣套用i控制變數,最後再一次 09/24 23:28
11F:→ newacc: 把工作表2.Range("1:100").Delete即可 09/24 23:28
12F:推 newacc: 實測Print速度很快,存變數反而慢很多0rz 09/24 23:46
13F:→ newacc: 呃,剛剛在看到你的QueryTable是放在工作表2的A1 QQ 09/24 23:48
14F:→ newacc: 我有個疑問,請問你載入的外部資料內容有多少?除了K1的值 09/25 00:17
15F:→ newacc: 以外,其他的值會用到嗎? 09/25 00:18
16F:→ newacc: 我自己測試,如果有新的資料進來,會把舊資料往右推,但因 09/25 00:22
17F:→ newacc: 為你每個迴圈都會刪掉第一行,所以越早進來的資料,會一行 09/25 00:23
18F:→ newacc: 一行被刪掉,如果只需要讀K1值的話,一是看有沒有辦法不要 09/25 00:23
19F:→ newacc: 用QueryTable,直接在檔案中讀取。二是把.RefreshStyle值 09/25 00:24
20F:→ newacc: 改成xlOverwriteCells,也不需要把第一行刪掉,新資料會自 09/25 00:24
21F:→ newacc: 動把舊資料覆蓋掉 09/25 00:24
22F:→ newacc: 當然這些還是跟你的資料內容有關 09/25 00:25
23F:→ genow: 感謝回覆,今天人在外面,等晚上回家時立即來試試,有問題 09/25 07:56
24F:→ genow: 再請教! 09/25 07:56







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP