Board logo

標題: [發問] 如何複製工作表一的所有資料至表二的不同欄位 [打印本頁]

作者: hungrn    時間: 2017-8-3 21:53     標題: 如何複製工作表一的所有資料至表二的不同欄位

各位先進好..
  以下有個檔,用函數的話,是可以解決此問題,但因資料龐大,計算較慢,而想用vba解決
  1.表一的資料列位是固定的
  2.表二的列位,會因廠商忽然改變列位,排列順序會不同
  3.希望能在表二變動列位時..能把表一的資料複製到表二
  謝謝各位先進
[attach]27583[/attach]
作者: GBKEE    時間: 2017-8-4 16:13

回復 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
複製代碼

作者: hungrn    時間: 2017-8-4 18:09

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

版主好
Cells(2, i).Resize(.Rows.Count) = .Value
我改成sheets("工作2").Cells(2, i).Resize(.Rows.Count) = .Value
就可正確執行了..謝謝
請問是否有不須加入名稱的寫法..?
作者: 准提部林    時間: 2017-8-6 09:34

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
作者: Hsieh    時間: 2017-8-7 14:57

回復 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
複製代碼

作者: hungrn    時間: 2017-8-7 22:59

謝謝3位版主的指導...
CreateObject("Scripting.Dictionary")
可參考 http://gb.twbts.com/index.php?topic=510.0
這篇
作者: hungrn    時間: 2019-5-2 13:16

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

麻煩各位了
作者: hungrn    時間: 2019-5-2 14:03

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




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)