返回列表 上一主題 發帖

不用迴圈,不用Worksheet函數(match等),判斷某element在是否陣列中

不用迴圈,不用Worksheet函數(match等),判斷某element在是否陣列中

例如
  1. Sub ss_test1()
  2.     alltype = Array("A類", "B類", "C類", "D類", "E類", "F類", "G類", "H類", "I類", "J類")
  3.     aj = "1D類"
  4.     If UBound(Filter(alltype, aj)) < 0 Then Debug.Print "Empty"
  5.     Stop
  6. End Sub
複製代碼
ss

回復 1# sunnyso

判斷該element在陣列中位置
Debug.Print UBound(Split(Split(Join(alltype, "|"), aj)(0), "|")) + 1
  1.     If UBound(Filter(alltype, aj)) < 0 Then
  2.         Debug.Print "Empty"
  3.     Else
  4.         Debug.Print UBound(Split(Split(Join(alltype, "|"), aj)(0), "|")) + 1
  5.     End If
複製代碼
ss

TOP

回復  sunnyso

判斷該element在陣列中位置
Debug.Print UBound(Split(Split(Join(alltype, "|"), aj)( ...
sunnyso 發表於 2013-6-30 23:11


樓上有bug,改爲
  1.     If UBound(Filter(alltype, aj)) < 0 Then
  2.         Debug.Print "Empty"
  3.     Else
  4.         Debug.Print UBound(Split(Split(“ ” & Join(alltype, "|"), aj)(0), "|"))
  5.     End If
複製代碼
ss

TOP

本帖最後由 sunnyso 於 2013-7-1 09:41 編輯

回復 4# GBKEE


版大你的code有bug,跟我第一次的code(2樓)一樣的bug。就是第一element(即: "A類") 回傳 -1
應該像我3樓的改動(或者看我另一帖子)才可以,在Join 後的 AllType前面加上一個任意非 S(輔助字串)的字串,例如“<space>", 不然第一個emement會回傳-1, 還有在Join 後的 AllType後面並不需要串輔助字串

改動後如下
  1. Sub ss_teswt()
  2.     alltype = Array("A類", "B類", "C類", "D類", "E類", "F類", "G類", "H類", "I類", "J類")
  3.     Aj = "J類"
  4.     If UBound(Filter(alltype, Aj)) < 0 Then
  5.         Debug.Print "Empty"
  6.     Else
  7.         Debug.Print UBound(Split(Split(" " & Join(alltype, "|"), Aj)(0), "|"))
  8.     End If
  9.     'Stop
  10. End Sub
複製代碼
ss

TOP

回復 6# GBKEE

的確,再想想有沒有更好的方法
ss

TOP

回復 4# GBKEE

這樣可以少一IF判斷
  1. Sub Ex()
  2.     Dim S As String, alltype(), Aj As String, Ar  As String
  3.     S = ","                           '輔助字串
  4.     alltype = Array("DA類", "B類", "DEC類", "EC類", "C類", "F類", "G類", "H類", "I類", "J類")
  5.     Aj = S & "DA類" & S
  6.     Ar = " " & S & Join(alltype, S)
  7.     If InStr(Ar, Aj) = 0 Then
  8.         Debug.Print "Empty"
  9.     Else
  10.        Ar = Split(Ar, Aj)(0)
  11.        Debug.Print UBound(Split(Ar, S))
  12.     End If
  13. End Sub
複製代碼
1

評分人數

    • GBKEE: 精品文章金錢 + 4
ss

TOP

回復 9# GBKEE

6樓的code適合以關鍵字來判斷element的位置
ss

TOP

        靜思自在 : 犯錯出懺悔心,才能清淨無煩惱。
返回列表 上一主題