質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

953閲覧

CSVをテーブルにインポートしたあと、いくつかの項目を削除したデータを新規テーブルとしたい

romchro

総合スコア2

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/10/13 09:26

編集2020/10/14 06:20

accessVBA超初心者です。

Private Sub btn取込_Click()
DoCmd.TransferText acImportDelim, , "テーブル1", "○○○.csv", True
End Sub

上記でCSVをいったんまるごとテーブル1に読み込むことはできました。

テーブル1には
[店コード][受付日][商品名][金額][発送先]の項目があるとして、
[受付日][商品名][金額]だけにしたデータを
テーブル2として新規で作りたいです。

クリックだけでここまで動いてくれるものなのかさえわからず…。

お恥ずかしいのですが、「○○で調べてみては」などでも構いませんので、
アドバイスいただけたらと思います。

↓↓↓ここから追記です↓↓↓----------------------

'---クリック時にCSVを新規テーブルに読込---
Private Sub Importcsv_Click()
On Error Resume Next
'変数定義

Dim dlg As Object, boolResult As Boolean 'オブジェクト変数にFileDialogオブジェクトを代入 Set dlg = Application.FileDialog(msoFileDialogOpen) 'FileDialogオブジェクトの各種プロパティを設定 With dlg .AllowMultiSelect = False .Filters.Clear .Filters.Add "csvファイル", "*.csv" .Title = "取り込みたいCSVデータを選択してください" .ButtonName = "読み込む" .InitialFileName = "c:\temp\" End With '[ファイルを開く]ダイアログボックスを表示する boolResult = dlg.Show If boolResult Then MsgBox "読み込みました。" DoCmd.TransferText acImportDelim, , "テーブル1", dlg.SelectedItems(1), True

----<このあたりに命令を書けばいいのでしょうか?>----

Else MsgBox "キャンセルされました。" End If

End sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

テーブル1からクエリを作成して、必要なフィールドだけ追加します。
そのクエリをテーブル作成クエリにして実行すればご希望のテーブルが作成できます。

ただ、あえてテーブル作成クエリにしなくても、必要なフィールドだけにしたクエリを保存しておいて、それを開けばご希望の結果はいつても得られます。クエリはテーブルと同じに扱えますので。

投稿2020/10/13 12:31

hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

romchro

2020/10/14 05:32

Dim Qdf As QueryDef, SQL As String SQL = "SELECT 受付日,商品名,金額 FROM テーブル1" Set Qdf = CurrentDb.CreateQueryDef("テーブル2", SQL) Set Qdf = Nothing こちらを使って、テーブルではなくクエリを作成しました。 ありがとうございます。わざわざテーブルにしなくてもよかったんですね! 賢くなりました!
guest

0

テーブル2をあらかじめ作成しておいて、DoCmd.TransferTextの後で

VBA

1 CurrentDb.Execute ("DELETE * FROM テーブル2") 2 CurrentDb.Execute ("INSERT INTO テーブル2 SELECT 受付日, 商品名, 金額 FROM テーブル1")

でいかがでしょうか。

投稿2020/10/13 19:32

編集2020/10/14 05:01
kitasue

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

romchro

2020/10/14 05:34

こちらについても調べさせてもらいました! 結果、テーブルにしなくてもよかったということに落ち着きました。 でも、クエリを作らずにこちらの方法もあると知れてよかったです。 ありがとうございました!
romchro

2020/10/14 06:17

後学のために自分で試したメモです。 Dim dB As Database Set dB = CurrentDb dB.Execute "DELETE FROM テーブル2", dbFailOnError dB.Execute "INSERT INTO テーブル2" & _ " SELECT 受付日,商品名,金額 FROM テーブル1", dbFailOnError Set dB = Nothing この記述でテーブル作成もできました。 ※項目は残ってしまいますが、セルの中身は空白。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問