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

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

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

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

Access

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

3700閲覧

Access VBA SQLで0埋めをしたい

nyk.

総合スコア3

VBA

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

Access

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/07/07 23:41

編集2021/07/08 03:30

Access2013 32bit(Windows10 64bit ver.20H2)を勉強中の初心者です。
SQLを実行する際エラーになってしまい処理ができません。

自分なりに関数など調べてみたつもりなのですが、解決しきれませんでした。
ご教示のほどよろしくお願いします。

前提・実現したいこと

テーブルに入っている3~7桁の数字を、
1. 7桁に統一(左側に0をつける:0000311のような)
2. 前5桁、後2桁に分けて各カラムに格納(00003,11に分けたい)

発生している問題・エラーメッセージ

実行時エラー'3067' クエリの入力には、1つ以上のテーブルまたはクエリが必要です。

該当のソースコード

AccessVBA

1 '▼1. DB接続準備 2 Dim SQL As String 3 4 '▼2. SQL 5 SQL = "" 6 SQL = SQL & "INSERT INTO 新テーブル名" & vbCrLf '-- ◇追記部分 7 SQL = SQL & " SELECT 数字," & vbCrLf 8 SQL = SQL & " Left(Format([数字],'0000000'),5) AS 前5桁," & vbCrLf 9 SQL = SQL & " Right(Format([数字],'0000000'),2) AS 後2桁" & vbCrLf 10 SQL = SQL & " FROM テーブル名" & vbCrLf 11 12 '▼挿入実行 13 DoCmd.RunSQL SQL '-- ここでエラー 14

※上記変数「SQL」に格納されたSQL文を追記します。

SQL

1INSERT INTO 新テーブル名 2 SELECT 数字,Left(Format([数字],'0000000'),5) as5, 3 Right(Format([数字],'0000000'),2) as24 FROM テーブル名

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

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

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

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

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

sousuke

2021/07/08 01:58

変数SQL に入っている文字がおかしくないですか?vbaが提示の通りなら 「WrkT02_ロット№」という文字は出るはずがないと思います。 またinsert into 新テーブル名(数字,前5桁,後2桁) のようにテーブル名の後ろにかっこでデータを格納するフィールド名を selectに対応させるとどうなりますか?
nyk.

2021/07/08 04:03

>変数SQL に入っている文字がおかしくないですか? 申し訳ありません、単純な記入ミスでした。質問と整合性が取れるよう修正しました。 >insert into 新テーブル名(数字,前5桁,後2桁)のように ありがとうございます。そのようにするとエラーも出ずに実行されました。
sazi

2021/07/08 05:19 編集

エラーの元になっている情報を加工して報告しても意味がありませんよ・・
guest

回答2

0

DoCmd.RunSQL メソッド (Access)アクションクエリーが対象ですので、SELECT文はエラーです。

アクション クエリまたはデータ定義クエリのための有効な SQL ステートメントを文字列式で指定します。

この文字列には、INSERT INTODELETESELECT...INTOUPDATECREATE TABLEALTER TABLEDROP TABLECREATE INDEX、または DROP INDEX ステートメントを使います。

コメントから察すると、insertしたいのでしょうから、INSERT INTO SELECTなどの構文にして下さい。

投稿2021/07/08 00:22

sazi

総合スコア25327

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

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

nyk.

2021/07/08 00:52

回答を踏まえて確認した所、ソースコードの◇部が記入漏れになっていたので追記しました。 二度手間になってしまい、申し訳ありません。 ちなみに「insert」を入れた上でも同様のエラーがでてしまい、処理が実行されませんでした。 恐縮ですが、もう一度ご確認ご回答のほどよろしくお願いします。
sazi

2021/07/08 01:04 編集

質問にあるコードが全てですか? エラーからは、FROM句が生成されていない感じがしますけど。 若しくはFROM句でクエリーを指定しているなら、そのクエリーに関係していると思います。 ともあれ、生成されているSQL文の確認が必要です。
nyk.

2021/07/08 01:07

「全て」と言われるとあまり自信がありません。 SELECT句の項目がたくさんあるのを省いたり、SQL文の外でやったDebug.Printなどを省いています。 逆に言うと省いたのはそれぐらいなのですが、 長くなってもとりあえず全文あげたほうがよさそうですね、少し編集します。
nyk.

2021/07/08 01:11

それか、このソースを書いているボタンを押すと開くフォームにて、 プロパティの「レコードソース」がクエリになっています。 そちらのクエリも影響ありそうでしょうか。
sazi

2021/07/08 01:18 編集

先ずは、生成されているSQL文を質問に追記して下さい。
guest

0

ベストアンサー

サンプルを作成して確認してみましたが、提示のSQLでエラーなく追加されました。

実際のテーブル名とSQL内のテーブル名が違っていないか確認してみてください。


まくいかない場合は、下記のような手順でデバッグ作業をするといいでしょう。

  • まず、クエリのデザインビューで追加クエリを作成して、想定通りに追加されることを確認する。

  • VBAコード内に下記のようにデバッグ用コードを埋め込んでイミディエイトウィンドウにSQL文を出力する。

  • 作成して追加クエリのSQLとイミディエイトに出力されたSQLを比べて違いがないか確認する。

  • 違いがあれば、両者が同じになるようにVBAコードを修正する。

投稿2021/07/08 01:11

hatena19

総合スコア34075

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

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

nyk.

2021/07/08 04:10 編集

回答ありがとうございます。 >・作成して追加クエリのSQLとイミディエイトに出力されたSQLを比べて違いがないか確認する。 >・違いがあれば、両者が同じになるようにVBAコードを修正する。 ご教示通り追加クエリのSQLと同じになる様にVBAを修正したら、エラーがでず実行できました。 エラーの結論としては他の方からもご指摘いただいた通り、 >insert into 新テーブル名(数字,前5桁,後2桁)のように するのが良かったようです。 回答いただき本当に助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問