- ベストアンサー
【初心者向け】VBAを使ってアクセス2010で指定セルのインポートする方法
- アクセス・エクセル2010を使用して指定セルのインポートを行いたい初心者の方へ。ダイアログを表示させ、取り込みファイル(.xls)を指定してインポートする方法や、指定したファイルと同じフォルダ内にあるファイルを全てインポートする方法、さらにフォームのテキストを使って範囲指定を行う方法などを詳しく解説しています。
- アクセス・エクセル2010を使用して指定セルのインポートする方法を初心者の方に分かりやすく解説します。ダイアログを表示させ、取り込みファイル(.xls)を指定してインポートする手順や、同じフォルダ内にあるファイルを全てインポートする手順、さらにフォームのテキストを使って範囲指定を行う方法までを具体的に説明しています。
- アクセス・エクセル2010を使い、指定セルのインポートを行いたい初心者の方への解説です。ダイアログを表示させ、取り込みファイル(.xls)を指定してインポートする方法や、同じフォルダ内にあるファイルを全てインポートする方法、さらにフォームのテキストを使って範囲指定を行う手順などについて詳しく説明しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは なんか冗長で変なコードになっちゃいますけど、 Sub test_1() Dim f As Object Dim b As Object Dim c As Object Dim d As Object Dim t As Variant Dim e As Object Dim p As String Dim i As Long Dim sSql As String Dim フォームのテキスト As String Set e = CreateObject("Excel.Application") t = e.GetOpenFilename("Excel Files (*.xls*), *.xls*") If t = False Then Exit Sub フォームのテキスト = "K7:W78" Set f = CreateObject("Scripting.FileSystemObject") p = f.GetParentFolderName(t) Set d = f.GetFolder(p) Set b = d.Files On Error Resume Next sSql = "DROP TABLE テストテーブル " CurrentProject.Connection.Execute CommandText:=sSql sSql = "DROP TABLE 一時テーブル " CurrentProject.Connection.Execute CommandText:=sSql On Error GoTo 0 For Each c In b If LCase(f.GetExtensionName(c)) Like "xls*" Then If i = 0 Then DoCmd.TransferSpreadsheet acImport, , "テストテーブル", c, True, フォームのテキスト sSql = "ALTER TABLE テストテーブル ADD COLUMN ファイル名 VarChar(50);" CurrentProject.Connection.Execute CommandText:=sSql sSql = "UPDATE テストテーブル SET ファイル名='" & f.GetFileName(c) & "';" CurrentProject.Connection.Execute CommandText:=sSql i = i + 1 Else On Error Resume Next sSql = "DROP TABLE 一時テーブル " CurrentProject.Connection.Execute CommandText:=sSql On Error GoTo 0 DoCmd.TransferSpreadsheet acImport, , "一時テーブル", c, True, フォームのテキスト sSql = "ALTER TABLE 一時テーブル ADD COLUMN ファイル名 VarChar(50);" CurrentProject.Connection.Execute CommandText:=sSql sSql = "UPDATE 一時テーブル SET ファイル名='" & f.GetFileName(c) & "';" CurrentProject.Connection.Execute CommandText:=sSql sSql = "INSERT INTO テストテーブル SELECT * FROM 一時テーブル" CurrentProject.Connection.Execute CommandText:=sSql i = i + 1 End If End If Next On Error Resume Next sSql = "DROP TABLE 一時テーブル " CurrentProject.Connection.Execute CommandText:=sSql On Error GoTo 0 e.Quit Set e = Nothing End Sub
その他の回答 (3)
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは フォームのテキスト = "K7:W78" の"K7:W78"の部分を frm.text1.textとかに変更するとかです。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 「2.1で指定したファイルと同じフォルダ内にあるファイル(.xls)を全てインポート」 全てのファイルのデータを一つのテーブルに集約するのですか? それとも、一つのファイルに対して一つのテーブルを作成していくのですか?
補足
できれば、1つのテーブルでマージしたいです。 ただ、インポート基ファイル名などをフィールドで持てると良いのですが、可能でしょうか?
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 複数のExcelのデータを1つのテーブルに取り込むのですか? 取り込むテーブルのフィールド構成 取り込むExcelの実際のセル範囲の例 はどうなりますか?
補足
エクセルとしては、 7行目にフィールド名になるテキスト 今月は、K列~W列までを適用としています。 アクセス(テーブル)としては、 K列~(7行目)をフィールド名として K8~(今回は)W(の際下段)をフィールド値としたいです。 フィールド1(K列):項目名(にしたいフィールドなので)=テキスト フィールド2~13(L~W列):値が入るので、名称は仮置きでも構いません=倍精度浮動小数点型 です。 ※今月はW列まで(フィールド13)までが適用ですが、次月以降はX列~(フィールド14以降)も適用の可能性もあります。 今月のフォーム:テキスト値としては、「K7:W78(もしくはK8~W78)」を取り込み対象として設定したいです。 よろしくお願いします!
補足
ありがとうございます!ほぼイメージした動きでした。 ただ1点、変動するインポート範囲を設定するために、 フォームのテキストボックス(txt)を用いて範囲指定を変動できるようにしたいのですが そこのコーディングも教えていただけないでしょうか。 ここまで組んでいただいた上、ご面倒なお願いで申し訳ありませんが、 よろしくお願いします!