Excelから一つのテーブルにインポートする方法
- Excelのデータを一つのテーブルにまとめてインポートする方法を教えてください。
- VBAを使用してExcelからAccessにデータを取り込む方法を教えてください。
- 複数のエクセルファイルから複数のシートのデータを一つのテーブルに取り込む方法を教えてください。
- ベストアンサー
Excelから一つのテーブルにインポートしたい
こんにちは。 ExcelではVBAが使えるレベルですが、Access初心者です。 エクセルのワークブックにデータがA~N列までデータが入っています。 1行目はタイトル(フィールド名)で2行目以下がデータ(レコード)になります。 ワークブックの中のシート数はさまざまです。 1行目のタイトル(フィールド名)はあってもデータがないものもありますし、 2行目以下のデータ(レコード)数もさまざまです。 ワークブック(とその中のシート)が多いので VBAを使ってAccessに取り込みたいと思っています。 いろいろネットで検索して以下のVBAまでたどりついたのですが、 それぞれ「ワークブック名_シート名」というテーブルに取り込まれます。 これを例えば「総合」というようなテーブル一つに取り込むにはどうしたらいいでしょうか? 週末をつぶして試行錯誤しましたが、どうしても解決しないのでアドバイスいただけるとうれしいです。 Sub ImportFromExcel() Dim tgtXLname As String Dim tgtXLpath As String Dim newTBLname As String Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim sCnt As Integer Dim n As Integer Application.Echo False TargetFolder = "C:\work" tgtXLname = Dir(TargetFolder & "\*.xls") Do While tgtXLname <> "" tgtXLpath = TargetFolder(a) & "\" & tgtXLname Set xlApp = GetObject(, "Excel.Application") xlApp.Application.Visible = True xlApp.Workbooks.Open tgtXLpath Set xlBook = xlApp.ActiveWorkbook sCnt = xlBook.Worksheets.Count For n = 1 To sCnt Set xlSheet = xlBook.Worksheets(n) newTBLname = Left(tgtXLname, Len(tgtXLname) - 4) & "_" & xlSheet.Name DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, newTBLname, tgtXLpath, True, xlSheet.Name & "!" & "A:N" Set xlSheet = Nothing Next xlBook.Close SaveChanges:=False Set xlBook = Nothing tgtXLname = Dir() Loop xlApp.Application.Quit Set xlApp = Nothing Application.Echo True MsgBox "インポート終了" End Sub
- CaveatEmptor
- お礼率92% (792/855)
- その他MS Office製品
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すみません、私も実際に動かしたわけではないので。 下記によると追記はできないようですが http://okwave.jp/qa/q1706501.html 下記ではできるようです。 http://www.accessclub.jp/bbs3/0449/superbeg131890-2.html ちょっと気になるのは「xlSheet.Name」ですが、これでどのシートか判りますか。 作業中のシート名ではないでしょうか。 先の二番目の例では strrange = Format$(i, "00") & "!A4:E3000" のようにシート番号を指定しています。
その他の回答 (1)
- samtomsan
- ベストアンサー率55% (1060/1897)
確認はしてありませんが、 newTBLname を For の前に出し newTBLname = "総合" でできませんか。
お礼
回答ありがとうございました。 私も同じ方法を試してみましたが、ダメでした。 追加してインポートされるのではなく、最後にExcelからインポートした(と思われる)データ(レコード)だけでした。
関連するQ&A
- VBからエクセルを起動。そのあとエクセルを終了
教えてください。 VBからエクセルを起動します。 そのあと、エクセルのシートの上にデータを貼り付けます。そして、エクセルを終了します。 しかし、エクセルが終了しません。 タスクバー上のエクセルをクリックすると終了します。 どうして、このような現象が起こるのかわかりません。 教えてください。 下記に同様のサンプルを書きました 誤記入があるかも知れませんが このような感じのプログラムです。 以上、よろしくお願いします。 public sub test Dim XApp as Excel.Application Dim nfilename as string Dim xlBook As Object Dim xlSheet As Object ' エクセルを起動 Set xlApp = New Excel.Application nfilename ="AAAA.xls" ' 指定されたファイルを開く Call xlApp.Workbooks.Open(nfilename) Set xlBook = xlApp.ActiveWorkbook Set xlSheet = xlBook.Worksheets(1) 'フォームを貼り付ける xlSheet.Range("a1").PasteSpecial 'ファイル名の作成 Filename="BBBB.xls" '保存 ChDir "C:\" xlBook.SaveAs Filename:=Filename,FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Set xlSheet = Nothing xlBook.Close True Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End sub
- ベストアンサー
- Visual Basic
- Excel出力後のExcelの起動について
Vb側からデータをExcelに出力し、その画面を表示させたまま 出力したExcelを確認しようと思ったところ、Excelは起動するものの シートが表示されない現象が起こりました。 出力後のExcelの終了(解放?)のロジックは下記の通りです。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets.Add … … Sheetへの出力処理 … … Set xlApp = Nothing Set xlBook = Nothing Set xlSheet = Nothing この現象の回避方法がありましたらご教授ください。 Windows2000 Vb6.0 SP5 Excel2000
- ベストアンサー
- Visual Basic
- VB2008 エクセル出力
VB2008 エクセル出力 教えていただけると助かります VB6.0使用時にエクセル出力をするために下記のようなプログラムで出力していました ※「Microsoft Excel 9.0 Object Library」を参照 Dim xlApp As EXCEL.Application Dim xlBook As EXCEL.Workbook Dim xlsheet As EXCEL.Worksheet Dim File As String File = App.Path + "\EXCEL\" + "フォーム.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(File) Set xlsheet = xlBook.Worksheets("テスト") xlsheet.Range("A1") = "テスト" 'フォルダ作成 If Dir("D:\", vbDirectory) = "" Then Call Mkdirs("D:\テスト") 'Worksheetを名前をつけて保存します。 xlApp.DisplayAlerts = False xlsheet.SaveAs "D:\テスト\テスト.xls" xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing Set xlsheet = Nothing VB2008の場合だとどのように書けば同じように動きますか ※色々試してみましたがダメでした 「Microsoft Excel 12.0 Object Library」を参照しています
- ベストアンサー
- Visual Basic
- ExcelのデータをAccessのテーブルへインポートできない
Access VBA超初心者です。 Excelのデータの任意の列のデータをAccessの既存テーブルの任意のフィールドへインポートしたいのですが 既存Excelシートの構成は例のようにデータベース形式でないため試行錯誤しています。 Excelシートの構成は1~2行は空行、3行目と4行目にフィールド名がはいっており セルの結合は使われていません。 データは5行目から開始されています。 <例> 列番号 |A列|B列|C列|D列|E列| 3行目 | 季節 | | 4行目 | 春 |夏 |秋 |冬 | | 5行目 |aa |bb |100 |200 |300 | まず、以下の手順1と手順2を考えました。 ---------------------------------------------------- ◇目的 上記<例>のE列のデータを既存Accessテーブルにインポートしたい。 ◇Accessの事前準備 フィールド名だけ指定し、レコードは空の状態の[a]テーブルを作成しました。 ◆手順1 AccessからExcelをオブジェクトとして開き、[a]テーブルへ列単位でコピーする() ◆手順2 [a]テーブルから条件にあうレコードを別テーブル[b]のフィールドへインポートする (SQL文) ---------------------------------------------------- まず、手順1のコードをネット検索を参考にして以下のようにしました。 最後に「入力しました」とメッセージが表示されるもののaテーブルにデータがインポートされません。 特にエラーメッセージも表示されません。 どなたか親切にアドバイス頂ける方がいらっしゃいましたらどうぞお願いします。m(__)m ---------------------------------------------------- Public Sub エクセルインポート() Dim xlApp As Object, xlBook As Object, xlSheet As Object, Wcell As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("¥Excelファイル保存場所パス\Excelファイル.xls") Set xlSheet = xlBook.Worksheets("Excelシート名") Set Wcell = xlSheet.Range("a1") Dim intNo As Integer Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "a", cn, adOpenKeyset, adLockOptimistic xlApp.Application.Visible = True intNo = 5 Do Until rs.EOF rs!フィールド名1 = xlApp.Application.Cells(intNo, 1).Value rs!フィールド名2 = xlApp.Application.Cells(intNo, 2).Value rs!フィールド名3 = xlApp.Application.Cells(intNo, 3).Value ~ rs!フィールド名21 = xlApp.Application.Cells(intNo, 21).Value Loop xlBook.Close xlApp.Visible = False Set xlBook = Nothing rs.Close Set rs = Nothing cn.Close Set cn = Nothing MsgBox "入力しました" End Sub ----------------------------------------------------
- ベストアンサー
- その他(データベース)
- エクセルを表示できない
プログラム初心者です。 Private Sub Command3_Click() On Error Resume Next Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet With xlApp.Application Set xlApp = GetObject("F:\vb6.0\book1.xls") Set xlBook = xlApp.Workbooks.Open("Book1") Set xlSheet = xlBook.Worksheets(1) xlApp.Application.Visible = True End Sub と入力したのですが、実行してボタンをクリックしてもエクセルの表が表示されません。なぜでしょうか?
- ベストアンサー
- Visual Basic
- 実行時エラー91について
vbでエクセルにデータを入力したあと、2つのシートを選択し、 その後に両面印刷を行うプログラムを作成中ですが、 印刷の段階で 「実行時エラー91。オブジェクト変数または with ブロック変数が設定されていません。」 とのエラーがでます。 どの部分がおかしいのかわからないので教えて下さい。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim xlSheet2 As Excel.Worksheet Dim xlFile As String xlFile = App.Path & "表.xls" Dim MyFile As String MyFile = Dir$("表.xls") If Len(MyFile) > 1 Then Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(xlFile) Set xlSheet = xlBook.Worksheets("裏") Set xlSheet2 = xlBook.Worksheets("表") xlApp.Visible = True a1 = Label47.Caption a1 = Format(a1, "#,#") a2 = Label48.Caption m = a1 & "及び" & a2 & "とする。" For k = 1 To 18 s = Mid(m, k, 1) i = 8 + (k - 1) * 2 xlSheet.Cells(40, i).Value = s Next k Set xlSheet2 = xlBook.Worksheets("表") xlSheet2.Cells(4, 2).Value = Text11.Text xlSheet2.Cells(4, 10).Value = Text12.Text xlSheet2.Cells(4, 19).Value = Text13.Text xlBook.Sheets(Array("表", "裏")).Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ←ここでエラー Set xlApp = Nothing Set xlBook = Nothing Set xlSheet = Nothing Set xlSheet2 = Nothing
- ベストアンサー
- Visual Basic
- ADOを使用してExcelデータをAccess取込む際のExcelシートの選択について
表記のとおりADOを使用してExcelデータをAccess取込むのですが、Sheet1のデータを読込んだ後、引続きSheet2のデータを読込む様にVBAコードを書いたつもりですが、Sheet1をアクティブにした状態でExcelデータを保存していたらSheet1のデータを重複して取込み、Sheet2をアクティブにした状態でExcelデータを保存していたらSheet2のデータを重複して取込んでしまいます。どこをどうすればSheet1のデータを読込んだ後、引続きSheet2のデータを読込む様に出来るのでしょうか? ====== VBAコードの抜粋 ========= Dim xlApp As Object ' Excelのアプリケーション定義 Dim xlBook As Object ' ExcelのワークブックのフォルダPath+ファイル名を定義 Dim xlSheet As Object ' Excelの参照するシート名を定義 Dim SheetName As String ' シート名を代入 Dim SheetCount As Byte ' シートの選択 For SheetCount = 1 To 2 ' 1回目のループでSheet1から2回目のループでSheet2からデータを取り込む If SheetCount = 1 Then SheetName = "Sheet1" If SheetCount = 2 Then SheetName = "Sheet2" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("ファイルPath+ファイル名") Set xlSheet = xlBook.Worksheets(SheetName) Set Wcell = xlSheet.Range("A1") Set Cn = CurrentProject.Connection Rs.Open "取込みテーブル", Cn, adOpenKeyset, adLockOptimistic xlApp.Application.Visible = True データを取込むコードあり(省略) xlBook.Close xlApp.Visible = False Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing Next SheetCount
- ベストアンサー
- Visual Basic
- VB6.0上でExcelオブジェクトを生成
VB6.0上でExcelオブジェクトの生成についてです。 その1 Dim xlApp As New Excel.Application Dim xlBook As New Excel.Workbook Dim xlSheet As New Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と その2 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と、どちらが良いのでしょうか? 開発環境は Windows2000 VB 6.0 Excel 2003 です。
- 締切済み
- Visual Basic
- EXCELのグラフ
下のようにVBからExcel にデータを送りグラフを表示しています。 印刷プレビューを表示したときにグラフと表が表示されてしまいます。グラフだけを表示して表は表示をしたくないのですが どうすればいいのでしょうか お願いします。 Private Sub Command1_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets.Add Dim i As Integer Dim j As Integer For i = 2 To 6 For j = 2 To 6 xlSheet.Cells(j, i) = CInt(71 * Rnd + 30) Next j Next i xlSheet.Cells(2, 1) = "国語" xlSheet.Cells(3, 1) = "数学" xlSheet.Cells(4, 1) = "英語" xlSheet.Cells(5, 1) = "社会" xlSheet.Cells(6, 1) = "体育" xlSheet.Cells(1, 2) = "石原" xlSheet.Cells(1, 3) = "小泉" xlSheet.Cells(1, 4) = "田中" xlSheet.Cells(1, 5) = "平沼" xlSheet.Cells(1, 6) = "森山" Dim MyChart As ChartObject Set MyChart = xlSheet.ChartObjects.Add(10, 100, 600, 330) With MyChart.Chart .SetSourceData xlSheet.Range("A1:F6"), xlColumns .Axes(xlValue).MaximumScale = 100 .Axes(xlValue).MajorUnit = 20 .HasTitle = True .ChartTitle.Text = "中間テスト結果" .ApplyDataLabels (xlDataLabelsShowValue) .Location xlLocationAsObject, xlSheet.Name End With xlApp.Visible = True With xlSheet.PageSetup .PaperSize = xlPaperA4 .Orientation = xlPortrait .LeftMargin = xlApp.CentimetersToPoints(2) .RightMargin = xlApp.CentimetersToPoints(2) .TopMargin = xlApp.CentimetersToPoints(2.5) .BottomMargin = xlApp.CentimetersToPoints(2.5) .HeaderMargin = xlApp.CentimetersToPoints(1) .FooterMargin = xlApp.CentimetersToPoints(1) End With xlSheet.PrintPreview Set MyChart = Nothing Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing End Sub
- ベストアンサー
- Visual Basic
- 既に開いているエクセルを閉じるには?
既に該当のファイルが開いているのなら閉じたいのですが xlBook.Quitだとエラーになります。 Sub test1() Dim xlApp As Excel.Application Dim xlBook As Workbook Dim FileName As String FileName = "C:\test.xlsm" Set xlApp = GetObject("", "Excel.Application") 'GetObjectで合ってるか不安 Set xlBook = xlApp.Workbooks.Open(FileName) If xlBook.ReadOnly = True Then 'ファイルが開いてるのなら MsgBox "既にファイルが開いているので閉じます。" xlBook.Quit 'エラー 438 End If xlApp.Quit 'これって何のために必要? Set xlBook = Nothing 'ココを通り過ぎるのにすごく時間がかかる。 Set xlApp = Nothing End Sub と言うコードを作りました。 xlBook.Quitがダメならどのコードを使えばいいでしょう? また、 GetObject("", "Excel.Application") と言う開き方でいいのでしょうか? あと、 xlApp.Quit は何のために必要なのでしょう? タスクマネージーのプロセスを見ると、 Set xlApp = GetObject("", "Excel.Application") を通る時に新しいEXCEL.EXEが作成され、 Set xlApp = Nothing を通り過ぎる時に、そのEXCEL.EXEが消えます。 だから xlApp.Quit は不要ですか?
- ベストアンサー
- その他MS Office製品
お礼
再度の回答ありがとうございます。 私自身がAccessのVBAはまだ勉強したてですので、 ご紹介いただいたVBAのコードを参考にしていきたいと思います。 レコードの追加が難しければ、シートごとにインポートしたテーブルを 一つにまとめるVBAを考えてみようと思います。
補足
とりあえずappendは難しそうなので、クエリを使って結合する方向で考えていきたいと思います。 解決の糸口がみつかり助かりました。ありがとうございました。