返回列表 上一主題 發帖

原資料如何用字典拆分,入不連續的欄位

請問准大:
Ar = Array(1, 2, 3, 4, 5, 6, 7, 8, 18, 19, 20, 21, 22, 23, 24, 25, 26) '來源資料要複製的[欄位]順序
Br = Array(1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19) '要貼入的[欄位]順序
如果貼入順序改成這樣,如何改for next?
希望支持!

TOP

回復 11# s7659109


一樣是
For i = 0 To UBound(Ar)

TOP

准大:
指Ar = Array(    )與,Br = Array(),()內可否以變數代替,不要寫這麼長。
希望支持!

TOP

本帖最後由 n7822123 於 2018-10-2 22:33 編輯

回復 13# s7659109


   來源資料要貼入的資料,需要建立1-1對應關係

   如果沒有規律的話,應該是沒辦法用變數取代的

  除非要寫判斷式找出2個工作表的對應關係,這樣就跟你的命題:不需判斷衝突了。
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 n7822123 於 2018-10-2 23:25 編輯

回復 14# n7822123


靈光一閃,這樣應該滿意了吧!?
程序:test2
  1. Sub test2()
  2. Set d = CreateObject("scripting.dictionary")
  3. Dim Rn&, Cn&, arr
  4. Sheets("data").Activate
  5. Rn = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row
  6. Cn = Cells(1, Columns.Count).End(xlToLeft).Column
  7. For C = 2 To Cn: d(Cells(1, C).Value) = Cells(2, C).Resize(Rn - 1, 1): Next C
  8. Sheets("test").Activate: Cn = Cells(1, Columns.Count).End(xlToLeft).Column
  9. For C = 2 To Cn: Cells(2, C).Resize(Rn - 1, 1) = d(Cells(1, C).Value): Next C
  10. End Sub
複製代碼
使用数组和字典1071002+.rar (12.29 KB)
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 s7659109 於 2018-10-3 08:27 編輯

阿龍大:
經測試結果,仍達不到預期,如附檔。

使用数组和字典1071003.zip (12.75 KB)

希望支持!

TOP

本帖最後由 n7822123 於 2018-10-4 01:33 編輯

回復 16# s7659109


請使用你附件裡面的 "test2"程序!

test1 與 test2 都可以符合你的需求,不同寫法
test1 最彈性,學號也不連續也可以!

sheet2.test 程序是你自己原本的!
有點無言.....

按Alt+F8
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

阿龍大:
筆數30000筆,當了。
希望支持!

TOP

回復 13# s7659109

Ar = Array(1, 2, 3, 4, 5, 6, 7, 8, 18, 19, 20, 21, 22, 23, 24, 25, 26)
Br = Array(1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19)

如果是像上面這樣[兩段式]的連續欄位:
Cells(2, 1).Resize(R, 8) = xA(2, 1).Resize(R, 8).Value
Cells(2, 18).Resize(R, 9) = xA(2, 11).Resize(R, 9).Value

TOP

本帖最後由 n7822123 於 2018-10-4 11:25 編輯

回復 18# s7659109

應該不是當了,3萬筆要執行一段時間!
字典物件的key輸入字串型態可提升速度(這也是跟準大學習的)
test1 不需修改
程序 test2修改如下

Sub test2()
Set d = CreateObject("scripting.dictionary")
Dim Rn&, Cn&, arr, tt$
Sheets("data").Activate
Rn = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row
Cn = Cells(1, Columns.Count).End(xlToLeft).Column
For C = 2 To Cn
  tt = Cells(1, C).Value
  d(tt) = Cells(2, C).Resize(Rn - 1, 1)
Next C
Sheets("test").Activate
Cn = Cells(1, Columns.Count).End(xlToLeft).Column
For C = 2 To Cn
  tt = Cells(1, C).Value
  Cells(2, C).Resize(Rn - 1, 1) = d(tt)
Next C
End Sub

使用数组和字典1071004.rar (8.64 KB)
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

        靜思自在 : 地上種了菜,就不易長草;心中有善,就不易生惡。
返回列表 上一主題