AccessVBA フィールド内の数値のみを取り出して編集する
スポンサーリンク
例えば、IDやコードNoなどで、「01234-0」や「A01234」といったように
数値と文字や記号混じりの文字列から、「数値」のみ を取り出して編集したい場合などで使えるコードです。
サンプルコードでは、[テーブル名]というテーブル内にあるIDフィールドから数値のみを取り出して、ID2フィールドに格納するというものです。
サンプルコードを変形すれば、反対に文字のみを取り出すことも可能です。
以下、VBAの記述
'--------------------------------------------------------------------------------------------------
Dim db As Database
Dim rst As Recordset
Dim i As Integer
Dim strId As String
Dim nameLen As Integer
Set db = CurrentDb
Set rst = db.OpenRecordset("テーブル名")
If rst.RecordCount <> 0 Then
Do Until rst.EOF
rst.Edit
'取り出した数値を格納する変数の初期値
strId = ""
i = 1
'IDフィールドの文字数をカウント
nameLen = Len(rst!ID)
'IDフィールドを左から1文字ずつ数値かどうかを判定
For i = 1 To nameLen
If Mid(rst!ID, i, 1) Like "[0-9]" Then
’取り出した数値を左から順に1文字ずつ変数に加える
strId = strId & Mid(rst!ID, i, 1)
End If
Next i
'変数に格納されたIDフィールドの数値部分をID2フィールドに格納
if Len(strID) > 0 then
rst!ID2 = CDbl(strId)
else
rst!ID2 = 0
end if
rst.Update
rst.MoveNext
Loop
db.Close
Set db = Nothing
End If
'---------------------------------------------------------------------------------------------
以上、VBA終わり。
上記は単純に数値のみを抽出するものですが、取り出したIDに何らかの加工して、ID2フィールドに格納するタイプを作成した事もありました。
例えば、取り出した数値が9の場合は0、それ以外は取り出した数値に1を足すみたいなケースです。
その場合は、上記のFor〜Next内を以下のように変形して作成しました。
以下、VBA付記。
'--------------------------------------------------------------------------------------------
For i = 1 To nameLen
If Mid(rst!ID, i, 1) Like "[0-9]" Then
Dim IDnumber As Integer
IDnumber = Clng(Mid(rst!ID,i,1))
'取り出した数値をSelect〜End Selctで条件分岐
Select Case IDnumber
Case Is = 9
strId = strID & "0"
Case Else
StrId = strID & (IDnumber +1)
End Select
End If
Next i
'--------------------------------------------------------------------------------------------------
以上、付記終わり。