AccessVBAメモ

AccessVBAで作ったサンプルコード集

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

'--------------------------------------------------------------------------------------------------

以上、付記終わり。