Access VBA質問箱 IV

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

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


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

【6900】Re:2年分の検索方法は?
発言  小僧  - 05/12/5(月) 9:52 -

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

まだ状況がつかめないでいます ^^;

2005/12/05 A  10000
2005/12/06 A  12000

上記のように同年、同月、同じ名前で結果が2つあるような事はありますか?

もしあるとすれば、フォーム上に表示するのは

1) 合計だけ

2005/12   A  22000

2) 複数ある場合は全部

2005/12/05 A  10000
2005/12/06 A  12000

どちらなのでしょうか。


>現在は、フォーム上のコンボ検索にはcomb年以外にも
>comb年、comb月、comb名前で検索をして表示させています。

これはフィルタを使っているのでしょうか。

全件のデータが表示されている状態で、
コンボボックスで指定された 年、月、名前で検索するのでれば

Private Sub cmd検索_Click()
Dim strFil As String

  If Not IsNull(Me.cmb年) Then
    strFil = " And Year([日付]) = " & CLng(Me.cmb年)
  End If
  
  If Not IsNull(Me.cmb月) Then
    strFil = strFil & " And Month([日付]) = " & CLng(Me.cmb月)
  End If
  
  If Not IsNull(Me.cmb名前) Then
    strFil = strFil & " And 名前 = '" & Me.cmb名前 & "'"
  End If
  
  strFil = Mid(strFil, 6)
  
  Me.Filter = strFil
  Me.FilterOn = True
End Sub

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

【6899】Re:SQL文で構文の誤り
質問  みつ  - 05/12/5(月) 9:03 -

引用なし
パスワード
   ご指摘ありがとうございます。
以下のように修正して実行してみましたが改善されません。
あと営業所コードのコードの部分が実行すると自動的に半角から全角になります。

xSQL10 = "INSERT INTO WT_個別原価管理表 ( 工事番号 ) " & _
     "SELECT T_工事台帳.工事番号 " & _
     "FROM T_工事台帳 LEFT JOIN T_営業所マスタ " & _
     "ON T_工事台帳.工番コード=T_営業所マスタ.工番コード " & _
     "WHERE (((T_工事台帳.営業所コード) Like '*'" & Forms!F_Main!営業所コード & "'*') " & _
     "And ((T_工事台帳.売上修正損益)='0' " & _
     "Or (T_工事台帳.売上修正損益) Is Null) " & _
     "And ((T_営業所マスタ.工番管理者) Like '*'" & Forms!F_Main!工番管理者 & "'*') " & _
     "And ((Format(T_工事台帳!処理工完日,'yyyy/mm/dd'))>=Forms!F_Main!A " & _
     "And (Format(T_工事台帳!処理工完日,'yyyy/mm/dd'))<=Forms!F_Main!B) " & _
     "And ((Format(T_工事台帳!受注日,'yyyy/mm/dd'))<=Forms!F_Main!B)) " & _
     "Or (((T_工事台帳.営業所コード) Like '*'" & Forms!F_Main!営業所コード & "'*') " & _
     "And ((T_工事台帳.売上修正損益)='0' Or (T_工事台帳.売上修正損益) Is Null) " & _
     "And ((T_営業所マスタ.工番管理者) Like '*'" & Forms!F_Main!工番管理者 & "'*') " & _
     "And ((Format(T_工事台帳!処理工完日,'yyyy/mm/dd'))="") " & _
     "And ((Format(T_工事台帳!受注日,'yyyy/mm/dd'))<=Forms!F_Main!B)) " & _
     "Or (((T_工事台帳.営業所コード) Like '*'" & Forms!F_Main!営業所コード & "'*') " & _
     "And ((T_工事台帳.売上修正損益)='0' " & _
     "Or (T_工事台帳.売上修正損益) Is Null) " & _
     "And ((T_営業所マスタ.工番管理者) Like '*'" & Forms!F_Main!工番管理者 & "'*') " & _
     "And ((Format(T_工事台帳!処理工完日,'yyyy/mm/dd'))>Forms!F_Main!B) " & _
     "And ((Format(T_工事台帳!受注日,'yyyy/mm/dd'))<=Forms!F_Main!B));"

DoCmd.RunSQL xSQL10
・ツリー全体表示

【6898】Re:SQL文で構文の誤り
回答  中西 健  - 05/12/3(土) 23:09 -

引用なし
パスワード
    こんばんはみつさん。
 & Forms!F_Main!営業所コード &を囲むダブルコーテーションが抜けていると思います。
 
"WHERE (((T_工事台帳.営業所コード) Like '*'" & Forms!F_Main!営業所コード & "'*') "

 上記以外にも何箇所か同じパターンで修正しなければなりません。
 蛇足ですが、DoCmd.RunSQL xSQL10の行の代わりにDebug.Print xSQL10に変えて実行するとイミディエイトウィンドウにSQL文が表示されます。クエリを新規作成し、表示メニューでSQLビューを表示させて、先ほどのSQL文をコピー&ペーストして実行すると間違いの箇所がわかりやすいです。私はときどきこのような方法でデバッグしています。
・ツリー全体表示

【6897】Re:2年分の検索方法は?
発言  わん  - 05/12/3(土) 18:36 -

引用なし
パスワード
   こんばんわ。

クエリに関することはできました。
ありがとうございます。

以下のようなSQLでとりあえずの希望のものにはなりました。

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

DSum関数の累計計算についても理解できて、
直接フォームのテキストに書き込むこともできました。

出来上がってみて思ったのですが、
これだと条件にあったテキストやクエリ式を
全て作成しなければいけないことがわかりました。

そこで、1つ質問なのですが以下のように
  フォーム     コントロールソース/イベント
  txt結果1      :Sum([結果1])
  txt結果2      :Sum([結果2])

txt結果1前年、txt結果2前年についても1つのテキストのみで
コンボ検索とコマンドボタン実行による表示はできないのでしょうか?

現在は、フォーム上のコンボ検索にはcomb年以外にも
comb年、comb月、comb名前で検索をして表示させています。
これに対応する形で前年分も表示させたいと思うのですが
無理なのでしょうか?

わかりにくい説明のような気もしますが、
宜しくお願い致します。
・ツリー全体表示

【6896】Re:2年分の検索方法は?
質問  わん  - 05/12/3(土) 14:57 -

引用なし
パスワード
   出張に行っていたもので返信が遅くなって申し訳ありません。

教えて頂いた事全て試してみたのですが上手く動作しませんでした。
正確に状況説明ができていなかったようなのでもう一度説明しなおします。


 テーブルI
  ID   オートナンバー
  日付  日付型
  名前  テキスト
  結果1 数値型
  結果2 数値型

 テーブルI データ
  ID     日付      名前   結果1  結果2
   1   2000年1月1日   A    130000  235
   2   2000年2月1日   B    180000  285
   3   2001年1月1日   A    200000  300
   4   2001年2月1日   B    100000  185
   5   2002年1月1日   C    170000  275
   6   2002年2月1日   C    250000  335
   7   2003年1月1日   A    100000  185
   8   2004年1月1日   B    150000  260
   9   2004年2月1日   C    190000  290
   ・      ・      ・      ・    ・
   ・      ・      ・      ・    ・
   ・      ・      ・      ・    ・
   ・      ・      ・      ・    ・

 フォーム     コントロールソース/イベント
  comb年       :非連結、
   集合値ソース:SELECT Left(クエリ.日付,4) FROM クエリ4 GROUP BY Left(クエリ.日付,4);
  txt年        :日付
  txt名前       :名前
  txt結果1      :Sum([結果1])
  txt結果2      :Sum([結果2])
  txt結果1前年
  txt結果2前年
  cmd検索      :クリック時 イベントプロシージャ
   ↑抜けていました。申し訳ありません。

尚、テーブルからクエリを作成し、クエリを元にフォームを作成しています。
以下クエリのSQLです。
SELECT テーブルI.日付, テーブルI.名前,
テーブルI.結果1, テーブルI.結果2
FROM テーブルI;

comb年により年数を選択し、cmd検索により実行。
txt結果1、txt結果2に選択年度累計表示。
ここまではできているのですが、
txt結果1前年、txt結果2前年に選択年の前年累計を
表示させたいと思っております。

今まで教えて頂いたことをヒントに
自分でもチャレンジ中ですが宜しくお願い致します。

説明足らずで申し訳ありません。
教えて頂くのに状況を上手く説明するのは難しいものですね。
・ツリー全体表示

【6895】SQL文で構文の誤り
質問  みつ  - 05/12/3(土) 14:35 -

引用なし
パスワード
   ACCESS2002、WinXPなのですが
以下のSQL文で構文の誤りがあるとのメッセージが出ます。
初心者なのですが、どなたか宜しく教えて下さい。
多分アスタリスクあたりかとは思っているのですが・・・

xSQL10 = "INSERT INTO WT_個別原価管理表 ( 工事番号 ) " & _
     "SELECT T_工事台帳.工事番号 " & _
     "FROM T_工事台帳 LEFT JOIN T_営業所マスタ " & _
     "ON T_工事台帳.工番コード=T_営業所マスタ.工番コード " & _
     "WHERE (((T_工事台帳.営業所コード) Like '*' & Forms!F_Main!営業所コード & '*') " & _
     "And ((T_工事台帳.売上修正損益)='0' " & _
     "Or (T_工事台帳.売上修正損益) Is Null) " & _
     "And ((T_営業所マスタ.工番管理者) Like '*' & Forms!F_Main!工番管理者 & '*') " & _
     "And ((Format(T_工事台帳!処理工完日,'yyyy/mm/dd'))>=Forms!F_Main!A " & _
     "And (Format(T_工事台帳!処理工完日,'yyyy/mm/dd'))<=Forms!F_Main!B) " & _
     "And ((Format(T_工事台帳!受注日,'yyyy/mm/dd'))<=Forms!F_Main!B)) " & _
     "Or (((T_工事台帳.営業所コード) Like '*' & Forms!F_Main!営業所コード & '*') " & _
     "And ((T_工事台帳.売上修正損益)='0' Or (T_工事台帳.売上修正損益) Is Null) " & _
     "And ((T_営業所マスタ.工番管理者) Like '*' & Forms!F_Main!工番管理者 & '*') " & _
     "And ((Format(T_工事台帳!処理工完日,'yyyy/mm/dd'))="") " & _
     "And ((Format(T_工事台帳!受注日,'yyyy/mm/dd'))<=Forms!F_Main!B)) " & _
     "Or (((T_工事台帳.営業所コード) Like '*' & Forms!F_Main!営業所コード & '*') " & _
     "And ((T_工事台帳.売上修正損益)='0' " & _
     "Or (T_工事台帳.売上修正損益) Is Null) " & _
     "And ((T_営業所マスタ.工番管理者) Like '*' & Forms!F_Main!工番管理者 & '*') " & _
     "And ((Format(T_工事台帳!処理工完日,'yyyy/mm/dd'))>Forms!F_Main!B) " & _
     "And ((Format(T_工事台帳!受注日,'yyyy/mm/dd'))<=Forms!F_Main!B));"

DoCmd.RunSQL xSQL10
・ツリー全体表示

【6894】Re:小数値の切り上げについて
お礼  新米  - 05/12/1(木) 12:17 -

引用なし
パスワード
   ▼hatena さん:
早速の回答ありがとうございます。

>イミディエイトウィンドウで、実験してみましたが、
>下記のように正常に4になりました。

他のところはうまくいっているので
ここだけがなにかおかしくなっているのかな?と思います。
もう少し自分でも調べてみようと思います。

まったく解決策がわからなかったので
ご教授いただいて、本当に助かりました。
ありがとうございました。
・ツリー全体表示

【6893】Re:小数値の切り上げについて
回答  hatena  - 05/12/1(木) 11:55 -

引用なし
パスワード
   >が、1つだけうまくいかないところがありました。
>3.55 → 5
>となってしまいます。なぜでしょうか?
>もし、お心あたりがあるようでしたら
>お教え願いたいとおもいます。

イミディエイトウィンドウで、実験してみましたが、
下記のように正常に4になりました。

?-Int(-3.55)
4

新米さんのところではなぜそうなるのか、見当もつきません。
・ツリー全体表示

【6892】Re:小数値の切り上げについて
質問  新米  - 05/12/1(木) 11:44 -

引用なし
パスワード
   ▼hatena さん:
回答ありあがとうございます。

>-Int(-[フィールド名])
早速試してみたところ見事でした!
4.5  → 5
0.25 → 1
3.25 → 4
となり求めていた値となりました。

が、1つだけうまくいかないところがありました。
3.55 → 5
となってしまいます。なぜでしょうか?
もし、お心あたりがあるようでしたら
お教え願いたいとおもいます。


また、負数のことですが、
負数の場合はすべて「0」にしたかったので
後者の方法を行うことにしました。
こちらもとても勉強になりました。
本当に、ありあがとうございます。
・ツリー全体表示

【6891】Re:小数値の切り上げについて
回答  hatena  - 05/12/1(木) 11:08 -

引用なし
パスワード
   -Int(-[フィールド名])

で、有効桁数以内なら小数点以下が何桁でもOKです。

>が、今後のために
>「-1.25」→「0」
>の対応をご存知であれば
>ご教授願いたいと思います。

「-1.25」→「-1」ではないのですか。
それとも、負数の場合はすべて0にしたいのでしょうか。

前者なら上記の式でいいです。後者なら、

IIf([フィールド名]<0,0,-Int(-[フィールド名]))
・ツリー全体表示

【6890】Re:小数値の切り上げについて
質問  新米  - 05/12/1(木) 10:54 -

引用なし
パスワード
   ▼中西 健 さん:
投稿ありがとうございます。

> 負の数の場合はどのようになることを期待されているのでしょうか。
> 負の数の場合はありませんか。
現在は、負の値の場合については考慮していません。
(データはこない前提ですすめています。)

が、今後のために
「-1.25」→「0」
の対応をご存知であれば
ご教授願いたいと思います。

よろしくお願いいたします。
・ツリー全体表示

【6889】Re:小数値の切り上げについて
質問  新米  - 05/12/1(木) 10:51 -

引用なし
パスワード
   ▼MJM さん:
おはようございます、MJMさん。
回答ありがとうございました。

早速調べてみたところ
小数部が1桁ではなく2桁までありました。

MJMさんの言うとおり
>小数部が1桁なら、
>クエリのフィールドで、
>Int(フィールド名 + 0.99)
で、小数部1桁の場合、
理想どおりの結果が得られました。

質問の仕方(自己調査が甘かった)が
悪かったので申し訳ないのですが
もし小数部が2桁まである場合でも
切り上げができればと思っています。

現クエリ結果 表示したい値
 0.61  → 1.0
 3.55  → 4.0
 4.31  → 5.0

ご存知であればご教授お願いいたします。
・ツリー全体表示

【6888】Re:メニュー用フォームビルダ
回答  Gin_II  - 05/12/1(木) 8:49 -

引用なし
パスワード
   >「スイッチボード」という名前を変更した途端、フォームに表示されて
>いたメニューが消えてしまいました。

名前を元に戻してみては?
・ツリー全体表示

【6887】Re:小数値の切り上げについて
発言  中西 健  - 05/12/1(木) 0:32 -

引用なし
パスワード
    負の数の場合はどのようになることを期待されているのでしょうか。
 負の数の場合はありませんか。
・ツリー全体表示

【6886】メニュー用フォームビルダ
質問  くーた  - 05/11/30(水) 17:43 -

引用なし
パスワード
   初めまして。メニュー用フォームビルダについて教えて下さい。
さっき初めてメニュー用フォームビルダでメニューを作りました。
するとオブジェクトのフォームをクリックすると、「スイッチボード」
というのが出来ていました。それを開くとメニューが出ていたんですが、
「スイッチボード」という名前を変更した途端、フォームに表示されて
いたメニューが消えてしまいました。メニュー用フォームビルダを
開くと、確かにメニューは作成されているんですが、メニューを開く
項目が消えてしまいました。再び表示させる為にはどのようにしたら
よいのでしょうか?また、作ったメニューは何処へ行ったのでしょうか?
分かる方がおられましたら、是非解答お願い致します。
・ツリー全体表示

【6885】Re:2年分の検索方法は?
発言  小僧  - 05/11/30(水) 16:21 -

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

こちらの環境(Ac2002、WinXP)ではうまく行ったのですが…。
おまじない程度ですが、名前 → [テーブルI].[名前] と変更するとどうでしょうか。

SELECT Year([日付]) AS 年,
テーブルI.名前,
Sum(テーブルI.結果1) AS 結果1の合計,
Sum(テーブルI.結果2) AS 結果2の合計,
DSum("結果1","テーブルI","Year([日付]) = " &
Year([日付])-1 & "AND [テーブルI].[名前] = '" & [名前] & "'") AS 前年結果1,
DSum("結果2","テーブルI","Year([日付]) = " &
Year([日付])-1 & "AND [テーブルI].[名前] = '" & [名前] & "'") AS 前年結果2
FROM テーブルI
GROUP BY Year([日付]),
テーブルI.名前,
DSum("結果1","テーブルI","Year([日付]) = " &
Year([日付])-1 & "AND [テーブルI].[名前] = '" & [名前] & "'"),
DSum("結果2","テーブルI","Year([日付]) = " &
Year([日付])-1 & "AND [テーブルI].[名前] = '" & [名前] & "'");
・ツリー全体表示

【6884】Re:小数値の切り上げについて
回答  MJM  - 05/11/30(水) 16:08 -

引用なし
パスワード
   こんにちは。

小数部が1桁なら、
クエリのフィールドで、

Int(フィールド名 + 0.99)

と、指定されては如何でしょう。
・ツリー全体表示

【6883】小数値の切り上げについて
質問  新米  - 05/11/30(水) 15:57 -

引用なし
パスワード
   Access新米の者です。
いつも参考にさせていただいています。

クエリでテーブル値を抽出しています。
その数値の小数部分を切り上げたいのですが、
デザインビューへの設定
(抽出条件セルへの条件設定等)
でこれが実現できないでしょうか?

現クエリ結果 表示したい値
 0.6  → 1.0
 1.3  → 2.0
 4.5  → 5.0

ご存知の方がおられましたら
何卒、ご教授お願いいたします。
・ツリー全体表示

【6882】Re:2年分の検索方法は?
質問  わん  - 05/11/30(水) 15:57 -

引用なし
パスワード
   いつもありがとうございます。

ご指示頂いた以下のSQLを貼り付けましたがうまくいきません。

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

集計関数の一部として指定された式‘名前’を含んでいないクエリを実行しようとしました。

とエラーがでました。これはどういう意味なのでしょう?
宜しくお願い致します。
・ツリー全体表示

【6881】Re:2年分の検索方法は?
発言  小僧  - 05/11/30(水) 14:57 -

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

ちょっとまだ状況が解りかねるのですが、
年、名前ごとの結果1、結果2 の合計を出すのでしょうか。

先ほどのDLookUp関数でなく、DSum関数を使ってみました。

SELECT Year([日付]) AS 年,
テーブルI.名前,
Sum(テーブルI.結果1) AS 結果1の合計,
Sum(テーブルI.結果2) AS 結果2の合計,
DSum("結果1","テーブルI","Year([日付]) = " &
Year([日付])-1 & "AND 名前 = '" & [名前] & "'") AS 前年結果1,
DSum("結果2","テーブルI","Year([日付]) = " &
Year([日付])-1 & "AND 名前 = '" & [名前] & "'") AS 前年結果2
FROM テーブルI
GROUP BY Year([日付]),
テーブルI.名前,
DSum("結果1","テーブルI","Year([日付]) = " &
Year([日付])-1 & "AND 名前 = '" & [名前] & "'"),
DSum("結果2","テーブルI","Year([日付]) = " &
Year([日付])-1 & "AND 名前 = '" & [名前] & "'");

こんな感じの結果で良いでしょうか…。
・ツリー全体表示

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