不用迴圈,不用Worksheet函數(match等),判斷某element在是否陣列中
- 帖子
- 605
- 主題
- 92
- 精華
- 0
- 積分
- 648
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 50
- 性別
- 男
- 來自
- macau
- 註冊時間
- 2013-4-5
- 最後登錄
- 2019-2-10
 
|
不用迴圈,不用Worksheet函數(match等),判斷某element在是否陣列中
例如- Sub ss_test1()
- alltype = Array("A類", "B類", "C類", "D類", "E類", "F類", "G類", "H類", "I類", "J類")
- aj = "1D類"
- If UBound(Filter(alltype, aj)) < 0 Then Debug.Print "Empty"
- Stop
- End Sub
複製代碼 |
|
ss
|
|
|
|
|
- 帖子
- 605
- 主題
- 92
- 精華
- 0
- 積分
- 648
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 50
- 性別
- 男
- 來自
- macau
- 註冊時間
- 2013-4-5
- 最後登錄
- 2019-2-10
 
|
2#
發表於 2013-6-30 23:11
| 只看該作者
回復 1# sunnyso
判斷該element在陣列中位置
Debug.Print UBound(Split(Split(Join(alltype, "|"), aj)(0), "|")) + 1- If UBound(Filter(alltype, aj)) < 0 Then
- Debug.Print "Empty"
- Else
- Debug.Print UBound(Split(Split(Join(alltype, "|"), aj)(0), "|")) + 1
- End If
複製代碼 |
|
ss
|
|
|
|
|
- 帖子
- 605
- 主題
- 92
- 精華
- 0
- 積分
- 648
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 50
- 性別
- 男
- 來自
- macau
- 註冊時間
- 2013-4-5
- 最後登錄
- 2019-2-10
 
|
3#
發表於 2013-7-1 00:01
| 只看該作者
回復 sunnyso
判斷該element在陣列中位置
Debug.Print UBound(Split(Split(Join(alltype, "|"), aj)( ...
sunnyso 發表於 2013-6-30 23:11 
樓上有bug,改爲- If UBound(Filter(alltype, aj)) < 0 Then
- Debug.Print "Empty"
- Else
- Debug.Print UBound(Split(Split(“ ” & Join(alltype, "|"), aj)(0), "|"))
- End If
複製代碼 |
|
ss
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
4#
發表於 2013-7-1 08:21
| 只看該作者
本帖最後由 GBKEE 於 2013-7-1 10:02 編輯
回復 3# sunnyso
判斷完全等於該element在陣列中位置- Sub Ex()
- Dim S As String, alltype(), Aj As String, Ar As String
- S = "," '輔助字串
- alltype = Array("A類", "B類", "DEC類", "EC類", "C類", "F類", "G類", "H類", "I類", "J類")
- Aj = S & "C類" & S
- Ar = S & Join(alltype, S) & S
- If InStr(Ar, Aj) = 0 Then
- Debug.Print "Empty"
- Else
- Ar = Split(Ar, Aj)(0)
- Debug.Print IIf(UBound(Split(Ar, S)) < 0, 0, UBound(Split(Ar, S)))
- End If
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 605
- 主題
- 92
- 精華
- 0
- 積分
- 648
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 50
- 性別
- 男
- 來自
- macau
- 註冊時間
- 2013-4-5
- 最後登錄
- 2019-2-10
 
|
5#
發表於 2013-7-1 09:36
| 只看該作者
本帖最後由 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後面並不需要串輔助字串
改動後如下- Sub ss_teswt()
- alltype = Array("A類", "B類", "C類", "D類", "E類", "F類", "G類", "H類", "I類", "J類")
- Aj = "J類"
- If UBound(Filter(alltype, Aj)) < 0 Then
- Debug.Print "Empty"
- Else
- Debug.Print UBound(Split(Split(" " & Join(alltype, "|"), Aj)(0), "|"))
- End If
- 'Stop
- End Sub
複製代碼 |
|
ss
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
6#
發表於 2013-7-1 10:04
| 只看該作者
本帖最後由 GBKEE 於 2013-7-1 10:09 編輯
回復 5# sunnyso
謝謝指正有錯當改 , 4#已修正.
可是如這樣還是有bug 找到 "JJ類"- Sub ss_teswt()
- alltype = Array("A類", "B類", "C類", "D類", "JJ類", "F類", "G類", "H類", "I類", "J類")
- Aj = "J類"
- If UBound(Filter(alltype, Aj)) < 0 Then
- Debug.Print "Empty"
- Else
- Debug.Print UBound(Split(Split(" " & Join(alltype, "|"), Aj)(0), "|"))
- End If
- 'Stop
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 605
- 主題
- 92
- 精華
- 0
- 積分
- 648
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 50
- 性別
- 男
- 來自
- macau
- 註冊時間
- 2013-4-5
- 最後登錄
- 2019-2-10
 
|
7#
發表於 2013-7-1 10:21
| 只看該作者
回復 6# GBKEE
的確,再想想有沒有更好的方法 |
|
ss
|
|
|
|
|
- 帖子
- 605
- 主題
- 92
- 精華
- 0
- 積分
- 648
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 50
- 性別
- 男
- 來自
- macau
- 註冊時間
- 2013-4-5
- 最後登錄
- 2019-2-10
 
|
8#
發表於 2013-7-1 10:44
| 只看該作者
回復 4# GBKEE
這樣可以少一IF判斷- Sub Ex()
- Dim S As String, alltype(), Aj As String, Ar As String
- S = "," '輔助字串
- alltype = Array("DA類", "B類", "DEC類", "EC類", "C類", "F類", "G類", "H類", "I類", "J類")
- Aj = S & "DA類" & S
- Ar = " " & S & Join(alltype, S)
- If InStr(Ar, Aj) = 0 Then
- Debug.Print "Empty"
- Else
- Ar = Split(Ar, Aj)(0)
- Debug.Print UBound(Split(Ar, S))
- End If
- End Sub
複製代碼 |
-
1
評分人數
-
|
ss
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
9#
發表於 2013-7-1 10:51
| 只看該作者
回復 8# sunnyso
在此討論區就是要有如此的交流精神,謝謝你 |
|
|
|
|
|
|
- 帖子
- 605
- 主題
- 92
- 精華
- 0
- 積分
- 648
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 50
- 性別
- 男
- 來自
- macau
- 註冊時間
- 2013-4-5
- 最後登錄
- 2019-2-10
 
|
10#
發表於 2013-7-1 11:26
| 只看該作者
回復 9# GBKEE
6樓的code適合以關鍵字來判斷element的位置 |
|
ss
|
|
|
|
|