我目前撰寫了完整的代碼,用于將一個電子表格的輸出復制到另一個電子表格的某些列中。這是一個作業專案的一部分,但是一個辭職的員工留給我的 VBA 代碼并不適用。理論上很簡單。
我想要它做的是從檔案737-10_1b28_routes.csv的選項卡737-10_1b28_routes中提取 BB183 中的值,并將其粘貼到檔案Aero Sales Support Modified Att.1 Performance Data Attachment的選項卡737-10 Scenario 1并在 L30 框中填寫 Form_20220402.xlsx。
然后我希望代碼采用 BB184,并將其放在 L32 中。我需要代碼跳過一行,因為我想在另一行粘貼不同的資料(BB697 進入 L31,BB( 1)和 L( 2)具有相同的重復模式。我想一旦我有更多高效的代碼,我可以找出最終的解決方案,但需要一些幫助。我目前遇到的程式太大。
我覺得 L 列的 j=j 2 來自 j=30:688,BB 就像 i=183:512 中的 i=i 1。
然后代碼的第二部分對于 L 列是 j=j 2 from j=31:689,BB 就像 i=i 1 from i=697:1026。
請查看代碼二以了解它是如何改變的。
Sub vba_copy_data_GCD()
Workbooks("737-10_1b28_routes.csv").Worksheets("737-10_1b28_routes").Range("BB183").Copy _
Workbooks("Aero Sales Support Modified Att.1 Performance Data Attachment and Fill in Form_20220402.xlsx").Worksheets("737-10 Scenario 1").Range("L30")
Workbooks("737-10_1b28_routes.csv").Worksheets("737-10_1b28_routes").Range("BB184").Copy _
Workbooks("Aero Sales Support Modified Att.1 Performance Data Attachment and Fill in Form_20220402.xlsx").Worksheets("737-10 Scenario 1").Range("L32")
Workbooks("737-10_1b28_routes.csv").Worksheets("737-10_1b28_routes").Range("BB185").Copy _
Workbooks("Aero Sales Support Modified Att.1 Performance Data Attachment and Fill in Form_20220402.xlsx").Worksheets("737-10 Scenario 1").Range("L34")
Workbooks("737-10_1b28_routes.csv").Worksheets("737-10_1b28_routes").Range("BB186").Copy _
Workbooks("Aero Sales Support Modified Att.1 Performance Data Attachment and Fill in Form_20220402.xlsx").Worksheets("737-10 Scenario 1").Range("L36")
Workbooks("737-10_1b28_routes.csv").Worksheets("737-10_1b28_routes").Range("BB697").Copy _
Workbooks("Aero Sales Support Modified Att.1 Performance Data Attachment and Fill in Form_20220402.xlsx").Worksheets("737-10 Scenario 1").Range("L31")
Workbooks("737-10_1b28_routes.csv").Worksheets("737-10_1b28_routes").Range("BB698").Copy _
Workbooks("Aero Sales Support Modified Att.1 Performance Data Attachment and Fill in Form_20220402.xlsx").Worksheets("737-10 Scenario 1").Range("L33")
Workbooks("737-10_1b28_routes.csv").Worksheets("737-10_1b28_routes").Range("BB699").Copy _Workbooks("Aero Sales Support Modified Att.1 Performance Data Attachment and Fill in Form_20220402.xlsx").Worksheets("737-10 Scenario 1").Range("L35")
End Sub
uj5u.com熱心網友回復:
鑒于我對您想要的內容的確定程度,請在嘗試此操作之前確保您的檔案已備份:
Sub vba_copy_data_GCD()
Dim srcWS as Worksheet
Dim destWS as Worksheet
Dim i as Long, j as Long
Set srcWS = Workbooks("737-10_1b28_routes.csv").Worksheets("737-10_1b28_routes")
Set destWS = Workbooks("Aero Sales Support Modified Att.1 Performance Data Attachment and Fill in Form_20220402.xlsx").Worksheets("737-10 Scenario 1")
For i = 0 to 329 Step 2
With destWS
.Range("L30").Offset(i,0).Value2 = srcWS.Range("BB183").Offset(j,0).Value2
.Range("L31").Offset(i,0).Value2 = srcWS.Range("BB697").Offset(j,0).Value2
End With
j = j 1
Next i
End Sub
uj5u.com熱心網友回復:
從 VBA 檢查單元格值很慢。從 VBA 向單元格寫入或復制值仍然較慢。在回圈中一遍又一遍地做這些事情是破壞 VBA 執行速度的快速方法。
一次抓取大范圍并賦值給VBA陣列,然后直接在VBA陣列上進行處理,在處理程序中不接觸任何單元格,然后當完成后,一次性將整個陣列寫入作業表。涉及的范圍越大,通過處理 VBA 陣列而不是直接處理單元格來提高執行速度就越大。
VBA 中的陣列處理速度非常快。從 VBA 訪問作業表單元格非常慢。將值寫入一個單元格所花費的時間與將數萬個值寫入 VBA 陣列的范圍所花費的時間大致相同。切勿在回圈中寫入單個單元格值!
使用.Offset也很慢,不建議反復這樣做。使用陣列方法完全避免了這個問題。
如果我充分理解您的范圍描述,則以下例程應該可以解決問題。vSrc并且vDst是陣列。所有值都在陣列中處理(不在作業表上),然后在完成后將陣列值一次性寫入目標作業表......
Sub vba_copy_data_GCD()
Dim i&, vSrc, vDst
Const SRC_GAP& = 514
Const SRC_RANGE$ = "bb183:bb1026"
Const SRC_SHEET$ = "737-10_1b28_routes"
Const SRC_WORKB$ = "737-10_1b28_routes.csv"
Const DST_RANGE$ = "l30:l688"
Const DST_SHEET$ = "737-10 Scenario 1"
Const DST_WORKB$ = "Aero Sales Support Modified Att.1 Performance Data Attachment and Fill in Form_20220402.xlsx"
vSrc = Workbooks(SRC_WORKB).Worksheets(SRC_SHEET).Range(SRC_RANGE).Value2
With Workbooks(DST_WORKB).Worksheets(DST_SHEET).Range(DST_RANGE)
vDst = .Value2
For i = 1 To UBound(vDst) Step 2
vDst(i 0, 1) = vSrc(i, 1)
vDst(i 1, 1) = vSrc(i SRC_GAP, 1)
Next
.Value2 = vDst
End With
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466580.html
