Access VBA Mid,Instrで名前を姓と氏名に分けてフィールドに転記
名前を姓と名に分けてテーブルの其々の空のフィールドに書込みます。
テーブルの姓と名の間にはスペースがある事を前提とします。
Instrで姓、名の値までの文字列の数を取りMidで値を抽出します。
フィールド『氏名』がNullの場合は処理しません。
一般的には関数を作りクエリで処理しますが、VBAで直接処理してみました。
,-------------------------------------------------------
Sub 名前分割()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim n1, n2 As String
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "氏名", cn, adOpenKeyset, adLockOptimistic
Do Until rs.EOF
If IsNull(rs!氏名) = False Then
'姓の値を取得
n1 = Mid(rs!氏名, 1, InStr(rs!氏名, " ") - 1)
'名の値を取得
n2 = Mid(rs!氏名, InStr(rs!氏名, " ") + 1)
rs.Update "姓", n1
rs.Update "名", n2
End If
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub
,-------------------------------------------------------
テーブルの姓と名の間にはスペースがある事を前提とします。
Instrで姓、名の値までの文字列の数を取りMidで値を抽出します。
フィールド『氏名』がNullの場合は処理しません。
一般的には関数を作りクエリで処理しますが、VBAで直接処理してみました。
,-------------------------------------------------------
Sub 名前分割()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim n1, n2 As String
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "氏名", cn, adOpenKeyset, adLockOptimistic
Do Until rs.EOF
If IsNull(rs!氏名) = False Then
'姓の値を取得
n1 = Mid(rs!氏名, 1, InStr(rs!氏名, " ") - 1)
'名の値を取得
n2 = Mid(rs!氏名, InStr(rs!氏名, " ") + 1)
rs.Update "姓", n1
rs.Update "名", n2
End If
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub
,-------------------------------------------------------
この記事へのコメント