假設我用回圈跑標題列,將需要標題找出,欄位分別記入到二維陣列中..
此時假設
陣列(1,1)=姓名 .陣列(1,2)=2
陣列(2,1)=血型 .陣列(2,2)=4
陣列(3,1)=身高 .陣列(3,2)=5
陣列(4,1)=性別 .陣列(4,2)=10
....
....
此時我可以利用陣列的索引編號來回查所需的內容
但如果我不想利用索引編號來回查...(因為內容過多時,編號變得不好處理了)
那有什麼方法我可以再從以存入要用的資料的陣列內,再次利用如:姓名...血型...等來回查其所屬的欄位在哪一欄呢?
想到頭都爆了= ="" Orz
ren1244 wrote:
看不出來這樣設計的目(恕刪)
恩...先謝謝您熱心的回覆
其實是因為陣列這東東我才剛接觸...實在很模糊.
我主要是想利用陣列的方式來做標題列的存放與相關欄位的記錄.
例如:標題列B1格為姓名 .D1為血型...
則我抓到姓名這關鍵字後,
將"姓名" 存入陣列(1,1),然後順道將姓名所在的欄存到陣列(2,1)
同理,我抓到標題列有血型這關鍵字時,將"血型"存到陣列(1,2),將血列的欄位存入陣列(2,,2)
以此類推下..
陣列(1,1)=姓名.
陣列(2,1)= 1 'A欄
陣列(1,2)=血型
陣列(2,2)= 4 'D欄
、、、、、
-------------------------
其主要目的是為了日後回查關鍵字時,能抓到對應的欄位所在
另若情況可以,不知可否再多請教下,用range來抓欄位的方法..
因為我用range抓欄位時,凡超過Z欄後..就不知怎麼抓欄位了..很久前我好像有用過某個函數來轉成英文字母..
但欄位太多時也是會錯位..
故最後都是用cells(row,column)來抓位置的..
恩..其它就是若此抓位置的方式有其它更好的方法可供解決,也請不吝指教..拜託了..
祝順心如意..
MaverickRay wrote:
那有什麼方法我可以再從以存入要用的資料的陣列內,再次利用如:姓名...血型...等來回查其所屬的欄位在
您的作法有點「奇怪」,正常來說,如果是要記錄個人資料,欄位應該會是固定的。
比如:
如果是單純紀錄列,那第一列(標題列不算)放甲的資料,A欄固定是姓名、B欄固定是血型、C固定是身高....以此類推。
所以不用放標題「姓名、血型....」的資料(已經是固定,只要另外跑一次迴圈,就能得到全部的標題值)
有5個人,那
(1,1)就放甲姓名...抓cells(1,1);(1,2)就放甲的血型...抓cells(1,2);..........
(2,1)就放乙姓名...抓cells(2,1);(1,2)就放乙的血型...抓cells(2,2);..........
如果是履歷表格式(5個人資料都放同一張工作表),那甲的資料區,B1固定是姓名、D1固定是血型.....乙的資料區,B35(假設)、D35固定是血型.....丙的資料區,B69(假設)、D69固定是血型 .....(每張表佔34列,假設)
一樣不用放標題「姓名、血型....」的資料(已經是固定,只要另外跑一次迴圈,就能得到全部的標題值)
有5個人,那
(1,1)就放甲姓名...抓cells(1,2);(1,2)就放甲的血型...抓cells(1,4);.............1可用 1+(i-1)*34取得,變數i=1
(2,1)就放乙姓名...抓cells(35,2);(2,2)就放乙的血型...抓cells(35,4);..........35可用 1+(i-1)*34取得,變數i=2
(3,1)就放丙姓名...抓cells(69,2);(3,2)就放乙的血型...抓cells(69,4);..........69可用 1+(i-1)*34取得,變數i=3
.......以此類推
總之,標題可用「寫死」,或另用一個一維陣列處理;資料的2維陣列就不用放標題,而是只放純資料。
MaverickRay wrote:
但如果我不想利用索引編號來回查...(因為內容過多時,編號變得不好處理了)
那有什麼方法我可以再從以存入要用的資料的陣列內,再次利用如:姓名...血型...等來回查其所屬的欄位在哪一欄呢?
有個方法,使用VBA的字典功能........(可google查詢關鍵字:VBA 字典)
例如:
d("姓名")="張三"
d("血型")="O"
d("地址")="台中市"
......
存入字典陣列中,將來可以:1.用列舉key或值的陣列編號來迴圈取得內容;2.直接用Key的值來取得內容:
Msgbox d("血型")
馬上就得到O,不用用編號跑迴圈
MaverickRay wrote:
因為我用range抓欄位時,凡超過Z欄後..就不知怎麼抓欄位了..很久前我好像有用過某個函數來轉成英文字母..
但欄位太多時也是會錯位..
故最後都是用cells(row,column)來抓位置的..
用cells的好處就是可以套變數數字,不用再去轉英文字母啊.........
如果是怕欄數數錯,可以:
1.在工作表內該欄位(比如AA1)下函數「=column()」,這樣就會得到27
2.寫一個自訂函數function,來將英文欄位轉成數字編號。(算簡單,不難,自己動手才有成就感)
甚至Range的寫法也可以套用cells,比如:
Range(Cells(1, 27), Cells(1, 27)).Select
就是選取AA1儲存格,和寫成:
Range("AA1").Select
效果一樣。
以上,提供樓主您參考囉
Der,misser1
EX:
Private Type 資料
姓名 As String
血型 As String
身高 As Single
性別 As String
欄位 As Long
End Type
Dim n() As 資料
Private Sub Command1_Click() '將資料放入陣列
For r = 1 To 10
ReDim Preserve n(r - 1)
n(r - 1).姓名 = Cells(r, 1)
n(r - 1).血型 = Cells(r, 2)
n(r - 1).身高 = Cells(r, 3)
n(r - 1).性別 = Cells(r, 4)
n(r - 1).欄位 = i
Next
End Sub
Private Sub Command2_Click() '查詢
For i = 0 To UBound(n)
If n(i).姓名 = "AAA" Then Debug.Print n(i).欄位
Next
End Sub