返回列表 上一主題 發帖

[發問] 搜尋、比對,再複製過來的功能

回復 5# iceandy6150
VBA的可用不同的寫法,來達到同一效果
  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3.     Dim Rng() As Range, Ar(), xR As Variant, xC As Variant, i As Integer, ii As Integer
  4.     Dim xRng As Range
  5.     Application.ScreenUpdating = False
  6.     Ar = Array("測試.XLSM", "尺寸.XLSX", "資料.XLSX")
  7.     ReDim Rng(UBound(Ar))       '** Rng 重置元素與 Ar 一樣多
  8.     For i = 0 To UBound(Ar)
  9.         '**Workbooks(Ar(0)).Path ** 修改為 尺寸 , 資料 檔案的正確資料夾位置**
  10.         If i > 0 Then Workbooks.Open (Workbooks(Ar(0)).Path & "\" & Ar(i)) '**開啟檔案
  11.         With Workbooks(Ar(i))
  12.             Set Rng(i) = .Sheets(1).Range("A1").CurrentRegion   '**設定個檔案的資料範圍
  13.         End With
  14.     Next
  15.     With Rng(0)                         '**測試.XLSM 清除要導入資料的範圍
  16.         .Range(.Cells(2, 2), .Cells(.Rows.Count, .Columns.Count)) = ""
  17.     End With
  18.     Set xRng = Rng(0).Cells(2, 1)       '**測試.XLSM: 第一個 學號
  19.     Ar = Rng(0)                         '**測試.XLSM: 範圍資料導入陣列
  20.     Do While xRng <> ""                 '迴圈: 學號的搜尋
  21.         For ii = 1 To UBound(Rng)
  22.             xR = Application.Match(xRng, Rng(ii).Columns(1), 0) '尺寸,資料 中搜尋 學號(的列號)
  23.             If Not IsError(xR) Then                             '**搜尋到 學號(的列號)
  24.                 For i = 2 To Rng(0).Rows(1).Cells.Count         '**測試 欄位名稱
  25.                     '**xC 傳回是否搜尋到 欄位名稱
  26.                     xC = Application.Match(Rng(0).Cells(1, i), Rng(ii).Rows(1).Cells, 0)
  27.                     If Not IsError(xC) Then Ar(xRng.Row, i) = Rng(ii).Cells(xR, xC) '**導入資料到陣列
  28.                 Next
  29.             End If
  30.         Next
  31.         Set xRng = xRng.Offset(1)           '**測試.XLSM: 下一個 學號
  32.     Loop
  33.     For i = 1 To UBound(Rng)
  34.         Rng(i).Parent.Parent.Close          '**關閉 "尺寸.XLSX", "資料.XLSX"
  35.     Next
  36.     Rng(0) = Ar                             '**陣列資料導入測試.XLSM的範圍
  37.     Application.ScreenUpdating = True
  38. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 7# iceandy6150

排序的問題,你可用錄製巨集練習看看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim ar(), c As Integer, i As Integer
  4.     '**ReDim 陳述式 在程序層次中用來重新配置動態陣列變數的儲存空間。
  5.     ReDim ar(0 To 2)
  6.     For i = 0 To UBound(ar)
  7.         ar(i) = Chr(65) & i
  8.     Next
  9.     MsgBox UBound(ar) & vbLf & Join(ar, ",")
  10.     c = 8
  11.     ReDim ar(1 To c)
  12.     For i = 1 To UBound(ar) Step 2
  13.         ar(i) = Chr(66) & i
  14.     Next
  15.    
  16.     MsgBox UBound(ar) & vbLf & Join(ar, " , ")
  17.     ReDim Preserve ar(1 To c + 10)
  18.     '**  Preserve 選擇性引數。當改變原有陣列最後一維的大小時,仍然保有原來的資料的關鍵字
  19.     For i = c + 1 To UBound(ar) Step 3
  20.         ar(i) = i & Chr(67)
  21.    
  22.     Next
  23.     MsgBox UBound(ar) & vbLf & Join(ar, ",,")
  24.    
  25. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 稻穗結得越飽滿,越會往下垂,一個人越有成就,就要越有謙沖的胸襟。
返回列表 上一主題