Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1671 / 2272 ツリー ←次へ | 前へ→

【5704】複雑なクエリ処理方法について MK&db 05/7/29(金) 21:19 質問[未読]
【5705】Re:複雑なクエリ処理方法について Gin_II 05/7/29(金) 23:33 回答[未読]
【5706】Re:複雑なクエリ処理方法について MK&db 05/7/30(土) 7:21 質問[未読]
【5853】Re:複雑なクエリ処理方法について MK&db 05/8/13(土) 21:30 質問[未読]
【5856】Re:複雑なクエリ処理方法について 小僧 05/8/15(月) 9:59 回答[未読]
【5870】Re:複雑なクエリ処理方法について MK&db 05/8/17(水) 13:08 質問[未読]
【5877】Re:複雑なクエリ処理方法について 小僧 05/8/17(水) 15:08 回答[未読]
【5892】Re:複雑なクエリ処理方法について MK&db 05/8/17(水) 21:21 お礼[未読]

【5704】複雑なクエリ処理方法について
質問  MK&db  - 05/7/29(金) 21:19 -

引用なし
パスワード
   初めて投稿しました。
よろしくお願いします。
以下のクエリADがあるとします、クエリADを使って、列の縦方向の合計が
ゼロの列を除外したいです。このような煩雑な処理は可能でしょうか?
ご伝授ください。

クエリAD
ModelNo  NameNo    Fe   Cu   Si   Ca   Other
M-1    N-1     20   30   15       35
M-2    N-2     25   30   10       35
M-3    N-3     10   40   15       35



処理後
クエリADNew
ModelNo  NameNo    Fe   Cu   Si   Other
M-1    N-1     20   30   15   35
M-2    N-2     25   30   10   35
M-3    N-3     10   40   15   35

 

【5705】Re:複雑なクエリ処理方法について
回答  Gin_II  - 05/7/29(金) 23:33 -

引用なし
パスワード
   >以下のクエリADがあるとします、クエリADを使って、列の縦方向の合計が
>ゼロの列を除外したいです。このような煩雑な処理は可能でしょうか?

VBAを使って、動的にクエリのSQL文を編集すれば可能だと思います。
このクエリADは、元のテーブルも同じようなレイアウトなのでしょうか?

【5706】Re:複雑なクエリ処理方法について
質問  MK&db  - 05/7/30(土) 7:21 -

引用なし
パスワード
   ▼Gin_II さん:
>>以下のクエリADがあるとします、クエリADを使って、列の縦方向の合計が
>>ゼロの列を除外したいです。このような煩雑な処理は可能でしょうか?
>
>VBAを使って、動的にクエリのSQL文を編集すれば可能だと思います。
>このクエリADは、元のテーブルも同じようなレイアウトなのでしょうか?
返答ありがとうございます。
クエリADは元のテーブルから抽出したものです。

【5853】Re:複雑なクエリ処理方法について
質問  MK&db  - 05/8/13(土) 21:30 -

引用なし
パスワード
   ▼Gin_II さん:
>>以下のクエリADがあるとします、クエリADを使って、列の縦方向の合計が
>>ゼロの列を除外したいです。このような煩雑な処理は可能でしょうか?
>
>VBAを使って、動的にクエリのSQL文を編集すれば可能だと思います。
>このクエリADは、元のテーブルも同じようなレイアウトなのでしょうか?

データ処理の流れは、

一、テーブルAD_Group
ModelNo  NameNo    Fe   Cu   Si   Ca  ・・・・・ Other

二、クエリAD
テーブルAD_Groupからいくつかのフィールドを選択して、以下のクエリ結果に
なります。
クエリAD
ModelNo  NameNo    Fe   Cu   Si   Ca   Other
M-1    N-1     20   30   15       35
M-2    N-2     25   30   10       35
M-3    N-3     10   40   15       35

三、縦方向のΣゼロ列の処理
新しいクエリADnewを作って、ここで縦方向のΣがゼロの列を除外したいのですが、
ご伝授ください。

【5856】Re:複雑なクエリ処理方法について
回答  小僧  - 05/8/15(月) 9:59 -

引用なし
パスワード
   ▼MK&db さん、Gin_II さん:
おはようございます。

>>以下のクエリADがあるとします、クエリADを使って、列の縦方向の合計が
>>ゼロの列を除外したいです。このような煩雑な処理は可能でしょうか?

Null値があるとうまくいかないかもしれませんが、

Sub 動的SQLを作成()
'要参照設定 Microsoft DAO x.x Object Library
Dim SQLCode As String
Dim QD As DAO.QueryDef
Dim FName(1 To 4) As Variant
Dim RecCNT As Long
Dim I As Long

  FName(1) = "Fe"
  FName(2) = "Cu"
  FName(3) = "Si"
  FName(4) = "Ca"
  
  SQLCode = "SELECT ModelNo, NameNo, "
  
  RecCNT = DCount("*", "テーブルAD_Group")
  
  For I = 1 To UBound(FName, 1)
    If DSum(FName(I), "テーブルAD_Group") > 0 Then
      SQLCode = SQLCode & FName(I) & ", "
    End If
  Next
    SQLCode = Left(SQLCode, Len(SQLCode) - 2) _
        & " FROM テーブルAD_Group"
          
  Set QD = CurrentDb.CreateQueryDef("クエリADNew", SQLCode)
  QD.Close
  Set QD = Nothing
End Sub


「CreateQueryDef」メソッドでわざわざクエリを作成しているため、
同名のクエリが存在するとエラーになります。

「クエリADNew」をフォームやレポートの基にしたい場合であれば
クエリを作成しなくても 変数:SQLCode をレコードソースに代入すれば
結果が表示されると思います。

【5870】Re:複雑なクエリ処理方法について
質問  MK&db  - 05/8/17(水) 13:08 -

引用なし
パスワード
   ▼小僧 さん:
>▼MK&db さん、Gin_II さん:

ありがとうございます。期待している結果がでました。

→実行するとき、クエリADNewが存在すると、エラーになります。
この現象を回避するため、下記の動的SQL文には、クエリ削除(objectcatalog.procedures.delete)の書き方を教えていただけないでしょうか?

→クエリADNewの結果をExcelへ吐き出すにはどのように書けばいいでしょうか?

>Sub 動的SQLを作成()

【5877】Re:複雑なクエリ処理方法について
回答  小僧  - 05/8/17(水) 15:08 -

引用なし
パスワード
   ▼MK&db さん:
こんにちは。

>この現象を回避するため、クエリ削除

まずはクエリの存在を確認する方法
If DCount("*", "MSysObjects", "Name = 'クエリ名'") > 0

クエリ削除は
DoCmd.DeleteObject acQuery, "クエリ名"

で行う事ができます。

>→クエリADNewの結果をExcelへ吐き出すにはどのように書けばいいでしょうか?

こちらは「TransferSpreadsheet」メソッドが使えます。


…クエリを作成する目的が「Excel へn出力」の為だけでしたら、
わざわざ作らなくても行うことが可能です。
こちらは ExcelVBA の操作も必要でコードの記述も長くなりますが、
「TransferSpreadsheet」メソッドではできない細かい指定(セル位置やシート名等)
が可能です。 気になるようでしたら「オートメーション」「CopyFromRecordset」
あたりで過去ログを検索してみて下さい。

【5892】Re:複雑なクエリ処理方法について
お礼  MK&db  - 05/8/17(水) 21:21 -

引用なし
パスワード
   ▼小僧 さん:

問題解決!
ありがとうございました。

1671 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078245
(SS)C-BOARD v3.8 is Free