ご回答有難うございます。Not Like "*A*" AND Not Like "*B*" AND Not Like "*C*" で現在複数文字の曖昧抽出を行なっていますが、複数文字列の場合でnot like "*○○*" AND ・・・をコンパクトに行いたいと思っています。Not Like "A" AND Not Like "B" AND Not Like "C"が複数文字列である場合の分解しない状態をご教授願えないでしょうか。宜しくお願い致します。
Private Sub Form_Open(Cancel As Integer)
Dim i As Integer
For i = 1 To 42
Me("T" & i).OnClick = "=SetDate(" & i & ")"
Next
Me.cmdPrev.OnClick = "=MoveMonth(-1)"
Me.cmdNext.OnClick = "=MoveMonth(1)"
SetCalendar DLookup("日付", "T_予定")
End Sub
の
SELECT
Year(DateAdd("m",-3, C1_入出庫台帳.入出庫日) As 年度,
C1_入出庫台帳.品名ID,
Sum(C1_入出庫台帳.入庫数量) AS [入庫数量 の 合計],
Sum(C1_入出庫台帳.出庫数量) AS [出庫数量 の 合計]
FROM C1_入出庫台帳
GROUP BY
Year(DateAdd("m",-3, C1_入出庫台帳.入出庫日),
C1_入出庫台帳.品名ID;
SELECT
[年度を入力] As 年度,
C1_入出庫台帳.品名ID,
Sum(C1_入出庫台帳.入庫数量) - Sum(C1_入出庫台帳.出庫数量) AS [期末在庫数]
FROM C1_入出庫台帳
WHERE
C1_入出庫台帳.入出庫日 BetWeen DateSerial([年度を入力],4,1) AND DateSerial([年度を入力]+1,3,31)
GROUP BY
C1_入出庫台帳.品名ID;
SELECT DISTINCTROW C1_入出庫台帳.入出庫日, C1_入出庫台帳.品名ID, Sum(C1_入出庫台帳.入庫数量) AS [入庫数量 の 合計], Sum(C1_入出庫台帳.出庫数量) AS [出庫数量 の 合計]
FROM C1_入出庫台帳
GROUP BY C1_入出庫台帳.入出庫日, C1_入出庫台帳.品名ID;
Private Sub Btn 自社コードで検索する_Click()
If Nz(Me.自社コード検索, "") = "" Then
MsgBox "自社コード入力欄 に値が入力されていません。自社コードを入力してください。"
Me.SetFocus
Me.自社コード検索.SetFocus
Exit Sub
End If
With Forms![C15_入出庫履歴_メイン].Recordset
.FindFirst "自社コード=" & Me.自社コード検索
If .NoMatch Then
DoCmd.Close acForm, Me.Name
Else
MsgBox "未登録のコードを入力しました。もう一度自社コードを確認してください。"
Me.自社コード検索.SetFocus
End If
End With
End Sub
ご回答有難うございます。Not Like "*A*" AND Not Like "*B*" AND Not Like "*C*" で現在複数文字の曖昧抽出を行なっていますが、複数文字列の場合でnot like "*○○*" AND ・・・をコンパクトに行いたいと思っています。Not Like "A" AND Not Like "B" AND Not Like "C"が複数文字列である場合の分解しない状態をご教授願えないでしょうか。宜しくお願い致します。
データベースファイルを長く使用していると、ゴミがたまって、ある日、突然不具合が発生する、破損するというようなことがたまにあります。それを防ぐために、下記を参考にしてください。
AccessのDBファイルを長期的に安定して使用するには - hatena chips
今回の回答の方法も上記にあります。あとは、バッグアップは定期的にとるようにしましょう。
Like
"*[ABC]*"
は、一文字単位で、AまたはBまたはCを含むものという意味ですがそれでいいのでしょう。分解すると、下記の意味になります。
Like "*A*" OR Like "*B*" OR Like "*C*"
一文字単位でいいなら、
Like "*[!ABC]*"
とすれば、A, B, C のすべてを含まないものという条件になります。分解すると、
Not Like "*A*" AND Not Like "*B*" AND Not Like "*C*"
となります。
お世話様です。全部インポートして、現在ところ正常に動いています少。
まだ少し不安もありますが、とりあえずこれで行ってみようと思います。
ありがとうございました。
ご回答誠に有難うございます。大量にあるわけでは、無いのです。AND では無く ORの場合は、
Like "[○,○,・・・]"があり、ANDでもこの様な事が出来ないかなと思いまして。見易さ、編集のし易さを考えています。テーブルを作らない方法をお願い致します。
非表示の対象が大量にあるのなら、「非表示リスト」テーブルを作成してそれを利用するといいでしょう。
禁止ワードリスト
クエリのフィールド欄に下記の式を設定。
式1: DLookup("禁止ワード","禁止ワードリスト","'" & [対象フィールド] & "' Like '*' & [禁止ワード] & '*'" )
抽出条件欄には、下記を設定。
Is Null
禁止ワードの追加や変更があった場合、禁止ワードリストを変更するだけですみます。
ありがとうございます。
予定の無い月に移動してもしょうがないので、さっそくアドバイスに通りに変更しました。
無事動作も確認できました。ありがとうございます。
それで、OKですね。
あるいは、
SetCalendar DMax("日付", "T_予定")
とすれば、T_予定テーブルの最新日の月に移動します。
自己解決?
Private Sub Form_Open(Cancel As Integer)
Dim i As Integer
For i = 1 To 42
Me("T" & i).OnClick = "=SetDate(" & i & ")"
Next
Me.cmdPrev.OnClick = "=MoveMonth(-1)"
Me.cmdNext.OnClick = "=MoveMonth(1)"
SetCalendar DLookup("日付", "T_予定")
End Sub
の
SetCalendar DLookup("日付", "T_予定")
を
SetCalendar Date
に変えたらとりあえず移動したようです。
正しいのでしょうか?
ありがとうございます。
月曜日出社後に試してみます。
新規ファイルを作成して、そのファイルにすべてのオプジェクトをインポートして、そのファイルを使用するようにしてみてください。
それで改善する場合があります。
2007はサポートが終了しているので、新しいバージョンへの移行も検討された方がいいかと。
Office にはサポート期限があります! 2017年10月10日(火)、Office 2007 の 延長サポートが終了します。余裕をもったご準備を。
色々お気遣いいただきありがとうございました。
今回はMENU画面で個別のフォームを開くボタンの前にポップアップで番号を入力する画面を作成しました。
この形でOKが出たのでこのままにしておこうと思います。(^^;)
またお聞きすることがたくさん出てくると思いますのでよろしくお願いします。
毎月集計のクエリをレコードソースとする表形式のレポートを作成します。
レポートウィザードを使うと簡単にできます。
詳細セクションにテキストボックスを配置して、
下記のように設定します。
コントロールソース =[入庫数合計]-[出庫数合計]
集計実行 全体
以上です。
レポートは、印刷プレビューではなく、レポートビューで表示すると一覧性が高いものになります。
ありがとうございます!
できました!
DoCmd.SetWarnings False '←コメントの非表示?
削除の処理~
DoCmd.SetWarnings True '←コメントの表示
御世話になります。クエリでなくても大丈夫です。
クエリでないとダメですか。
クエリをレコードソースとするレポート(印刷プレビューまたはレポートビュー)なら、テキストボックスの「集計実行」プロパティの設定で簡単に表示できます。
クエリだとDSum関数かサブクエリで実現することになりますが、かなり複雑なものになります。
ありがとうございました。無事に抽出できました。
また、細かな点を別途ご指摘いただきましてありがとうございます。
皆様からご教授いただいたモノをメモにして整理させていただいています。
あぁ、よく見たら最初の式はちゃんとシングルクォーテーションでくくった形になってますね。3.は問題ありませんでした。訂正します。
ただ、「#」は不要です。
like演算子を使った時の「#」は何でもいい1文字の数字となるので、最初の式では例えば「0April 20180」~「9April 20189」の100パターンに一致するものを抽出するという設定になります。
ありがとうございます。
フォームを送りたいのですが会社のセキュリティ上ページが開けません。
今は別フォームでIDを入力するフォームを作成して、txt氏名IDの規定値に =[Forms]![F_ID]![txtID] を設定したら入力されたIDが表示されました。
menu画面 ⇒ ID入力画面 ⇒ カレンダー表示 となるのでもう少しスマートな方法がないかと模索中です。(^^;)
filterはレコードソースのフィールドに対して働きます。
テキストボックス「月」のコントロールソースは「月」になってますか?
以下、以前からの質問の延長であると想定した回答です。
ではどうでしょう?
その他あれこれ
1.[入出庫日 を月でグループ化]
フィールド名に半角スペースが入っている場合は[]で囲む必要があります。煩雑になるのでフィールド名に半角スペースは使わないと決めてしまうといいと思います。
2.like
like演算子はワイルドカードを用いた比較に必要な演算子です。完全一致でいい今回は「=」でいいと思います。
3.#(~)#
データの種類を指定する囲み文字ですが、format関数で出力した結果は文字列型になるので文字列同士の比較となるよう「'(~)'」のようにシングルクォーテーションで囲みましょう。
御世話になります。
上司に途中経過として見ていただいたところ、この毎月集計でも期末在庫数と同じように月末での在庫数を表示できないかといわれました。月初毎に入出庫台帳に書き加えると入荷数量が大幅に増えてしまうので頭を抱えています。何かいい方法はありますでしょうか?
ありがとうございます。
パラメーターの入力ボックスが表示されてしまいます。
Me.Filter = "月 like #" & Me.検索月 & "#" 'も不要ですね
Me.Filter = "月 like'#" & 検索月 & "#'"
Me.Filter = "月 like'#" & me.検索月 & "#'" では?
御世話になります。
1、メインメニュー に 年度繰越処理 というボタン を設置して
前年度期末在庫数 を 今年度の4/1に期首在庫数として C1_入出庫台帳に一括入力させた方がいいのでしょうか?
※ 前年度期末在庫数 があるモノはその数量、ないものは 0 というように・・・。
2,期毎の 入庫合計数量 と 出庫合計数量 のクエリと 期末在庫数量が表示されるクエリ を別に作成していますが
一つにまとめた方が見やすいのでしょうか?
現在、前者のフォームをつくったのですが・・・。
フォーム詳細欄に非連結テキストボックス 表示年度 を作り メインフォームの 年度 を抽出していて
テキストボックス 表示年度 の更新後処理に
Private Sub 表示年度_AfterUpdate()
Me.Filter = "年度 like'" & 表示年度 & "'"
Me.FilterOn = True
End Sub
と 記述しています。
ありがとうございます。表示できるようになりました。使いやすくなるように工夫してみたいと思います。
下記のような演算フィールドを作成して、それでグループ化すればいいでしょう。
年度: Year(DateAdd("m",-3, [入出庫日])
これで、入出庫日 2019/4/1 ~ 2020/3/31 のレコードの年度は 2019 になります。
SQLなら、
棚卸しはするのでょうか。
前回の質問の画像には
「入出庫備考」フィールドに「棚卸在庫数」というのがあったので、
期末(3月末日)に棚卸をするのかな。
もし、そうなら、
それがそのまま 期末在庫数 ということになりますね。
また、それが、次期の期首在庫数(繰越) ということですね。
[入出庫備考]を 棚卸在庫数 として、[入庫数量] に 棚卸結果を入力すればいいですね。
入出庫日 は期首の日付(4/1)にしておくと後々処理が楽です。
そうすれば、
帳簿上の在庫は、下記のSQLで取得できます。
これと、棚卸在庫数 を比較すれば,実数と帳簿数の過不足数も取得できます。
ありがとうございます。
テーブル C1_入出庫台帳 フィールド 入出庫ID、入出庫日、品名ID、入庫数量、出庫数量、入出庫備考、従業員ID
を元に C1_入出庫台帳期毎クエリ をつくりました。SQLが下記になります。
SELECT DISTINCTROW C1_入出庫台帳.入出庫日, C1_入出庫台帳.品名ID, Sum(C1_入出庫台帳.入庫数量) AS [入庫数量 の 合計], Sum(C1_入出庫台帳.出庫数量) AS [出庫数量 の 合計]
FROM C1_入出庫台帳
GROUP BY C1_入出庫台帳.入出庫日, C1_入出庫台帳.品名ID;
1、4/1~3/31の1期の中での製品ID毎の入庫数量、出庫数量の合計数をリスト形式で表示する。
2、期首在庫数量、期末在庫数量を表示する。
3、繰越処理をできるようにする。
4、年度選択によって選択年度の入庫数量、出庫数量の合計数の表示ができるようにしたいのですが
○1 クエリでの4/1から3/31の設定の仕方
○2 期末在庫数の記録の仕方
○3 期末在庫数の繰越処理の仕方
がわかりません。 自分にはハードルが高いことは承知しておりますが、なんとか作り上げたいと思っておりますのでご教授いただければと思います。よろしくお願いいたします。
他に テーブル B1_在庫品マスター フィールド 品名ID、品名、メーカー名 ・・・があります。
期は、4/1~3/31 でしょうか。1/1~12/31でしょうか。
どのようなことがしたくて、どこまでやった、どこがわからないのでしょうか。
もう少し具体的かつ詳細に説明してもらえますか。
いろいろ複雑なこともあると思いますので、よろしかったら、現状のフォームを右のファイル送信フォームから送ってもらえれば、内容を見て、具体的にアドバイスができると思います。
ありがとうございます。
今日は何もできなかったのでまた来週検証してみます。
ありがとうございます。本当に数量に必要なものだけにすると1レコードで表示されました。
GROUP BY から C1_入出庫台帳.入出庫備考 を外してみたらどうでしょうか。
入出庫備考 も表示する場合は、同じく、
Max(C1_入出庫台帳.入出庫備考) As 入出庫備考
で。
ありがとうございます。よく見ればわかることですね。お手数をおかけしました。
参考までにお尋ねしたいのですが、現在は
年月 商品ID 入庫数合計 出庫数合計
2019年4月 1 50
2019年4月 1 25
と表示されますが
年月 商品ID 入庫数合計 出庫数合計
2019年4月 1 50 25
というように1つのレコードして表示することは可能なのでしょうか?
ファイル更新しました。
パスワードは
ah10020616 です。
お世話になります。
そうですね。閉じるボタンを消すほどのこだわりはいらないですね。
おっしゃるとおりに修正しました。
コードを見る限りは問題なさそうです。
実物をみないと原因の特定は難しそうです。
DoCmd.FindRecord はフォーカス移動させる必要があったり扱いが面倒なので、
別案を提案しておきます。
自社コード フィールドのデータ型が数値型の場合です。
テキスト型の場合は、下記のように ' で囲んでください。
GROUP BY に 入出庫ID があるので、入出庫ID が異なれば別グループになりますので、入出庫ID 6 と 12 は集計されませんね。
GROUP BY から 入出庫ID を削除してください。
もし、入出庫ID を表示させてたいのなら、
Min(C1_入出庫台帳.入出庫ID) As 入出庫ID
というフィールドを追加してください。
(小さいほうの入出庫IDが表示されます。)
なるほど、勉強になります。
ありがとうございます。