見出し画像

Access インポートするファイル名の一部をレコードとして取り込む

インポートするレコードがいつ作成されたものなのか、後々の分析作業で使用したい場面で使います。

ファイル名の最後に年月日(yyyymmdd)と文字列が入っている場合

AccessのVBAにもSQLを使用したモジュール入れて、レコードにすることが可能です。

この場合は Right(ファイル名, 8) で取り出します。
ファイル名は文字列なので、'で括ります。
後、フィールド名がNullの場合も考慮しNz関数を使用します。

AccessのVBAでSQLを起動する時はDoCmd.RunSQL構文を使います。

Sub date_import1()

Dim sql As String

DoCmd.SetWarnings WarningsOn:=False

sql = "UPDATE テーブル名 SET フィールド名='" & Right(ファイル名, 8) & "' WHERE Nz(フィールド名)=''"

DoCmd.RunSQL sql

DoCmd.SetWarnings WarningsOn:=True

End Sub


ファイルを選択、テーブルインポートから、ファイル名の年月日(yyyymmdd)の取得まで一気に行いたい場合


上の構文とは少し変えて、年月日(yyyymmdd)が、ファイル名の左にも右にも寄っておらず、任意の文字列の次に記載されていることとします。

ここでは、アンダーバー(_)の次に年月日(yyyymmdd)が記載されているファイル名だとして、テーブルにインポートする際のフルパス使用し、InStrRev関数を使用してアンダーバーはファイルの何番目の文字になるのかを i = InStrRev(FLNM, "_")で表します。

例として、csvファイルのインポートの想定で記します。


Sub date_import2()
    
  DoCmd.SetWarnings False
  
   Dim InRet As Integer  ’ダイアログ用変数
 Dim FLNM As String  ’ファイルの値変数
   Dim sql As String
   Dim i As Long
   
   With Application.FileDialog(msoFileDialogOpen)
       ’ダイアログのタイトルを設定
       .Title = "任意のタイトル"
       ’ファイルの種類を選択
       .Filters.Clear
       .Filters.Add "csvファイル""*.csv"
       .FilterIndex = 1
       ’複数のファイル選択を許可しない
       .AllowMultiSelect = False
       ’初期パスを設定
       .InitialFileName = CurrentProject.Path & "\"
       'ダイアログを表示
       InRet = .Show
       
       If InRet <> 0 Then
        ’ファイルが選択されたとき、フルパスを返り値に設定
           FLNM = .SelectedItems.Item(1)
       Else
        ’ファイルが選択されなければブランク
           FLNM = ""
       End If
   
   ’ファイルが未選択ならメッセージを出してモジュールを終了
   If FLNM = "" Then
   MsgBox "ファイルを選択してください"
      Exit Sub
 ’ファイルが選択されたら所定のテーブルにインポート
   End If
   DoCmd.TransferText acImport, "インポート定義", "テーブル名", FLNM, True

   'アンダーバーがファイル名の最初から何番目になるか取得
   i = InStrRev(FLNM, "_")

   ’インポートしたテーブルの任意のフィールドに年月日を取得
   sql = "UPDATE テーブル名 SET フィールド名='" & Mid(FLNM, i + 1, 8) & "' WHERE Nz(フィールド名)=''"
   DoCmd.RunSQL sql

DoCmd.SetWarnings True
  
MsgBox "年月日情報をインポートしました"
 
 End With
   

End Sub

インポートする時にFileDialogを使い、任意のファイルを選択します。

Accessを使用してると、確認のポップアップが出てくることが多いのですが、それを出したくない時は構文の前後に  DoCmd.SetWarnings をFalseにすると、ポップアップが出なくなります。

構文が終わった後や、メッセージボックスを出したい時は Trueにしてポップアップが出るようにします。

DoCmd.SetWarnings False
構文
DoCmd.SetWarnings True

いいなと思ったら応援しよう!