Sub b()
'オブジェクト変数の宣言
Dim rstTMP As ADODB.Recordset ユーザ定義型宣言されていません。
とエラーになります。
Dim cmd As New ADODB.Command
'SQL接続
' 接続文とその他処理を記述
conStr = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Extended Properties=Excel 8.0;" & _
"Data Source=" & FileName
'接続
myCon.Open conStr
'SQLコマンド作成
With cmd
.CommandText = "Select * From テーブル名"
.CommandType = adCmdText
End With
'SQL文実行/レコードセット取得
Set rstTMP = cmd.Execute
End Sub
やりたいこと
1.エクセルのデータ Ver.2016 ファイル bookdata1
抽出先ファイル bookdata2
とにかく接続して抽出したい
抽出したい
助けてください。
上記のこーどはいろんなサイト・このサイトに質問などしてやっています。
コードは標準モジュールに書いています。
No.1ベストアンサー
- 回答日時:
書くのであれば、
'オブジェクト変数の宣言
Dim cmd As New ADODB.Command
Dim rstTMP As ADODB.Recordset
順番的にはこれかなと思いますし、『参照設定』はされているのですよね?
それと後々を考えれば New ADODB.Recordset が良いかも?
・・・・使用する前に『Set ステートメントで New をしないとならない』
https://oshiete.goo.ne.jp/qa/10056033.html
では接続は出来たようですから。
http://infith.com/system/excel/excle_ado_vba/
こちらではユーザーフォームのリストボックスに書き出す方法が書かれてます。
>"Select * From テーブル名"
”テーブル名”とはそのように文字を打ち込んでいる訳ではないですよね?
上記リンク先にあるように『どこのSheetなのか?』を
"SELECT * FROM [Sheet1$];"
と指定しなければなりません。
あと ";" を最後につけておいて。
リストボックスとかが苦手であれば、
Dim i As Integer
を宣言し、
'テーブルを読み込む
Do Until adoRS.EOF
'検索対象の住所(A列)をリストボックス(lstName)に追加
lstName.AddItem adoRS.Fields(0).Value
adoRS.MoveNext
Loop
を
'テーブルを読み込む
i = 1
Do Until adoRS.EOF
'検索対象の1列目をA列に書き出す。
Cells(i , 1).Value = adoRS.Fields(0).Value
i = i + 1
adoRS.MoveNext
Loop
のようにしてみる。
あとブックを開かなくてはって部分はSheetの指定が不明確だったからかな?と
思うんですよね。
あとでちょっと検証する時間があればやってみますが、うちのは古いので
そのままでは参考になるかどうか。
接続の方法は理解できましたが
そこから先がだめでした。
あーなんとかならないもんですね
ここまでお付き合いいただきありがとうございました
あきらめたわけではないが
簡単にSELECT *FROM TABLE
WHERE = A
とかでできると思っていましたが
簡単なのもできない悔しいです。
No.2
- 回答日時:
No.4
- 回答日時:
No.3の補足に対して。
どこから出てきたのかわかりませんが、それらはテーブル名ですよ。
ただし純粋にそのままのテーブル名を記載すると大変な時には、
FROM tenpo s
とかで、『tenpo を s に置き換える』事が出来ます。
多分データベース(Accessなど)のサイトを見ての事でしょう。
1つのデータベースに接続してもその中には複数のテーブルが存在しているなら、テーブル名は省略したいですし。
No.5
- 回答日時:
No.4です。
>複数のテーブルが存在しているなら、テーブル名は省略したいですし。
ちょっと語弊になってしまいますかね。
省略ではなく短縮ですね。
完全にテーブル名を記載しなかったとしたら、どこのテーブルのフィールド名(S.支店番号 なら 支店番号)なのか、
わからなくなってしまいますし。
No.6
- 回答日時:
No.4の補足に対して。
これは3つのSheetを関連づけさせ抽出したい内容を求める物ですけど、普通にデータベースを扱い始めた人でも、
難易度はあると思いますよ。
SQL文の解析と理解は大変にはなりそうですけど。
私はAccessに接続したから違ったのかな?
FROM ((SELECT D.顧客番号, D.支店番号, SUM(D.売上) AS 売上合計 FROM [データ$] AS D GROUP BY D.顧客番号, D.支店番号) AS S
LEFT JOIN [支店マスタ$] AS M2
FROM [データ$] AS D
特に S の場合はサブクエリにより作成されたテーブルを表しているようですね。
私にはちょっと直ぐに理解できる内容ではなさそうですが。
Excelで範囲を囲んでって言うよりSheet名を短縮させないと、
>[支店マスタ$]
これとかを何回も書くの大変ですよね。
あとは各シートの1行目をフィールド名にしているのでしょう。
SQL文に限って言うならテーブル名:[支店マスタ$] を 支店マスタ に置き換えれば、質問だけならAccessのカテとかでも出来ると思いますよ。
受けた回答からテーブル名を直す事を忘れなければですけど。
No.7
- 回答日時:
No.5です。
検証はしてませんけどADOで接続しているExcelBookにセルの概念はないと思いますので、M2が使えないって事はないはずです。
サイト管理者がテストしてあげているコードですしね。
サイトのコードをそのままコピペしましたよね?(それとも自身のBookに組み込んでる?)
実際は M2 でも M でも他と被ったり予約語(関数名とか)と同じでなければ、何を使っても半角英数字なら(頭文字は英字になるかも?)
問題ないと思いますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
Access vbaで重複レコードの削...
-
ACCESS VBAでテーブル内の特定...
-
重複した複数のレコードを1レ...
-
ACCESSのクエリ、SQLに変数を使...
-
access追加クエリーでform入力...
-
ACCESSで実行時エラー3008
-
アクセスで連続データをテーブ...
-
Accessリンクするテーブルが見...
-
VB.NETでテーブルを作成
-
【access】複数のフィールドの...
-
Access から Excelのシートをイ...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
CloseとDisposeの違い
-
エクセルVBAで、MsgBox やInput...
-
Excelシート上のマクロを登録し...
-
Do~Loopした回数をカウントしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
【access】複数のフィールドの...
-
ACCESS VBAでテーブル内の特定...
-
Access vbaで重複レコードの削...
-
ACCESS DCOUNTの抽出条件について
-
Accessで縦と横を入れ替えたい
-
VBAでテーブル名とカラム名を動...
-
DataGridViewで複数条件の抽出...
-
Access から Excelのシートをイ...
-
重複した複数のレコードを1レ...
-
DAOでSQLServerに接続し、LeftJ...
-
SQLServer→Access インポート
-
ACCESSで実行時エラー3008
-
sql文で削除クエリを書く
-
別のaccessファイルからデータ...
-
access追加クエリーでform入力...
-
抽出条件でデータ型が一致しま...
-
【PHP/MySQL】コード上で生成...
-
Accessリンクするテーブルが見...
-
ACCESSで購入回数を表示する方...
おすすめ情報
いいえ、SQLとVBAに同じ内容書いたので一つ削除になりました。
もう分けございません。
strSQL = ""
strSQL = strSQL & " SELECT S.支店番号, M2.支店名, S.顧客番号, M1.顧客名, M1.住所, S.売上合計"
strSQL = strSQL & " FROM"
strSQL = strSQL & " ((SELECT D.顧客番号, D.支店番号, SUM(D.売上) AS 売上合計"
S.支店番号 S. ←これはなにを表しているのか
M2.支店名 M2. ←これはなにを表しているのか
D.支店番号 D. ←これはなにを表しているのか
理解できません。
http://excel-ubara.com/excelvba5/EXCEL114.html
サイトはここからです。
なんとなくわかりました。
エクセルで範囲で囲んで
名前をつけるということですか
疑問があります
エクセルの範囲で名前を
つけてSとかAとかできますが
M2は無理でした。セルのアドレスに
なるからでしょう
M2.支店名 M2.
そうなるとM2はなんなんでしょぅか