HOME > 即効テクニック > AccessVBA > データ操作 > 全てのレコードを一括修正する(DAO)

即効テクニック

データ操作

全てのレコードを一括修正する(DAO)

(Access 97)
●詳細●
DAOを使ってレコードを一括修正するには、Recordsetオブジェクトを作成してEditメソッドとUpdateメソッドでレコードの更新処理をします。
サンプルプロシージャ「Sample1」では、テーブル「住所録」のフィールド「氏名」の全データから前後の空白を取り除いてレコードを更新する処理を行っています。例えば、「 笹野 ますみ 」が「笹野 ますみ」となります。
データ入力はある程度制限することができますが、前後に空白を付けてしまったり、全角と半角を混在してしまったりといったことは起こり得ることです。
サンプルプロシージャ「Sample2」では、テーブル「住所録」のフィールド「メールアドレス」の全データを半角の小文字にしてレコードを更新する処理を行っています。
例えば、「SUM@PROJECTA.CO.JP」が「sum@projecta.co.jp」となります。

●サンプル●
【前後の空白を取り除く】
Sub Sample1()
    Dim db  As Database
    Dim rs  As Recordset
    Dim fld As Field
    
    Set db = CurrentDb
    Set rs = db.OpenRecordset("住所録")
    Set fld = rs.Fields("氏名")
    
    If rs.EOF = False Then
        Do Until rs.EOF
            rs.Edit
            fld = Trim(fld)
            rs.Update
            rs.MoveNext
        Loop
    End If
    
    db.Close
    
End Sub

【半角の小文字にする】
Sub Sample2()
    Dim db  As Database
    Dim rs  As Recordset
    Dim fld As Field
    
    Set db = CurrentDb
    Set rs = db.OpenRecordset("住所録")
    Set fld = rs.Fields("メールアドレス")
    
    If rs.EOF = False Then
        Do Until rs.EOF
            rs.Edit
            fld = StrConv(fld, vbNarrow + vbLowerCase)
            rs.Update
            rs.MoveNext
        Loop
    End If
    
    db.Close
    
End Sub

●補足説明●
  1. レコードを編集するには、Editメソッドを使用して、カレントレコードの内容をコピー バッファにコピーします。Editメソッドを使用せずに、Updateメソッドを使用したり、
  2. フィールドの値を変更したりしようとすると、エラーが発生します。
  3. 1件1件処理するので、データ内容によって修正処理を複雑に分岐する事も可能です。
  4. Trim関数は、指定した文字列から先頭と末尾の両方のスペースを削除した文字列を表す バリアント型(内部処理形式StringのVariant)の値を返します。
  5. StrConv関数は、文字列を指定した方法で変換した値を返します。構文は次のとおりです。
<構文> StrConv(string, conversion, LCID) string  :必ず指定します。変換する文字列式を指定します。 conversion:必ず指定します。実行する変換の種類を定数で指定します。       通常、定数は互いに矛盾しない限り、組み合わせて指定できます。  定数      値  内容  vbUpperCase   1  文字列を大文字に変換します。  vbLowerCase   2  文字列を小文字に変換します。  vbProperCase   3  文字列の各単語の先頭の文字を大文字に変換します。  vbWide*     4*  文字列内の半角文字(1バイト)を全角文字(2バイト)に             変換します。  vbNarrow*    8*  文字列内の全角文字(2バイト)を半角文字(1バイト)に             変換します。  vbKatakana**  16** 文字列内のひらがなをカタカナに変換します。  vbHiragana**  32  文字列内のカタカナをひらがなに変換します。  vbUnicode    64  システムの既定のコードページを使って文字列をUnicodeに             変換します。  vbFromUnicode  128  文字列をUnicodeからシステムの既定のコードページに             変換します。  * 国別情報の設定が中国、韓国、および日本の場合に適用されます。  ** 国別情報の設定が日本の場合のみ有効です。 LCID:省略可能です。システムとは異なる国別情報識別子(LCID)を指定できます。    既定値はシステムが使用するLCIDです。