返回列表 上一主題 發帖

[發問] 如何複製工作表一的所有資料至表二的不同欄位

[發問] 如何複製工作表一的所有資料至表二的不同欄位

各位先進好..
  以下有個檔,用函數的話,是可以解決此問題,但因資料龐大,計算較慢,而想用vba解決
  1.表一的資料列位是固定的
  2.表二的列位,會因廠商忽然改變列位,排列順序會不同
  3.希望能在表二變動列位時..能把表一的資料複製到表二
  謝謝各位先進
test1.rar (13.8 KB)

回復 1# hungrn

表1,表2 用電度數(度)  需改成  用電度數
還有其他寫法,也請大家發表
  1. Option Explicit
  2. Sub Ex()
  3.     Dim i As Variant
  4.     For Each i In Names
  5.         i.Delete
  6.     Next
  7.     Worksheets("工作1").UsedRange.CreateNames True, False
  8.     'Range.CreateNames 方法在指定範圍中依據工作表中的文字標籤建立名稱
  9.     With Worksheets("工作2").UsedRange
  10.         For i = 1 To .Columns.Count
  11.             If .Cells(1, i) <> "" Then
  12.                 With Range(.Cells(1, i).Value)   '工作表中的文字標籤建立名稱
  13.                     Cells(2, i).Resize(.Rows.Count) = .Value
  14.                 End With
  15.             End If
  16.         Next
  17.     End With
  18. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 hungrn 於 2017-8-4 18:11 編輯

版主好
Cells(2, i).Resize(.Rows.Count) = .Value
我改成sheets("工作2").Cells(2, i).Resize(.Rows.Count) = .Value
就可正確執行了..謝謝
請問是否有不須加入名稱的寫法..?

TOP

Sub TEST()
Dim MH, C%
With Sheets("工作1").UsedRange
  For C = 1 To .Columns.Count
    MH = Application.Match(.Item(C), [工作2!1:1], 0)
    If Not IsError(MH) Then
      .Columns(C).Offset(1, 0).Copy [工作2!A1].Cells(2, MH)
    End If
  Next C
End With
End Sub

TOP

回復 3# hungrn
  1. Sub ex()
  2. Dim r&, A As Range, d As Object
  3. Set d = CreateObject("Scripting.Dictionary")
  4. With Sheets(1)
  5. r = .UsedRange.Rows.Count - 1
  6. For Each A In .UsedRange.Rows(1).Cells '讀取工作表1資料
  7.    d(A.Value) = A.Offset(1).Resize(r, 1).Value
  8. Next
  9. With Sheets(2)
  10. .UsedRange.Offset(1).ClearContents
  11. For Each A In .UsedRange.Rows(1).Cells '寫入到工作表2
  12. If d.exists(A.Value) Then A.Offset(1).Resize(r, 1) = d(A.Value)
  13. Next
  14. End With
  15. End With
  16. End Sub
複製代碼
學海無涯_不恥下問

TOP

謝謝3位版主的指導...
CreateObject("Scripting.Dictionary")
可參考 http://gb.twbts.com/index.php?topic=510.0
這篇

TOP

請問...如果不是全部使用範圍UsedRange..
而是某一個選取範圍如range("a5:d50") 該如何更改
因為我用定義範圍不行

麻煩各位了

TOP

抱歉各位了...是我範圍定義錯誤
已經解決了...謝謝各位

TOP

        靜思自在 : 太陽光大、父母恩大、君子量大,小人氣大。
返回列表 上一主題