標題:
自行判斷不符合的陣列資料並移除。
[打印本頁]
作者:
tku0216
時間:
2014-6-11 19:54
標題:
自行判斷不符合的陣列資料並移除。
各位好,假設使用陣列存一批身分證,但裡面有幾筆資料並非身分證,是否可踢除非身份證的資料,其他資訊自動填補上去?
譬如:
令陣列A0~A4分別為
A0=A123456789
A1=B521632157
A2=A001
A3=A02
A4=S512935123
因為A2與A3皆非身分證字號,可否剔除之後,將資料自動往上填補,變成
A0=A123456789
A1=B521632157
A2=S512935123
煩請賜教,謝謝。
作者:
Hsieh
時間:
2014-6-11 23:24
回復
1#
tku0216
依照身分證字號規則驗證
非有效字號則排除
用一新陣列儲存正確字號
Option Explicit
Sub ex()
Dim A(0 To 4) As String, Ar() As String, i&, s&
A(0) = "A123456789"
A(1) = "B521632157"
A(2) = "A001"
A(3) = "A02"
A(4) = "S512935123"
For i = 0 To 4
If Pass(A(i)) Then
ReDim Preserve Ar(s)
Ar(s) = A(i)
s = s + 1
End If
Next
MsgBox Join(Ar, Chr(10))
End Sub
Function Pass(Mystr As String) As Boolean '字號驗證
Dim x, y%, k%, i%
If Asc(Left(Mystr, 1)) < 65 Or Asc(Left(Mystr, 1)) > 90 Or Len(Mystr) <> 10 Then Pass = False: Exit Function
k = Application.Match(Left(Mystr, 1), Array("A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "I", "O"), 0) + 9
y = (k Mod 10) * 9 + Int(k / 10)
x = Array(0, 0, 8, 7, 6, 5, 4, 3, 2, 1, 1)
For i = 2 To Len(Mystr) - 1
y = y + Val(Mid(Mystr, i, 1)) * x(i)
Next
Pass = 10 - (y Mod 10) = Val(Right(Mystr, 1))
End Function
複製代碼
作者:
tku0216
時間:
2014-6-12 19:10
回復
2#
Hsieh
謝謝版主,我是想說VBA是否有其他的方法,可以讓陣列寫進去之後,重新整理該陣列,讓不符合需求(非ID)的資料移除。
不過這方法也可以,多謝分享~
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)