[已解決][發問]程式簡化-陣列-VBA ,尋找某元素是否存在陣列中。
- 帖子
- 132
- 主題
- 25
- 精華
- 0
- 積分
- 199
- 點名
- 0
- 作業系統
- window XP
- 軟體版本
- Excel 2010
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 台灣 新竹
- 註冊時間
- 2010-6-1
- 最後登錄
- 2022-7-14
  
|
[已解決][發問]程式簡化-陣列-VBA ,尋找某元素是否存在陣列中。
本帖最後由 Baracuda 於 2011-4-7 09:24 編輯
- Option Explicit
- Option Base 1
- Dim Input_No As Integer, Output_No As Integer
- Dim Output_Sht_Name_Ary, Input_Sht_Name_Ary
- Sub initial()
- Input_Sht_Name_Ary = Array("一", "五", "八")
- Output_Sht_Name_Ary = Array("一", "二", "三", "四", "五", "六")
- Input_No = UBound(Input_Sht_Name_Ary)
- Output_No = UBound(Output_Sht_Name_Ary)
- End Sub
- Sub main()
- Call initial
- Call Print_Not_Found
- End Sub
- Sub Print_Not_Found()
- Dim Sht_Cnt As Integer
- Dim Ctr_1 As Integer, Ctr_2 As Integer
- Dim Found_Or_Not As Boolean
-
- Found_Or_Not = False
-
- For Ctr_1 = 1 To Input_No
-
- For Ctr_2 = 1 To Output_No
- If Input_Sht_Name_Ary(Ctr_1) = Output_Sht_Name_Ary(Ctr_2) Then
- Found_Or_Not = True
- Exit For
- End If
- Next Ctr_2
- If Not (Found_Or_Not) Then
- Debug.Print Input_Sht_Name_Ary(Ctr_1)
- End If
-
- Found_Or_Not = False
- Next Ctr_1
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 132
- 主題
- 25
- 精華
- 0
- 積分
- 199
- 點名
- 0
- 作業系統
- window XP
- 軟體版本
- Excel 2010
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 台灣 新竹
- 註冊時間
- 2010-6-1
- 最後登錄
- 2022-7-14
  
|
2#
發表於 2011-3-28 18:21
| 只看該作者
程式的原始碼如上:
現在是用2 個廻圈在尋找是否 Input 的 Element 有存在 Output 的 Array 中。
想請問有無較簡潔的語法可以解決。
依照現在的程式可以找出 "八"是不在 Array Output 之中。 |
|
|
|
|
|
|
- 帖子
- 227
- 主題
- 3
- 精華
- 1
- 積分
- 273
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- XP
- 閱讀權限
- 20
- 性別
- 女
- 註冊時間
- 2011-3-22
- 最後登錄
- 2013-1-29
|
3#
發表於 2011-3-28 21:18
| 只看該作者
a = Array("一", "五", "八")
b = Array("一", "二", "三", "四", "五", "六")
For i = 0 To UBound(a)
If UBound(Filter(b, a(i))) = -1 Then
MsgBox "不 包含" & a(i)
Else
MsgBox "包含" & a(i)
End If
Next |
|
|
|
|
|
|
- 帖子
- 132
- 主題
- 25
- 精華
- 0
- 積分
- 199
- 點名
- 0
- 作業系統
- window XP
- 軟體版本
- Excel 2010
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 台灣 新竹
- 註冊時間
- 2010-6-1
- 最後登錄
- 2022-7-14
  
|
4#
發表於 2011-3-29 09:10
| 只看該作者
chin15 的方法比我的有效率。
少了一個 Loop 。
這樣的程式也比較簡短。
如果還有別的方式,請各位大哥大姐再幫忙一下。 |
|
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
5#
發表於 2011-3-29 10:22
| 只看該作者
本帖最後由 GBKEE 於 2011-3-29 10:26 編輯
回復 4# Baracuda - Sub Ex()
- A = Array("一", "五", "八")
- b = Array("一", "二", "三", "四", "五", "六")
- For Each E In A
- M = Application.Match(E, b, 0)
- MsgBox E & IIf(IsNumeric(M), "存在於 ", " 不存在於 ") & Join(b, ",")
- Next
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 132
- 主題
- 25
- 精華
- 0
- 積分
- 199
- 點名
- 0
- 作業系統
- window XP
- 軟體版本
- Excel 2010
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 台灣 新竹
- 註冊時間
- 2010-6-1
- 最後登錄
- 2022-7-14
  
|
6#
發表於 2011-3-30 00:25
| 只看該作者
GBKEE 謝謝。
這個程式 Work
請問一下變數的型態
E & M 各為何種型態。我現在是設成 Variant
E 設成 String 不會work。
請賜教一下。 |
|
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
7#
發表於 2011-3-30 12:56
| 只看該作者
本帖最後由 GBKEE 於 2011-3-30 14:31 編輯
回復 6# Baracuda
迴圈 FOR EACH E IN 物件 E的型態是Variant 或 Object
如 物件是 Range 範圍 E的型態可設為 Range
M = Application.Match(E, b, 0) 傳回 數字 或 #NA
M 的型態 是 Variant |
|
|
|
|
|
|
- 帖子
- 227
- 主題
- 3
- 精華
- 1
- 積分
- 273
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- XP
- 閱讀權限
- 20
- 性別
- 女
- 註冊時間
- 2011-3-22
- 最後登錄
- 2013-1-29
|
8#
發表於 2011-3-30 13:17
| 只看該作者
可以用TypeName 函數取得變數類型
MsgBox TypeName(M) |
|
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
9#
發表於 2011-3-30 14:34
| 只看該作者
6樓 問 E 設成 String 不會work。
這是宣告 型態的問題 |
|
|
|
|
|
|
- 帖子
- 132
- 主題
- 25
- 精華
- 0
- 積分
- 199
- 點名
- 0
- 作業系統
- window XP
- 軟體版本
- Excel 2010
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 台灣 新竹
- 註冊時間
- 2010-6-1
- 最後登錄
- 2022-7-14
  
|
10#
發表於 2011-3-31 09:22
| 只看該作者
謝謝 GBKEE,我也是先這樣設定變數型態。
只是我怕太過於耗系統資源(雖然現在的系統資源都還好),但是為養成好習慣,還是平常就省著點用。 |
|
|
|
|
|
|