返回列表 上一主題 發帖

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

回復 8# ikboy


    還有一個問題是

打Application.WorkSheetFunction.Match...跟打Application.Match...有什麼不一樣?

TOP

簡寫的常數二維陣列, 即 = Application.Transpose(Application.Transpose(Array(Array("數值1","陣列1"), Array("數值2","陣列2"), Array("數值3","陣列3"))))

TOP

打Application.WorkSheetFunction.Match...跟打Application.Match...有什麼不一樣?
又是簡寫

TOP

回復 12# ikboy


    天啊,很感謝你的回答~!

TOP

回復 11# EGBT

回復 13# ikboy

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

TOP

多謝GBKEE版主指教, 懂了。

TOP

回復 15# GBKEE


    GBKEE大大您好

我的MATCH問題如下..(雖然很多大大都有回答但還是不太能夠讓我理解><)

假設x1為1~n個sheet (但不知道有幾個sheet),每個sheet裡面都有不規則數值,這裡就是放在Match的數值

假設y1為1~n個sheet (但不知道有幾個sheet),每個sheet裡面都有不規則的陣列數,這裡就是放在Match的陣列

我用粗糙的方法去計算有幾個x1和裡面的數值以及計算y1和裡面的陣列數

這樣不知道Match...附上檔案好像也說不太明白

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

回復 18# GBKEE


    天啊..神人一枚!!!

小弟 Orz...

深思中!!

TOP

回復 18# GBKEE


    我想要請問大大,
  1. Dim 數值表 As Variant, 陣列表 As Variant, E As Variant, EE As Variant
  2.     Dim Ar(), Ar1(1 To 2), Ar2(), i As Integer, M As Variant
  3.     '假設x1為1~n個sheet (但不知道有幾個sheet),由下面程式碼取得
  4.     For Each E In Sheets
  5.         If E.Name Like "數值*" Then 數值表 = 數值表 & "," & E.Name '字串:集合數值表
  6.         If E.Name Like "陣列*" Then 陣列表 = 陣列表 & "," & E.Name '字串:集合陣列表
  7.     Next
  8.     '*******************************************
  9.     數值表 = Split(Mid(數值表, 2), ",")   '陣列: 字串以","分割為陣列
  10.     陣列表 = Split(Mid(陣列表, 2), ",")
  11.     ReDim Ar2(0)                           '重置陣列
  12.     For Each E In Sheets(數值表)           '工作表陣列(數值表)
複製代碼
上面的「Dim 數值表 As Variant」他不是只是將「數值表」宣告成Variant

為什麼在下方「If E.Name Like "數值*" Then 數值表 = 數值表 & "," & E.Name」,這感覺有點像把相似「數值」的Sheet放入到數值表裡面,不是陣列也可以這麼做嗎?

還有下方的「For Each E In Sheets(數值表)」將數值表放到「E」裡面..數值表它不是只是普通的變數嗎? 怎麼可以把它變成像是陣列呢?

我是覺得...類似Sheets(數值(S)) <- 是放「數值(S)」陣列,將陣列放到E...

麻煩大大開示

TOP

        靜思自在 : 一個人的快樂.不是因為他擁有得多,而是因為他計較得少。
返回列表 上一主題