Access VBA質問箱 IV

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

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


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

【7038】フォームからコンボボックスを使用した検... わん 06/1/9(月) 20:00 質問[未読]
【7039】Re:フォームからコンボボックスを使用した... よろずや 06/1/9(月) 22:39 発言[未読]
【7041】Re:フォームからコンボボックスを使用した... 小僧 06/1/9(月) 23:28 回答[未読]
【7042】Re:フォームからコンボボックスを使用した... わん 06/1/10(火) 1:09 質問[未読]
【7045】Re:フォームからコンボボックスを使用した... 小僧 06/1/10(火) 11:15 発言[未読]
【7048】Re:フォームからコンボボックスを使用した... わん 06/1/11(水) 4:49 発言[未読]
【7049】Re:ヘルプで「抽出条件の指定」 たん 06/1/11(水) 8:18 回答[未読]
【7067】Re:ヘルプで「抽出条件の指定」 わん 06/1/11(水) 13:05 質問[未読]
【7073】Re:ヘルプで「抽出条件の指定」 たん 06/1/11(水) 14:13 回答[未読]
【7075】Re:ヘルプで「抽出条件の指定」 わん 06/1/11(水) 14:34 お礼[未読]
【7076】Re:何が分からない? たん 06/1/11(水) 14:54 回答[未読]
【7077】Re:何が分からない? たん 06/1/11(水) 15:00 回答[未読]
【7078】Re:何が分からない? なるほど・・・、 06/1/11(水) 15:08 お礼[未読]
【7079】Re:書く欄を間違えました。 わん 06/1/11(水) 15:15 発言[未読]
【7051】Re:フォームからコンボボックスを使用した... 小僧 06/1/11(水) 10:11 回答[未読]
【7057】Re:フォームからコンボボックスを使用した... わん 06/1/11(水) 11:47 質問[未読]
【7052】Re:ヘルプで「クォーテーション」 たん 06/1/11(水) 10:38 回答[未読]
【7056】Re:ヘルプで「クォーテーション」 わん 06/1/11(水) 11:42 質問[未読]
【7059】Re:ヘルプで「クォーテーション」 たん 06/1/11(水) 11:56 回答[未読]
【7063】Re:ヘルプで「クォーテーション」 わん 06/1/11(水) 12:10 お礼[未読]
【7053】Re:フォームからコンボボックスを使用した... 小僧 06/1/11(水) 11:02 回答[未読]
【7061】Re:フォームからコンボボックスを使用した... わん 06/1/11(水) 12:00 質問[未読]
【7069】Re:無理矢理1個で処理させようとしない たん 06/1/11(水) 13:20 回答[未読]
【7071】Re:補足 たん 06/1/11(水) 13:32 回答[未読]
【7072】Re:一気に飛びすぎて・・・ わん 06/1/11(水) 13:55 発言[未読]
【7062】Re:余談 たん 06/1/11(水) 12:01 発言[未読]
【7068】Re:フォームからコンボボックスを使用した... わん 06/1/11(水) 13:15 発言[未読]
【7080】Re:フォームからコンボボックスを使用した... 小僧 06/1/11(水) 15:15 回答[未読]
【7081】Re:フォームからコンボボックスを使用した... わん 06/1/11(水) 15:53 お礼[未読]
【7085】Re:フォームからコンボボックスを使用した... わん 06/1/11(水) 17:17 質問[未読]
【7093】Re:フォームからコンボボックスを使用した... 小僧 06/1/12(木) 8:59 発言[未読]
【7094】Re:フォームからコンボボックスを使用した... わん 06/1/12(木) 11:05 お礼[未読]

【7038】フォームからコンボボックスを使用した検...
質問  わん  - 06/1/9(月) 20:00 -

引用なし
パスワード
   フォームでコンボボックスで選択し、コマンドボタンをクリックで
フィルタ検索を実行させる時のことについて教えて下さい。

次の場合はフィルタ検索はできないのでしょうか?
 例)
 Aテーブル:t_A
  ・フィールド1 :ID(オートナンバー)
  ・フィールド2 :名前ID(数値型)
  ・フィールド3 :生年月日(日付型)

 Bテーブル:t_B
  ・フィールド1 :名前ID(オートナンバー)
  ・フィールド2 :名前(テキスト型)

 フォーム
  ・レコードソース :Aテーブル
  ・コンボボックス:cob名前(非連結)
   集合値ソースSELECT (t_A.名前ID) FROM t_A GROUP BY (t_A.名前ID);
  ・コマンドボタン:cmd検索

  ↑のようにルックアップウィザードでリレーションを組んでいる場合などは
  コンボボックスで選択、コマンドボタンでフィルタ検索実行というのはできないのでしょうか?
  できるとしたらcmd検索のFilterプロパティのコードの書き方がおかしいのでしょうか?

上手く説明できていないかも知れませんがどなたか教えて下さい。
宜しくお願い致します。
Access2000です。

【7039】Re:フォームからコンボボックスを使用した...
発言  よろずや  - 06/1/9(月) 22:39 -

引用なし
パスワード
   >  できるとしたらcmd検索のFilterプロパティのコードの書き方がおかしいのでしょうか?

おかしいかどうかは、見てみなきゃ分かりません。

【7041】Re:フォームからコンボボックスを使用した...
回答  小僧  - 06/1/9(月) 23:28 -

引用なし
パスワード
   ▼わんさん、よろずや さん:
こんばんは。

>できるとしたらcmd検索のFilterプロパティのコードの書き方がおかしいのでしょうか?

他に何か行っていなければ

Private Sub cmd検索_Click()
  Me.Filter = "名前ID = " & Me.cob名前
  Me.FilterOn = True
End Sub

でできると思うのですが…。(Ac2000 にて確認)


>おかしいかどうかは、見てみなきゃ分かりません。

掲示板が荒れる元だと思います。

http://www.vbalab.net/bbspolicy.html

管理人さんによる基本方針だそうです。

【7042】Re:フォームからコンボボックスを使用した...
質問  わん  - 06/1/10(火) 1:09 -

引用なし
パスワード
   小僧さん、よろずやさん 
こんばんは。

>>おかしいかどうかは、見てみなきゃ分かりません。
 ということはできるということですね。(^^)

小僧さん、またまたありがとうございます。
>他に何か行っていなければ
>でできると思うのですが…。(Ac2000 にて確認)

では、コードとフォームの設定を写します。

フォームは↓のようになっています。
  ・レコードソース :Aテーブル
  ・コンボボックス:名前(非連結)
    集合値ソース;SELECT (t_A.名前ID) FROM t_A GROUP BY (t_A.名前ID);
  ・コンボボックス:年(非連結)
    集合値ソース;SELECT Left(t_A.年月日,4) FROM t_A GROUP BY Left(t_A.年月日,4);
  ・コンボボックス:月(非連結)
    集合値ソース;SELECT Mid(t_A.年月日,6,2) FROM t_A GROUP BY Mid(t_A.年月日,6,2);
  ・コンボボックス:日(非連結)
    集合値ソース;SELECT right(t_A.年月日,2) FROM t_A GROUP BY right(t_A.年月日,2);
  ・コマンドボタン:検索

コードは↓のようになっています。
Private Sub cmd検索_Click()
  Me.Filter = "Left(年月日, 4) = '" & Me.年 & "' AND mid(年月日,6,2) = '" & Me.月 & "'
          AND right(年月日,2) = " & Me.日 & "AND 名前 = '" & Me.名前 & "'"
  Me.FilterOn = True
End Sub

ご指摘の程、宜しくお願い致します。

【7045】Re:フォームからコンボボックスを使用した...
発言  小僧  - 06/1/10(火) 11:15 -

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

>コードは↓のようになっています。
>Private Sub cmd検索_Click()
>  Me.Filter = "Left(年月日, 4) = '" & Me.年 & "' AND mid(年月日,6,2) = '" & Me.月 & "'
>          AND right(年月日,2) = " & Me.日 & "AND 名前 = '" & Me.名前 & "'"
'→追加
   Debug.Print Me.Filter
>  Me.FilterOn = True
>End Sub

まずイミディエトウィンドウで、フィルタの設定条件を確認してみましょう。

怪しいと思われるのが「名前」と「名前ID」どちらにフィルタを掛けているかです。

コントロール名:名前
コントロールソース:名前ID

のような作りでしたら、名前IDにフィルタを掛けてみてください。
またその際、フィールドのデータ型にも気を付けてください。

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

引用なし
パスワード
   小僧さん、こんばんは。

いつもいつも、お世話になります。
出張に行っていたもので遅くなりました。

なんとかできました。
↓のようになりました。
Me.Filter = "Left(日付, 4) = '" & Me.年 & "' AND mid(日付,6,2) = '" & Me.月 & "'
       AND right(日付,2) = '" & Me.日 & "' AND 名前ID = " & Me.名前 & ""

コントロールソースについても理解できました。
有難うございます。

そこで今回のことに関連して2つ教えて頂きたい事があります。
1つは今回のようにコンボボックスにIDで選択する時に、
コンボックス内の表示が数字だけではなく
文字(名前)も表示されるようにはできないのでしょうか?

もう1つはあまりに基本的なこと過ぎて質問するのもお恥ずかしいのですが、
『&』、『""』、『''』についてです。
今まで自分なりに色々調べながらやってきたのですが、
意味がよく理解できないのです。
これを機会に理解したいと思うので教えて頂きたいと思います。

今回を含め今まで教えて頂いたことをまとめると以下のように使っていました。

1.Me.Filter ="オートナンバーor数値型= " & Me.○
 
2.Me.Filter ="テキスト型1 = '" & Me.○ & "' "
 
3.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "'"
  
4.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = '" & Me.月 & "'
       AND right(日付型,2) = '" & Me.日 & "' "

5.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = '" & Me.月 & "'
       AND right(日付型,2) = '" & Me.日 & "' AND オートナンバーor数値型= " & Me.○ & ""
 
6.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = " & Me.月 & "
       AND テキスト型1= '" & Me.○ & "' "
 
7.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = '" & Me.月 & "'
       AND テキスト型1= '" & Me.○ & "' "
 
8.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = " & Me.月 & "
       AND テキスト型1= '" & Me.○ & "' AND テキスト型2= '" & Me.△ & "' "
 
9.Me.Filter ="Left(日付型, 4) = '" & Me.年 & "' AND mid(日付型,6,2) = '" & Me.月 & "'  
       AND テキスト型1= '" & Me.○ & "' AND テキスト型2= '" & Me.△ & "' "

私なりに分類すると1.のケース、2〜4のケース、5のケース、6・8のケースです。
今回把握したことを考えると6・8のケースは正しくは6→7、8→9となると思うのですが、
今までは6・8のケースでも正常に動作していました。
これも理解できないことの1つなのですが、
 Q1:『&』が前後につく時とつかない時は何が違うのでしょうか?
 Q2:又、『''』はどういう時に必要なのでしょうか?

いくら調べてもこのことが理解できません。
間抜けな質問かもしれませんが
どうか宜しくお願い致します。

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

引用なし
パスワード
   ヘルプで「抽出条件の指定」を全部読みましょう。

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

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

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

>小僧さん、こんばんは。

おはようございます。遅い時間までご苦労様です。


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

>コンボックス内の表示が数字だけではなく
>文字(名前)も表示されるようにはできないのでしょうか?

コンボボックスのプロパティに「列数」という項目があります。
値集合ソースを 2 列返すように変更して、列数を 2 にする事で実現できると思われます。
また「列幅」も変更すると見栄えも良くなりますね。
詳しくは「列数」「列幅」の所で F1 キーでヘルプを起動して確認されてみて下さい。


>もう1つはあまりに基本的なこと過ぎて質問するのもお恥ずかしいのですが、
>『&』、『""』、『''』についてです。

まず、たん さんの仰られているヘルプの確認と、
過去ログ[#5151]あたりを確認して基本的な使い方を覚えましょう。


…上記の基本に加えて、更にややこしい問題があります…。
 

【7052】Re:ヘルプで「クォーテーション」
回答  たん  - 06/1/11(水) 10:38 -

引用なし
パスワード
   >もう1つはあまりに基本的なこと過ぎて質問するのもお恥ずかしいのですが、
>『&』、『""』、『''』についてです。

こちらも、ヘルプで「クォーテーション」で確認しましょう。

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

引用なし
パスワード
   まず、Left関数等の戻り値についてです。

Sub test1()
Dim a As Long
  a = 12345
  Debug.Print VarType(Left(a, 2))
End Sub

上記コードを実行すると、イミディエトウィンドウに 8 が返ると思います。
(8 は文字列型という意味です。詳しくはVarTypeのヘルプを参照して下さい。)

12345 という数値の上 2桁を切り取ると、数値型→文字列型に変換されます。

Left(日付型,4) の返り値は2005 という値であっても
数値型でなく、文字列型として扱われています。

-----------------------------------------------------------------------

もう1点、VBA上で暗黙の型変換が行われてしまう事です。

Sub test2()
Dim a As String
Dim b As String
Dim c As Long
Dim d As Long

  a = "2"
  b = "5"
  c = 2
  d = 5
  
  Debug.Print "A:" & a + b
  Debug.Print "B:" & a * b
  Debug.Print "C:" & c + d
  Debug.Print "D:" & c * d
End Sub

A の結果は文字列型の「2」「5」を足しているので「25」
(通常は文字列型の連結には「&」を使いますが…)

C、Dの結果は普通の数値型の計算なので「7」「10」

B の結果は文字列型同士は掛け算出来ないため、
暗黙の型変換が行われ数値型と同じ結果を返しています。

------------------------------------------------------------------------
以上の2点から、

Left(日付型,4) = '2005'
Left(日付型,4) = 2005

どちらの場合でも VBA 上は同じ様に解釈してくれる、という事になります。

ですが「VBAが勝手に判断してくれるから大丈夫」と過信してコードを作成するのは危険ですので、

Left(日付型,4) = '2005'
CLng(Left(日付型,4)) = 2005

のように出来る限りデータ型については意識された方が無難だと思います。


-------------------------------------------------------------------------

蛇足になりますが、日付型の表記は OS の設定依存です。

わん さん もWindows を使用されていると思われますが、

コントロールパネル → [地域と言語のオプション] → [カスタマイズ] →
[日付] タブに [短い日付の形式] という欄があると思います。

上の方にあるカレンダーの種類を西暦(英語)にすると、
この [短い日付の形式] に mm/dd/yyyy などが選べる様になります。

(日本では馴染みがありませんが、英語圏ですとこの表記が標準の模様です。)

こちらの設定によっては、Left(日付型,4) が 2005 を返さずに
01/1 を返してしまう恐れも出てきてしまいます。
Left関数 を使用するよりも、Year関数の方が無難かもしれません。

(Year関数は西暦でなくグレゴリオ暦を使うと狂ってしまいますが(笑))

【7056】Re:ヘルプで「クォーテーション」
質問  わん  - 06/1/11(水) 11:42 -

引用なし
パスワード
   たんさん、こんにちは。
おひさしぶりです。

今回の質問でたんさんからコメントが来る様な気がしていました(^^)。
宜しくお願いします。

ヘルプで「クォーテーション」で検索しても
“他の単語を検索して下さい”と出てきてしまうのですが・・・。

WinXP、Access2000.

【7057】Re:フォームからコンボボックスを使用した...
質問  わん  - 06/1/11(水) 11:47 -

引用なし
パスワード
   小僧さん、こんにちは。

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

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

宜しくお願いします。

【7059】Re:ヘルプで「クォーテーション」
回答  たん  - 06/1/11(水) 11:56 -

引用なし
パスワード
   >ヘルプで「クォーテーション」で検索しても

Accessのヘルプで、「質問」から「クォーテーション」して下さい。

一番先頭に「文字列内でのクォーテーション」があります。
(少なくとも、私のAC2000にはあります。)

こっちで探すというのもあるけど。
http://www.microsoft.com/japan/msdn/library/default.asp

【7061】Re:フォームからコンボボックスを使用した...
質問  わん  - 06/1/11(水) 12:00 -

引用なし
パスワード
   引き続き質問です。

>Left関数 を使用するよりも、Year関数の方が無難かもしれません。
↑とありますが私もYear関数、Month関数、Day関数に馴れようと思っていたのですが、

例えば【6877】での私の質問のお答えの時のように、

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;

こういう場合は年だけでの対応になりますよね?
この時に年月まで対応したい場合は、
どのようにしたら良いのでしょうか?

宜しくお願いします。

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

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

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

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

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

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

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

有難うございます。

【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.○ & "' "

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

念のため&演算子についてのヘルプは参照致しました。

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

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

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

は理解できました。
有難うございます。

【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とを結合、月も同様にして、
そのクエリを処理の対象にさせればいいと思うが。

【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は去年データとして使うことが
可能になる筈です。

【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】で別の質問をしているのですが・・・。

【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] & "'")

以上。

(ここまで書いて分からんなら、ちょっと勉強が足りなさすぎかも。)

【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] & "'")
>
>以上。
>
>(ここまで書いて分からんなら、ちょっと勉強が足りなさすぎかも。)

そうかもしれません。
有難うございました。

【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"をフォーム上のコントロールに置きかえる。

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

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

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

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

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

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

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

投げずに最後までお付き合い下さり有難うございます。
感謝!感謝!!

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

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

【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 を行う必要がある
月に関してはそのまま使う

という所でしょうか。

【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つの質問をしなかったのが原因ですね。
以後、気をつけます。

有難うございました(^^)。
また、宜しくお願いします。

【7085】Re:フォームからコンボボックスを使用した...
質問  わん  - 06/1/11(水) 17:17 -

引用なし
パスワード
   上手くできました。
有難うございます。

最後に1つ質問です。

検索後に名前表示用のテキストボックスに
ID番号ではなく名前を表示させたいのですが
可能でしょうか?
もし、可能ならばどのようにすれば良いのでしょうか。

宜しくお願いします。

【7093】Re:フォームからコンボボックスを使用した...
発言  小僧  - 06/1/12(木) 8:59 -

引用なし
パスワード
   ▼わん さん:
おはようございます。

>ID番号ではなく名前を表示させたいのですが
>可能でしょうか?

レコードソースそのものを見直すのは無理でしょうか?

>フォーム
> ・レコードソース :Aテーブル

レコードソースには SQL を指定できるので、

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

と変更するとテキストボックスのコントロールソースに名前が選べます。

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

引用なし
パスワード
   小僧さん
おはようございます。

レコードソースを変更しても問題はありませんので、
変更してみました。

できました。
また、何か解らない事がありましたら
宜しくお願い致します。

有難うございました。

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