返回列表 上一主題 發帖

match 搜尋不同工作表可以指定變數嗎?

回復 3# EGBT
是這樣嗎?
  1. Option Explicit
  2. Sub EX()
  3.     Dim 數值(), 陣列(), e As Variant, M As Variant
  4.     數值 = Array(0, "a" , 100 , "bb", 88)
  5.     陣列 = Array(88, "cc", 0, "a", "bb")
  6.     For Each e In 數值
  7.         M = Application.Match(e, 陣列, 0)
  8.         Debug.Print e, M '指令:檢視->即時運算視窗
  9.     Next
  10. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 11# EGBT

回復 13# ikboy

參考這裡
http://forum.twbts.com/thread-10339-1-1.html
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 17# EGBT
試試看 你的附檔程式碼
  1. Option Explicit
  2. Sub Ex()
  3.     Dim 數值表 As Variant, 陣列表 As Variant, E As Variant, EE As Variant
  4.     Dim Ar(), Ar1(1 To 2), Ar2(), i As Integer, M As Variant
  5.     '假設x1為1~n個sheet (但不知道有幾個sheet),由下面程式碼取得
  6.     For Each E In Sheets
  7.         If E.Name Like "數值*" Then 數值表 = 數值表 & "," & E.Name '字串:集合數值表
  8.         If E.Name Like "陣列*" Then 陣列表 = 陣列表 & "," & E.Name '字串:集合陣列表
  9.     Next
  10.     '*******************************************
  11.     數值表 = Split(Mid(數值表, 2), ",")   '陣列: 字串以","分割為陣列
  12.     陣列表 = Split(Mid(陣列表, 2), ",")
  13.     ReDim Ar2(0)                           '重置陣列
  14.     For Each E In Sheets(數值表)           '工作表陣列(數值表)
  15.         '每一數值表
  16.         Ar = E.Range("A:A").SpecialCells(xlCellTypeConstants).Value '數值資料置入陣列
  17.         Ar = Application.WorksheetFunction.Transpose(Ar)            '陣列:二維(橫)轉一維(直)
  18.         For Each EE In Sheets(陣列表)                               '工作表陣列(陣列表)
  19.             '每一陣列表
  20.             For i = 1 To UBound(Ar)                                 '數值資料陣列
  21.                 M = Application.Match(Ar(i), EE.Range("A:A"), 0)    '每一陣列表中Match數值
  22.                 Ar1(1) = E.Name & " -" & Ar(i)
  23.                 If IsError(M) Then
  24.                     Ar1(2) = EE.Name & " - 找不到"
  25.                 Else
  26.                     Ar1(2) = EE.Name & " -A" & M
  27.                 End If
  28.                 Ar2(UBound(Ar2)) = Ar1
  29.                 ReDim Preserve Ar2(UBound(Ar2) + 1)    '陣列重置元素索引值,Preserve(保留原有元素)
  30.             Next
  31.         Next
  32.     Next
  33.     ReDim Preserve Ar2(UBound(Ar2) - 1) '陣列轉置時如子元素有為陣列,其他子元素須為相同大小的陣列
  34.     Sheets("結果").Range("A1").Resize(UBound(Ar2) - 1, 2) = Application.Transpose(Application.Transpose(Ar2))
  35. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 20# EGBT
  1. Sub Ex()
  2.     Dim 數值表 As Variant, 陣列表 As Variant, E As Variant
  3.     'Variant 資料型態是所有沒被明確宣告為其他型態,可以為認何的資料型態
  4.     For Each E In Sheets
  5.         If E.Name Like "數值*" Then
  6.             數值表 = 數值表 & "," & E.Name '字串:集合數值表
  7.            MsgBox VarType(數值表) '8 (字串 )
  8.         End If
  9.     Next
  10.     '*******************************************
  11.     'Split : 字串以 "," (任何指定的字串) 分割而成為陣列
  12.     數值表 = Split(Mid(數值表, 2), ",")
  13.     '*******************************************
  14.     MsgBox VarType(數值表) '8192 (陣列) + 8 (字串 )
  15.     For Each E In Array("數值1", "數值2", "數值3")         '工作表陣列(數值表)
  16.         MsgBox VarType(E)   '8 (字串 )
  17.     Next
  18.     'For Each E In Sheets(Array("數值1", "數值2", "數值3"))         '工作表陣列(數值表)
  19.     For Each E In Sheets(數值表)           '工作表陣列(數值表)
  20.         MsgBox VarType(E)   ' 9 物件
  21.     Next
  22. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 25# EGBT
  1. Option Explicit
  2. Sub Ex()
  3.     Dim 數值表 As Variant, e As Variant
  4.     數值表 = "數值甲%A#數值1%A#數值2%A#數值123456%A#數值abc"
  5.     '*******************************************
  6.     'Split : 以所指定的字串, 分割而成為陣列
  7.     數值表 = Split(數值表, "%A#")
  8.     '*******************************************
  9.     For Each e In 數值表
  10.         MsgBox e
  11.     Next
  12. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

假設 "數值1" 在 "陣列1" 做Match
比對出來是好幾列,那我要怎麼抓出比對後的列數,在B欄的內容?

請參考 第18樓的程式碼
我是直接改
EE.Activate,激活Sheet去抓取,
EGBT 發表於 2015/9/19 18:50

不需 EE.Activate,EE.Select 移動活頁簿的工作表
  1. With EE
  2.    .Range("A1")="XXX"
  3. End With
  4.   
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 33# EGBT
  1. Option Explicit
  2. Sub Ex()
  3.    ' Dim I As Integer, AR()  '這樣會溢位
  4.     'Integer 變數係以範圍為 -32,768 到 32,767 之 16 位元 (2 個位元組) 數字的形式儲存
  5.     Dim I As Single, AR()
  6.     'Single (單精度浮點數) 變數係以 IEEE 32 位元 (4 個位元組) 浮點數字的形式儲存,
  7.     '它的範圍在負數的時候是從 -3.402823E38 到 -1.401298E-45,
  8.     '而在正數的時候是從 1.401298E-45 到 3.402823E38。Single 的型態宣告字元為 !。
  9.    
  10.     ReDim AR(1 To Rows.Count)
  11.     AR(Rows.Count) = #1/1/2015#
  12.     I = Application.Match(#2/1/2015#, AR, -1)
  13.     MsgBox I

  14. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 3# citizen0923
  1. Private Sub CommandButton1_Click()
  2.     'Cells(4, 1) = Application.Match(A3, Sheets("AAA").Range("A1:A10"), 0)
  3.     Cells(4, 1) = Application.Match([A3], Sheets("AAA").Range("A1:A10"), 0)
  4.     Cells(4, 1) = Application.Match(Range("A3"), Sheets("AAA").Range("A1:A10"), 0)
  5. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 38# EGBT
401298E-45 到 3.402823E38 是科學記號,請GOOGLE 查看了解
Dim i, y, x As Single
'i, y 沒指定都是 As Variant,V請自行查看 VBA 的說明
i, y             程式可以接受傳回錯誤值,
x As Single 必須是傳回數字,程式不接受錯誤值.
  1. Application.Match("A1", Range("C1:C14"), -1)
複製代碼
請看40樓的程式碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 口說好話、心想好意、身行好事。
返回列表 上一主題