请教大家,假如有个一维数组
a(1)="Y111"
a(2)="Y222"
a(3)="Y112"现在我知道数组中有个 Y112 的值,要快速找出是属于a数组的那一项值(即知道项值是3),不用循环,有没什么快速的方法找出来? (另试过Filter函数,但并不能如愿)
a(1)="Y111"
a(2)="Y222"
a(3)="Y112"现在我知道数组中有个 Y112 的值,要快速找出是属于a数组的那一项值(即知道项值是3),不用循环,有没什么快速的方法找出来? (另试过Filter函数,但并不能如愿)
解决方案 »
- [microsoft][odbc驱动程序管理器]中未发现数据源名称并且没有指定默认驱动程序
- 各位帮忙:sql生成的数据库脚本为什么不能在VB中执行呀?
- 急,一个关于自己写的控件的问题
- VB怎么去掉字符串末尾的回车符?
- 用Winsock怎样向DNS服务器查询MX记录?
- 请问在数据环境设计器中如何实现查询,插入,删除功能?
- 如何将记录集中的数据以表格形式写到Word文档中?
- 程序中用到word9.0的库,但如果用户没有安装office怎么办?
- VB部件对话框中出现的部件“字符串”保存在什么地方?
- 我现在想学习用VB面向对象的程序开发,不知道哪儿有这方面的资料或程序代码可以学习,请大家帮帮忙告诉我!!谢谢!!!
- 求解下把Picture转为AscII的作用
- VB中TextBox控件对Chr(10)是不是不起作用
Private Sub Form_Load()
Dim i As Integer
For i = 0 To 32766
List1.AddItem "Y" & Format(i, "00000")
Next
End Sub
Private Sub Command1_Click()
'设置只读属性List1.Sorted = True
Debug.Print List1.List(112) '找出并输出Y00112这一项
End Sub
"user32" Alias "SendMessageA" (ByVal hWND As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As String) As LongPrivate Const LB_FINDSTRINGEXACT = &H1A2 '在 ListBox 中精确查找
Private Const CB_FINDSTRINGEXACT = &H158 '在 ComboBox 中精确查找例:n = SendMessagebyString (List1.hwnd, LB_FINDSTRINGEXACT, -1, "Y112")
即你提到ListBox,我顺便请教一下,动态添ListBox项和值时,默认ListBox的项必需是0开始编起,而我想指定什么样的数字做为项都可以(当然不会重)该怎做的?
Dim tmp
tmp = Join(arr)
tmp = Split(tmp, res, 2)(0)
GetValue = UBound(Split(tmp, Chr(32)))
End Function'测试:
Private Sub Command1_Click()
Dim i As Long
Dim arr(3000) As String
'添加测试数据
For i = 0 To 3000
arr(i) = Chr(Int(Rnd * 26 + 65)) & Int(Rnd * 999)
Next
'Debug.Print arr(1000)
MsgBox GetValue(arr, "U245")
'Debug.Print arr(2999)
MsgBox GetValue(arr, "L267")
End Sub
Function GetValue(arr() As String, res As String) As Long
Dim tmp
res = Chr(32) & res & Chr(32)
tmp = Chr(32) & Join(arr) & Chr(32)
If InStr(tmp, res) = 0 Then '不存在
GetValue = -1
Exit Function
End If
tmp = Split(tmp, res, 2)(0)
GetValue = UBound(Split(tmp, Chr(32)))
End Function
试了一下你给的代码,发现个BUG,如两个以上数组等于相同的值,但只能找出一个项,这时应该要两个以上了
或者你喜欢这样
dim i as long
select case "Y112"
case a(1): i =1
case a(2): i =2
case a(3): i =3
end slect
debug.print i
Sub GetValue(arr() As String, res As String)
Dim tmp
Dim i As Long, n As Long
res = Chr(32) & res & Chr(32)
tmp = Chr(32) & Join(arr) & Chr(32)
While InStr(tmp, res)
DoEvents
tmp = Mid(tmp, 1, InStrRev(tmp, res))
n = UBound(Split(tmp, Chr(32)))
Debug.Print n - 1
Wend
End Sub