Access VBA質問箱 IV

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

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


307 / 500 ページ ←次へ | 前へ→

【7081】Re:フォームからコンボボックスを使用した...
お礼  わん  - 06/1/11(水) 15:53 -

引用なし
パスワード
   小僧さん、こんにちは。
返信有難うございます。

>値集合ソースは変更されましたか?
>現在のままですと、名前ID しか SELECT されていませんので、
>ここに名前も入れてあげないといけません。
>
>SELECT t_A.名前ID, t_B.名前
>FROM t_A INNER JOIN t_B ON t_A.名前ID = t_B.名前ID
>GROUP BY t_A.名前ID, t_B.名前;

値集合ソースの変更の仕方を間違えていたようです。
同テーブル内で表示をする時の書き方をしていたようです。
早速やり直します。

>SELECT Year([日付]) & "/" & Month([日付]) AS 年月,
>    テーブルI.名前,
>    テーブルI.結果1,
>    テーブルI.結果2,
>    DLookUp("結果1","テーブルI","Year([日付]) = " & Year([日付])-1 & "
>                AND Month([日付]) =" & Month([日付]) & "
>                AND 名前 = '" & [名前] & "'") AS 前年結果1,
>    DLookUp("結果2","テーブルI","Year([日付]) = " & Year([日付])-1 & "
>                AND Month([日付]) =" & Month([日付]) & "
>                AND 名前 = '" & [名前] & "'") AS 前年結果2
>FROM テーブルI;
>
>ポイントは、
>
>年に関しては -1 を行う必要がある
>月に関してはそのまま使う

コチラも早速試してみます。

見ずらいツリー表示になってしまって申し訳ありませんでした。
1つのレスに1つの質問をしなかったのが原因ですね。
以後、気をつけます。

有難うございました(^^)。
また、宜しくお願いします。
・ツリー全体表示

【7080】Re:フォームからコンボボックスを使用した...
回答  小僧  - 06/1/11(水) 15:15 -

引用なし
パスワード
   ▼わん さん:
こんにちは。
ツリー表示ですと見づらくなりますので、一番下にまとめてレスをつけますね。

>>コンボボックスのプロパティに「列数」という項目があります。
>>値集合ソースを 2 列返すように変更して、列数を 2 にする事で実現できると思われます。

>↑ここに関しては質問する前に変更して見たのですが表示されなかったのです。
>どんな問題があると推測できますか?

>集合値ソース;SELECT (t_A.名前ID) FROM t_A GROUP BY (t_A.名前ID);

値集合ソースは変更されましたか?
現在のままですと、名前ID しか SELECT されていませんので、
ここに名前も入れてあげないといけません。

SELECT t_A.名前ID, t_B.名前
FROM t_A INNER JOIN t_B ON t_A.名前ID = t_B.名前ID
GROUP BY t_A.名前ID, t_B.名前;


>SELECT Year([日付]) AS 年,
>テーブルI.名前,
>テーブルI.結果1,
>テーブルI.結果2,
>DLookUp("結果1","テーブルI","Year([日付]) = " &
>Year([日付])-1 & "AND 名前 = '" & [名前] & "'") AS 前年結果1,
>DLookUp("結果2","テーブルI","Year([日付]) = " &
>Year([日付])-1 & "AND 名前 = '" & [名前] & "'") AS 前年結果2
>FROM テーブルI;

条件が増えると混乱しがちなので、
たんさんの仰られている通り無理にやる必要はないかもしれませんが…。

SELECT Year([日付]) & "/" & Month([日付]) AS 年月,
    テーブルI.名前,
    テーブルI.結果1,
    テーブルI.結果2,
    DLookUp("結果1","テーブルI","Year([日付]) = " & Year([日付])-1 & "
                AND Month([日付]) =" & Month([日付]) & "
                AND 名前 = '" & [名前] & "'") AS 前年結果1,
    DLookUp("結果2","テーブルI","Year([日付]) = " & Year([日付])-1 & "
                AND Month([日付]) =" & Month([日付]) & "
                AND 名前 = '" & [名前] & "'") AS 前年結果2
FROM テーブルI;

ポイントは、

年に関しては -1 を行う必要がある
月に関してはそのまま使う

という所でしょうか。
・ツリー全体表示

【7079】Re:書く欄を間違えました。
発言  わん  - 06/1/11(水) 15:15 -

引用なし
パスワード
   投稿者欄に題名を書いてしまいました。
スイマセンです(^^;;。
・ツリー全体表示

【7078】Re:何が分からない?
お礼  なるほど・・・、  - 06/1/11(水) 15:08 -

引用なし
パスワード
   わかりました!!

>=DLookup("[氏名]", "社員", "[社員コード] = 106")
>が
>=DLookup("[氏名]", "社員", "[社員コード] = " & "106")
>と同じだということは分かりますか?
>(単なる、文字列の分解です。)

これがわからなかったのです。
(というより知らなかったという方が正しいかも・・・)
これで全部理解できました!!

投げずに最後までお付き合い下さり有難うございます。
感謝!感謝!!
・ツリー全体表示

【7077】Re:何が分からない?
回答  たん  - 06/1/11(水) 15:00 -

引用なし
パスワード
   >=DLookup("[氏名]", "社員", "[性別]='& "男" & _

訂正
=DLookup("[氏名]", "社員", "[性別]='" & "男" & _
                  ^^
クォーテーションが1個抜けてた。
・ツリー全体表示

【7076】Re:何が分からない?
回答  たん  - 06/1/11(水) 14:54 -

引用なし
パスワード
   何がわからないのか、それじゃあ、全然こっちに伝わりませんが。

=DLookup("[氏名]", "社員", "[社員コード] = 106")

=DLookup("[氏名]", "社員", "[社員コード] = " & "106")
と同じだということは分かりますか?
(単なる、文字列の分解です。)

で、後は、"106"の所を、[Forms]![Form1]![Text1]に置きかえる。
(単なる、置き換えです。)

=DLookup("[氏名]", "社員", "[社員コード] = " & [Forms]![Form1]![Text1])


社員コードがテキスト型なら、
=DLookup("[氏名]", "社員", "[社員コード] = '106'")

=DLookup("[氏名]", "社員", "[社員コード] = '" & "106" & "'")
になる。

で、後は、"106"の所を、[Forms]![Form1]![Text1]に置きかえる。
日付も同じ。

複数条件の場合でも、
=DLookup("[氏名]", "社員", "[性別]='男' AND [入社日]>=#2005/4/1#")
なら、
=DLookup("[氏名]", "社員", "[性別]='& "男" & _
 "'AND [入社日]>=#" & "2005/4/1" & #")
になるので、"男"と、"2005/4/1"をフォーム上のコントロールに置きかえる。
・ツリー全体表示

【7075】Re:ヘルプで「抽出条件の指定」
お礼  わん  - 06/1/11(水) 14:34 -

引用なし
パスワード
   ▼たん さん:
>フィルターだろうが、D系関数だろうが、SQLだろうが同じなので。
>
>> =DLookup("[氏名]", "社員", "[社員コード] = 106")
>
>社員コードが固定(必ず106)の場合、上記の式でOK。
>
>社員コードがフォームのテキストボックス([Forms]![Form1]![Text1])を
>参照する場合。
>
>106を[Forms]![Form1]![Text1]に置き換えて、文字列の外に出す。
>
>=DLookup("[氏名]", "社員", "[社員コード]=" & "106")
>↓
>=DLookup("[氏名]", "社員", "[社員コード]=" & [Forms]![Form1]![Text1])
>
>で、[社員コード]が数値型で、 [Forms]![Form1]![Text1]が数値型なら、
>内部変換で[Forms]![Form1]![Text1]を文字列として受け取ってくれるので、
>上記の形。(私は、CStr関数で成型しますが。)
>
>で、[Forms]![Form1]![Text1]がテキスト型なら、[Forms]![Form1]![Text1]を
>テキスト型にしないとならない。
>
>> =DLookup("[氏名]", "社員", "[社員コード]='106'")
>↓
>=DLookup("[氏名]", "社員", "[社員コード]='" & "106" & "'")
>↓
>=DLookup("[氏名]", "社員", "[社員コード]='" & [Forms]![Form1]![Text1] & "'")
>
>以上。
>
>(ここまで書いて分からんなら、ちょっと勉強が足りなさすぎかも。)

そうかもしれません。
有難うございました。
・ツリー全体表示

【7074】Re:クエリの抽出条件(Where句)について
回答  小僧  - 06/1/11(水) 14:29 -

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

>クエリの使用方法については、最終的にエクセルへ出力したいと思っています。
>既存のクエリに対し、Where句だけをVBで設定する方法は無いのでしょうか?

そうなると、レコードセットが取得できれば良い、という事ですね。

Sub Where句をつけてクエリを開く()
'要参照設定 Microsoft DAO x.x Object Library
Dim RS As DAO.Recordset
Dim strSQL As String
Dim strName As String
Dim strDate As Date

  strName = "鈴木一郎"
  strDate = #1/11/2005#

  strSQL = "SELECT * FROM 実績データ一覧 " _
      & "WHERE 氏名 = '" & strName & "' And " _
         & "作業年月日 = #" & strDate & "#"

  Set RS = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
  '
  'エクスポート処理
  '
  RS.Close: Set RS = Nothing
End Sub

こんな感じでいかがでしょうか。
・ツリー全体表示

【7073】Re:ヘルプで「抽出条件の指定」
回答  たん  - 06/1/11(水) 14:13 -

引用なし
パスワード
   フィルターだろうが、D系関数だろうが、SQLだろうが同じなので。

> =DLookup("[氏名]", "社員", "[社員コード] = 106")

社員コードが固定(必ず106)の場合、上記の式でOK。

社員コードがフォームのテキストボックス([Forms]![Form1]![Text1])を
参照する場合。

106を[Forms]![Form1]![Text1]に置き換えて、文字列の外に出す。

=DLookup("[氏名]", "社員", "[社員コード]=" & "106")

=DLookup("[氏名]", "社員", "[社員コード]=" & [Forms]![Form1]![Text1])

で、[社員コード]が数値型で、 [Forms]![Form1]![Text1]が数値型なら、
内部変換で[Forms]![Form1]![Text1]を文字列として受け取ってくれるので、
上記の形。(私は、CStr関数で成型しますが。)

で、[Forms]![Form1]![Text1]がテキスト型なら、[Forms]![Form1]![Text1]を
テキスト型にしないとならない。

> =DLookup("[氏名]", "社員", "[社員コード]='106'")

=DLookup("[氏名]", "社員", "[社員コード]='" & "106" & "'")

=DLookup("[氏名]", "社員", "[社員コード]='" & [Forms]![Form1]![Text1] & "'")

以上。

(ここまで書いて分からんなら、ちょっと勉強が足りなさすぎかも。)
・ツリー全体表示

【7072】Re:一気に飛びすぎて・・・
発言  わん  - 06/1/11(水) 13:55 -

引用なし
パスワード
   ▼たん さん:
>>テーブル1で直接させるのではなく、
>>クエリを1個用意し、
>>テーブル1の全フィールドと、年: Year(日付)、月: Month(日付)、
>>年_2: Year(日付)-1、月_2: Month(日付)という
>>フィールド構成にしておく。
>>
>>新しいクエリを作成し、上記のクエリを2つ(Q_A、Q_B)置き、
>>Q_Aの年とQ_Bの年_2とを結合、月も同様にして、
>>そのクエリを処理の対象にさせればいいと思うが。
>
>補足。
>Q_Aは当年度データとして、Q_Bは去年データとして使うことが
>可能になる筈です。

この件に関してはまだやったことがないことが含まれそうなので、
今の疑問が解決したらトライします。
ちなみに【7067】で別の質問をしているのですが・・・。
・ツリー全体表示

【7071】Re:補足
回答  たん  - 06/1/11(水) 13:32 -

引用なし
パスワード
   >テーブル1で直接させるのではなく、
>クエリを1個用意し、
>テーブル1の全フィールドと、年: Year(日付)、月: Month(日付)、
>年_2: Year(日付)-1、月_2: Month(日付)という
>フィールド構成にしておく。
>
>新しいクエリを作成し、上記のクエリを2つ(Q_A、Q_B)置き、
>Q_Aの年とQ_Bの年_2とを結合、月も同様にして、
>そのクエリを処理の対象にさせればいいと思うが。

補足。
Q_Aは当年度データとして、Q_Bは去年データとして使うことが
可能になる筈です。
・ツリー全体表示

【7070】Re:エクセルへのエクスポート
回答  たん  - 06/1/11(水) 13:29 -

引用なし
パスワード
   ▼爺 さん:
>たぬき さん たんさん 返信ありがとうございます。
>
>エラーで止まる箇所は、
>Set rs = db.OpenRecordset("test")の所です。
>
>testというクエリを実行する際に、抽出条件が設定されないためエラーと
>なっていると思うのですが、抽出条件は、フォームのtxtBoxから設定してますが、
>データは入力されているので、何故エラーとなるか私には分かりません。

データセット中でパラメータ付きのクエリ(フォームのコントロール指定等)を
実行しようとするとエラーになります。

http://www.accessclub.jp/sql/25.html

のように、パラメータ部分を渡して、クエリを動的に生成して動かす形に
しなければなりません。

過去ログでも同様の情報があった筈なので確認して下さい。

もしくはこういう方法もあるが、クエリをデザイン上から開けなくなるので、
あまりお勧めはしません。
http://penhagi.com/access/tips/03_param_query.htm
・ツリー全体表示

【7069】Re:無理矢理1個で処理させようとしない
回答  たん  - 06/1/11(水) 13:20 -

引用なし
パスワード
   >SELECT Year([日付]) AS 年,
>テーブルI.名前,
>テーブルI.結果1,
>テーブルI.結果2,
>DLookUp("結果1","テーブルI","Year([日付]) = " &
>Year([日付])-1 & "AND 名前 = '" & [名前] & "'") AS 前年結果1,
>DLookUp("結果2","テーブルI","Year([日付]) = " &
>Year([日付])-1 & "AND 名前 = '" & [名前] & "'") AS 前年結果2
>FROM テーブルI;

テーブル1で直接させるのではなく、
クエリを1個用意し、
テーブル1の全フィールドと、年: Year(日付)、月: Month(日付)、
年_2: Year(日付)-1、月_2: Month(日付)という
フィールド構成にしておく。

新しいクエリを作成し、上記のクエリを2つ(Q_A、Q_B)置き、
Q_Aの年とQ_Bの年_2とを結合、月も同様にして、
そのクエリを処理の対象にさせればいいと思うが。
・ツリー全体表示

【7068】Re:フォームからコンボボックスを使用した...
発言  わん  - 06/1/11(水) 13:15 -

引用なし
パスワード
   >まず、Left関数等の戻り値についてです。
>・・・・・・・
>のように出来る限りデータ型については意識された方が無難だと思います。

ということで【7048】の疑問のうち、
>>>今回把握したことを考えると6・8のケースは正しくは6→7、8→9となると思う>>>のですが、
>>>今までは6・8のケースでも正常に動作していました。
>>>これも理解できないことの1つ

は理解できました。
有難うございます。
・ツリー全体表示

【7067】Re:ヘルプで「抽出条件の指定」
質問  わん  - 06/1/11(水) 13:05 -

引用なし
パスワード
   たんさん、早速調べてみました。
そこで質問なのですが・・・。

>ヘルプで「抽出条件の指定」を全部読みましょう。

全部読みました。
『""』、『''』については文字・文字列式ということで、
半分程度理解はできたのですが& 結合がよく分からないのです。

>基本は、抽出条件内で、変数やフォーム上のコントロールを参照する場合は、
>文字列式の中で & 結合の形にして、文字列式の外に出す。

↑の意味、特に“文字列式の外に出す”というところが???です。
例えばヘルプのように、

   テキスト抽出条件式
     rst.open "社員", CurrentProject.Connection,_
        dbOpenDynaset, adlockoptimistic)
     rst.Find "[氏名] = '加藤'"

   数値抽出条件式
     =DLookup("[氏名]", "社員", "[社員コード] = 106")

は分かるのですが【7048】の質問時のように

1.Me.Filter ="オートナンバーor数値型= " & Me.○ 
2.Me.Filter ="テキスト型1 = '" & Me.○ & "' "

となるとこの違いが理解ができません。
宜しくお願いします。

念のため&演算子についてのヘルプは参照致しました。
・ツリー全体表示

【7066】Re:エクセルへのエクスポート
質問   E-MAIL  - 06/1/11(水) 12:29 -

引用なし
パスワード
   たぬき さん たんさん 返信ありがとうございます。

エラーで止まる箇所は、
Set rs = db.OpenRecordset("test")の所です。

testというクエリを実行する際に、抽出条件が設定されないためエラーと
なっていると思うのですが、抽出条件は、フォームのtxtBoxから設定してますが、
データは入力されているので、何故エラーとなるか私には分かりません。

>気になったのはオブジェクトをクリアしてないので
>ゾンビが残る可能性があります。
>特にエラーで止まるとまずいです。

ゾンビとは何ですか?エラーで止まると特にまずいのは何故でしょうか?
初心者の為検討がつきません。
・ツリー全体表示

【7065】Re:エクセルへのエクスポート
発言  たぬき  - 06/1/11(水) 12:21 -

引用なし
パスワード
   気になったのはオブジェクトをクリアしてないので
ゾンビが残る可能性があります。
特にエラーで止まるとまずいです。
・ツリー全体表示

【7064】Re:エクセルへのエクスポート
回答  たん  - 06/1/11(水) 12:13 -

引用なし
パスワード
   >下記の様なコードでエクセルへのエクスポートを実施しようとしていますが、
>パラメータが少ないというエラーがでて困っています。
>
>エラー番号:3061
>エラー内容:パラメータが少ない。1を指定して下さい。

On Error Goto をRemにして、どの行でエラーになっているのかを明確にしてからの
話でしょう。

# 余所からもってきたコードであっても、そのコードを動かすのは
# 当人なのですから、そのコードがどういう動きをしているのかを
# 当人が把握していなければダメです。
# (コピーしました、動いたのでOKでは、当人が作ったことにはなりません。)
・ツリー全体表示

【7063】Re:ヘルプで「クォーテーション」
お礼  わん  - 06/1/11(水) 12:10 -

引用なし
パスワード
   発見いたしました。
失礼しました。

AccessのヘルプではなくVisual Basicのヘルプで検索したら出てきました。

有難うございます。
・ツリー全体表示

【7062】Re:余談
発言  たん  - 06/1/11(水) 12:01 -

引用なし
パスワード
   >上の方にあるカレンダーの種類を西暦(英語)にすると、
>この [短い日付の形式] に mm/dd/yyyy などが選べる様になります。
>
>(日本では馴染みがありませんが、英語圏ですとこの表記が標準の模様です。)

ちなみに、クエリのデザイン画面上で抽出条件として、日付を
#2005/1/1#のように指定した場合、SQLビューで表示させると、
#1/1/2005#のように、英語圏表記で処理されます。(AC97、2000の場合)

深い意味はありませんが、SQLビューを参考にしてSQL文を作成している場合、
ちょっと間違う事があります。
・ツリー全体表示

307 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084685
(SS)C-BOARD v3.8 is Free