Sub test()
Dim a, b As Range, i%, j%, arr
a = Sheet1.Range(Sheet1.[a2], Sheet1.[b65536].End(3))
With Sheet2
Set b = .Range(.[a2], .[a65536].End(3))
For i = 1 To UBound(a)
arr = Filter(Application.Transpose(b), a(i, 1))
For j = 0 To UBound(arr)
b.Find(arr(j))(1, 2) = a(i, 2)
Next
Next
End With
End Sub
相同的目的,寫法何止千百,這樣是否較易於理解?作者: GBKEE 時間: 2011-5-9 09:01
Dim MyBook As Workbook, ShtA As Worksheet, ShtB As Worksheet, HeadA As Range, HeadB As Range, _
RowsA As Long, RowsB As Long, bClmn(1 To 4) As Range, Ax(1 To 2), i, j 'bclmn(1 to N) N= sheet1 的 數量表示 如 取消= 4
Sub 共用參照()
Set MyBook = ThisWorkbook
Set ShtA = MyBook.Sheets("Sheet1")
Set HeadA = ShtA.Range("A1")
With HeadA: RowsA = .Cells(65536 - .Row + 1, 1).End(xlUp).Row - .Row: End With
'-----------------------------------
Set ShtB = MyBook.Sheets("Sheet2")
Set HeadB = ShtB.Range("A1")
With HeadB: RowsB = .Cells(65536 - .Row + 1, 1).End(xlUp).Row - .Row: End With
End Sub
Sub 匯入()
Call 共用參照
If RowsA <= 0 Then MsgBox "※匯入來源無項目資料! ", 0 + 16: Exit Sub
If RowsB <= 0 Then MsgBox "※匯入目標無項目資料! ", 0 + 16: Exit Sub
Application.ScreenUpdating = False
'-----------------------------------------
Set bClmn(1) = Range(HeadB.Cells(2, 1), HeadB.Cells(RowsB + 1, 1))
Set bClmn(2) = Range(HeadB.Cells(2, 2), HeadB.Cells(RowsB + 1, 2))
Set bClmn(3) = Range(HeadB.Cells(2, 30), HeadB.Cells(RowsB + 1, 30))
Set bClmn(4) = Range(HeadB.Cells(2, 30), HeadB.Cells(RowsB + 1, 30)) 'set bclmn(N) N= sheet1 的 數量表示 如 取消= 4 如欲增加該數量表示 則必須新增1列
'-------------------------------------------
bClmn(3).Value = bClmn(1).Value
bClmn(2).FormulaR1C1 = "=IF(RC[28]=RC[-1],"""",RC[28])"
For i = 2 To RowsA + 1
Ax(1) = HeadA.Cells(i, 1).Value
Ax(2) = HeadA.Cells(i, 2).Value
If Ax(1) <> "" And Ax(2) <> "" Then
bClmn(3).Replace "*" & Ax(1) & "*", Ax(2), Lookat:=xlPart
End If
Next i
'-----------------------------------------
bClmn(2).Value = bClmn(2).Value
bClmn(3).ClearContents
Beep
End Sub作者: jesscc 時間: 2011-5-9 20:39
If InStr(a, ky) > 0 Then a.Offset(, 12).Resize(, 32) = d(ky): Exit For
Next
Next
End With
End Sub
複製代碼
作者: Hsieh 時間: 2011-5-10 22:41
這段就是你的資料範圍對嗎?
For i = 1 To 32
d(a & "") = Array(a.Offset(, i).Value) ', a.Offset(, 2).Value, a.Offset(, 3).Value, a.Offset(, 4).Value)
Next i
這樣單筆資料還是只有4欄
改成
Dim Ar(32)
For i = 0 To 31
Ar(i) = a.Offset(, i).Value
Next i
d(a & "") =Ar
這樣就有32欄資料作者: jesscc 時間: 2011-5-10 22:59