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

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

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

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Access

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

Q&A

解決済

1回答

5054閲覧

Access インポートしたファイル名の一部を各行の列に追加したい

ekTJ

総合スコア109

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Access

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

0グッド

0クリップ

投稿2021/05/17 08:37

###実現したいこと
フォームでファイル選択→テーブルにインポート→ファイル名の上六桁を取得→
全ての行の最終列に取得した上六桁を追加(出来ていない部分)

Access初心者です。どのように処理すればよいのか分かりません。
このテーブルにはデータが追加されていく予定なので、空欄列のみ追加にしなくてはなりません。
インポートする時点で追加するものなのか、インポート後に処理したほうが良いのでしょうか。
どなたかご教示いただければと思います。

コード

Access

1Private Sub コマンド8_Click() 2Dim msg As String 3 4msg = getFilePicker 5If msg = "" Then Exit Sub 6 7Dim objFileSys As Object 8Dim fileName As String 9'ファイルシステムを扱うオブジェクトを作成 10Set objFileSys = CreateObject("Scripting.FileSystemObject") 11'拡張子無しのファイル名を取得 12fileName = objFileSys.GetBaseName(msg) 13Debug.Print Left(fileName, 6) 14Set objFileSys = Nothing 15 16On Error GoTo err_sample 17DoCmd.TransferSpreadsheet acImport, , "Todoke", msg, True 18 19err_sample: 20Select Case Err.Number 21Case 3011 22MsgBox "ファイルが見つかりません。処理を終了します。" 23Case Else 24MsgBox Err.Number & ":" & Err.Description 25End Select 26 27End Sub 28

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

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

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

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

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

guest

回答1

0

ベストアンサー

インポート後に、ALTER TABLE ADD COLUMNでカラム追加し、そのカラムにファイル名の上六桁を更新すれば良いかと思います。
※ADD COLUMNではテーブルの最後に追加されます。
ALTER TABLE ステートメント (Microsoft Access SQL)

投稿2021/05/17 08:47

sazi

総合スコア25327

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

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

ekTJ

2021/05/17 23:49

sazi様 回答ありがとうございます。 質問ですが、この場合だとデータを追加していく際、毎回カラムが生成されてしまいますよね?
sazi

2021/05/17 23:56

インポート定義を使えないなら、しょうがないと思いますけど。
sazi

2021/05/18 00:01

テーブルが定義済みでないから、本質問をされていると思っていますが、よく考えるとファイル名を持たせたいというのは複数のファイルを同じテーブルにインポート出来ているという事でしょうか? もしそうなら、インポート定義を使用したインポートを行った後に更新すれば良いと思います。
ekTJ

2021/05/18 00:21

複数のファイルを同じテーブルにインポート出来ています。 インポート定義を使用したインポートでどのような処理を行うのでしょうか? 基本的な質問ばかりで恐縮ですが、宜しくお願い致します。
sazi

2021/05/18 00:39 編集

予め、テーブルに項目を追加します。その項目名はエクセルのヘッダーと被っては駄目です。 ヘッダーが無い場合は、インポート定義を使って項目名を定義します。
ekTJ

2021/05/18 00:45

情報の後出しで申し訳ないです。 テーブルには予め項目作成しているので、単純にインポートしたらファイル名の一部を作成した項目に追加という形がとれれば幸いです。
sazi

2021/05/18 00:51

単純なインポートではインポート後に更新するしか思い付かないですね。
ekTJ

2021/05/18 02:02

結局のところ[ALTER TABLE ADD COLUMN]では毎回カラム名が追加されていくという認識でよいのでしょうか。
sazi

2021/05/18 02:53 編集

いいえ。既に定義されているとの事なので、追加は不要で、その項目への更新のみです。 インポート後に空欄の項目を条件に更新すれば良いと思います。
ekTJ

2021/05/18 04:50

やり方は具体的にご教示いただけないでしようか。
sazi

2021/05/18 05:02

テーブルを更新する事は基本ですので、やり方は色々ありすぎます。 ・更新クエリーを作成しておいて実行する ・update文をVBAで実行する。 等など。 「access テーブル更新」辺りで検索すれば色々と事例は見つかります。
ekTJ

2021/05/18 05:10

変数に入れた文字列(fileName = objFileSys.GetBaseName(msg))を扱う場合にやりやすそうなのはなんでしょうか?
sazi

2021/05/18 05:14

取得する値をVBAで扱っているので、VBAでupdate文を実行ですね。
ekTJ

2021/05/18 06:23

パラメーターが少なすぎます・・・のエラーになります。構文の間違いでしょうか。 Dim sql As String DoCmd.SetWarnings WarningsOn:=False sql = "UPDATE Todoke SET 店コード=" & Left(fileName, 6) & " WHERE 店コード=''" DoCmd.RunSQL sql DoCmd.SetWarnings WarningsOn:=True
sazi

2021/05/18 06:31 編集

ファイル名は文字列なので、'で括らないと駄目です。 後、店コードがNullの場合も考慮した方が良いですね。 sql = "UPDATE Todoke SET 店コード='" & Left(fileName, 6) & "' WHERE Nz(店コード)=''"
ekTJ

2021/05/18 08:43

ありがとうございました!勉強にもなりましたし、無事に解決することが出来ました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問