Microsoft Access 掲示板

views
4 フォロー
6,283 件中 5,961 から 6,000 までを表示しています。
4

ご回答有難うございます。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"が複数文字列である場合の分解しない状態をご教授願えないでしょうか。宜しくお願い致します。

4

データベースファイルを長く使用していると、ゴミがたまって、ある日、突然不具合が発生する、破損するというようなことがたまにあります。それを防ぐために、下記を参考にしてください。

AccessのDBファイルを長期的に安定して使用するには - hatena chips

今回の回答の方法も上記にあります。あとは、バッグアップは定期的にとるようにしましょう。

3
hatena 2019/06/04 (火) 13:34:50 修正

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*"
となります。

3
totoo 2019/06/04 (火) 13:32:54 ac29f@d9723

お世話様です。全部インポートして、現在ところ正常に動いています少。
まだ少し不安もありますが、とりあえずこれで行ってみようと思います。
ありがとうございました。

2

ご回答誠に有難うございます。大量にあるわけでは、無いのです。AND では無く ORの場合は、
Like "[○,○,・・・]"があり、ANDでもこの様な事が出来ないかなと思いまして。見易さ、編集のし易さを考えています。テーブルを作らない方法をお願い致します。

1
hatena 2019/06/04 (火) 11:18:03 修正

非表示の対象が大量にあるのなら、「非表示リスト」テーブルを作成してそれを利用するといいでしょう。

禁止ワードリスト

禁止ワード
○○
△△
□□
◆◆

クエリのフィールド欄に下記の式を設定。

式1: DLookup("禁止ワード","禁止ワードリスト","'" & [対象フィールド] & "' Like '*' & [禁止ワード] & '*'" )

抽出条件欄には、下記を設定。

Is Null

禁止ワードの追加や変更があった場合、禁止ワードリストを変更するだけですみます。

3
いのそらん 2019/06/01 (土) 21:19:41 4a53a@5f14a

ありがとうございます。
予定の無い月に移動してもしょうがないので、さっそくアドバイスに通りに変更しました。
無事動作も確認できました。ありがとうございます。

2

それで、OKですね。

あるいは、

SetCalendar DMax("日付", "T_予定")

とすれば、T_予定テーブルの最新日の月に移動します。

1
いのそらん 2019/06/01 (土) 11:57:58 4a53a@5f14a

自己解決?

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

に変えたらとりあえず移動したようです。
正しいのでしょうか?

2
totoo 2019/05/31 (金) 22:36:55 7b765@027df

ありがとうございます。
月曜日出社後に試してみます。

1

新規ファイルを作成して、そのファイルにすべてのオプジェクトをインポートして、そのファイルを使用するようにしてみてください。
それで改善する場合があります。

2007はサポートが終了しているので、新しいバージョンへの移行も検討された方がいいかと。

Office にはサポート期限があります! 2017年10月10日(火)、Office 2007 の 延長サポートが終了します。余裕をもったご準備を。

11
ゆきぴ 2019/05/30 (木) 09:55:21 598e9@20787

色々お気遣いいただきありがとうございました。
今回はMENU画面で個別のフォームを開くボタンの前にポップアップで番号を入力する画面を作成しました。
この形でOKが出たのでこのままにしておこうと思います。(^^;)

またお聞きすることがたくさん出てくると思いますのでよろしくお願いします。

10
hatena 2019/05/29 (水) 20:03:49 修正

毎月集計のクエリをレコードソースとする表形式のレポートを作成します。
レポートウィザードを使うと簡単にできます。
詳細セクションにテキストボックスを配置して、
下記のように設定します。

コントロールソース =[入庫数合計]-[出庫数合計]
集計実行 全体

以上です。

レポートは、印刷プレビューではなく、レポートビューで表示すると一覧性が高いものになります。

2
ojyamajyo 2019/05/29 (水) 13:01:13

ありがとうございます!
できました!

1
shige 2019/05/29 (水) 09:28:51 d1a4b@b63e8

DoCmd.SetWarnings False '←コメントの非表示?
削除の処理~
DoCmd.SetWarnings True '←コメントの表示

9
igaguri 2019/05/28 (火) 07:08:35 32a1e@d14a6

御世話になります。クエリでなくても大丈夫です。

8

クエリでないとダメですか。
クエリをレコードソースとするレポート(印刷プレビューまたはレポートビュー)なら、テキストボックスの「集計実行」プロパティの設定で簡単に表示できます。

クエリだとDSum関数かサブクエリで実現することになりますが、かなり複雑なものになります。

6
igaguri 2019/05/27 (月) 16:27:56 32a1e@d14a6

ありがとうございました。無事に抽出できました。
また、細かな点を別途ご指摘いただきましてありがとうございます。
皆様からご教授いただいたモノをメモにして整理させていただいています。

5
名前なし 2019/05/27 (月) 15:47:45 1b7fd@f966d >> 4

あぁ、よく見たら最初の式はちゃんとシングルクォーテーションでくくった形になってますね。3.は問題ありませんでした。訂正します。

ただ、「#」は不要です。
like演算子を使った時の「#」は何でもいい1文字の数字となるので、最初の式では例えば「0April 20180」~「9April 20189」の100パターンに一致するものを抽出するという設定になります。

8
ゆきぴ 2019/05/27 (月) 14:51:20 598e9@20787

ありがとうございます。
フォームを送りたいのですが会社のセキュリティ上ページが開けません。
今は別フォームでIDを入力するフォームを作成して、txt氏名IDの規定値に =[Forms]![F_ID]![txtID] を設定したら入力されたIDが表示されました。
menu画面 ⇒ ID入力画面 ⇒ カレンダー表示 となるのでもう少しスマートな方法がないかと模索中です。(^^;)

4
名前なし 2019/05/27 (月) 14:36:14 1b7fd@f966d

filterはレコードソースのフィールドに対して働きます。
テキストボックス「月」のコントロールソースは「月」になってますか?

以下、以前からの質問の延長であると想定した回答です。

Me.Filter = "[入出庫日 を月でグループ化] = '" & Me.検索月 & "'"

ではどうでしょう?

その他あれこれ
1.[入出庫日 を月でグループ化]
フィールド名に半角スペースが入っている場合は[]で囲む必要があります。煩雑になるのでフィールド名に半角スペースは使わないと決めてしまうといいと思います。

2.like
like演算子はワイルドカードを用いた比較に必要な演算子です。完全一致でいい今回は「=」でいいと思います。

3.#(~)#
データの種類を指定する囲み文字ですが、format関数で出力した結果は文字列型になるので文字列同士の比較となるよう「'(~)'」のようにシングルクォーテーションで囲みましょう。

7
igaguri 2019/05/27 (月) 13:49:25 32a1e@d14a6

御世話になります。
上司に途中経過として見ていただいたところ、この毎月集計でも期末在庫数と同じように月末での在庫数を表示できないかといわれました。月初毎に入出庫台帳に書き加えると入荷数量が大幅に増えてしまうので頭を抱えています。何かいい方法はありますでしょうか?

3
igaguri 2019/05/27 (月) 11:03:04 32a1e@d14a6

ありがとうございます。
パラメーターの入力ボックスが表示されてしまいます。

2
shige 2019/05/27 (月) 09:11:56 d1a4b@b63e8

Me.Filter = "月 like #" & Me.検索月 & "#"    'も不要ですね

1
shige 2019/05/27 (月) 09:10:42 d1a4b@b63e8

Me.Filter = "月 like'#" & 検索月 & "#'"

Me.Filter = "月 like'#" & me.検索月 & "#'" では?

5
igaguri 2019/05/26 (日) 10:55:55 32a1e@d14a6

御世話になります。
1、メインメニュー に 年度繰越処理 というボタン を設置して 
  前年度期末在庫数 を 今年度の4/1に期首在庫数として C1_入出庫台帳に一括入力させた方がいいのでしょうか?
  ※ 前年度期末在庫数 があるモノはその数量、ないものは 0 というように・・・。
2,期毎の 入庫合計数量 と 出庫合計数量 のクエリと 期末在庫数量が表示されるクエリ を別に作成していますが
  一つにまとめた方が見やすいのでしょうか?
現在、前者のフォームをつくったのですが・・・。
画像1
フォーム詳細欄に非連結テキストボックス 表示年度 を作り メインフォームの 年度 を抽出していて
テキストボックス 表示年度 の更新後処理に
Private Sub 表示年度_AfterUpdate()

    Me.Filter = "年度 like'" & 表示年度 & "'"
    Me.FilterOn = True

End Sub
と 記述しています。

4
igaguri 2019/05/25 (土) 20:52:52 32a1e@d14a6

ありがとうございます。表示できるようになりました。使いやすくなるように工夫してみたいと思います。

3
hatena 2019/05/25 (土) 13:25:27 修正

○1 クエリでの4/1から3/31の設定の仕方

下記のような演算フィールドを作成して、それでグループ化すればいいでしょう。

年度: Year(DateAdd("m",-3, [入出庫日])

これで、入出庫日 2019/4/1 ~ 2020/3/31 のレコードの年度は 2019 になります。

SQLなら、

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;

○2 期末在庫数の記録の仕方

○3 期末在庫数の繰越処理の仕方

棚卸しはするのでょうか。
前回の質問の画像には
「入出庫備考」フィールドに「棚卸在庫数」というのがあったので、
期末(3月末日)に棚卸をするのかな。

もし、そうなら、
それがそのまま 期末在庫数 ということになりますね。
また、それが、次期の期首在庫数(繰越) ということですね。

[入出庫備考]を 棚卸在庫数 として、[入庫数量] に 棚卸結果を入力すればいいですね。
入出庫日 は期首の日付(4/1)にしておくと後々処理が楽です。

そうすれば、
帳簿上の在庫は、下記のSQLで取得できます。

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;

これと、棚卸在庫数 を比較すれば,実数と帳簿数の過不足数も取得できます。

2
igaguri 2019/05/25 (土) 12:14:57 32a1e@d14a6

ありがとうございます。
テーブル 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、品名、メーカー名 ・・・があります。

1

期は、4/1~3/31 でしょうか。1/1~12/31でしょうか。

どのようなことがしたくて、どこまでやった、どこがわからないのでしょうか。

もう少し具体的かつ詳細に説明してもらえますか。

7

いろいろ複雑なこともあると思いますので、よろしかったら、現状のフォームを右のファイル送信フォームから送ってもらえれば、内容を見て、具体的にアドバイスができると思います。

6
ゆきぴ 2019/05/24 (金) 18:01:49 598e9@20787

ありがとうございます。
今日は何もできなかったのでまた来週検証してみます。

6
igaguri 2019/05/24 (金) 16:41:10 32a1e@d14a6

ありがとうございます。本当に数量に必要なものだけにすると1レコードで表示されました。

5

GROUP BY から C1_入出庫台帳.入出庫備考 を外してみたらどうでしょうか。

入出庫備考 も表示する場合は、同じく、
Max(C1_入出庫台帳.入出庫備考) As 入出庫備考
で。

4
igaguri 2019/05/24 (金) 14:32:24 32a1e@d14a6

ありがとうございます。よく見ればわかることですね。お手数をおかけしました。
参考までにお尋ねしたいのですが、現在は
  年月    商品ID 入庫数合計 出庫数合計
2019年4月  1   50
2019年4月  1         25
と表示されますが
  年月    商品ID 入庫数合計 出庫数合計
2019年4月  1   50    25 
というように1つのレコードして表示することは可能なのでしょうか?

13
ojyamajyo 2019/05/24 (金) 12:47:33 >> 12

ファイル更新しました。

パスワードは

ah10020616  です。

12
ojyamajyo 2019/05/24 (金) 12:43:10

お世話になります。
そうですね。閉じるボタンを消すほどのこだわりはいらないですね。
おっしゃるとおりに修正しました。

19

コードを見る限りは問題なさそうです。
実物をみないと原因の特定は難しそうです。

DoCmd.FindRecord はフォーカス移動させる必要があったり扱いが面倒なので、
別案を提案しておきます。

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

自社コード フィールドのデータ型が数値型の場合です。
テキスト型の場合は、下記のように ' で囲んでください。

        .FindFirst "自社コード='" & Me.自社コード検索 & "'"
3

GROUP BY に 入出庫ID があるので、入出庫ID が異なれば別グループになりますので、入出庫ID 6 と 12 は集計されませんね。

GROUP BY から 入出庫ID を削除してください。

もし、入出庫ID を表示させてたいのなら、
Min(C1_入出庫台帳.入出庫ID) As 入出庫ID
というフィールドを追加してください。
(小さいほうの入出庫IDが表示されます。)

18
名前なし 2019/05/24 (金) 09:08:40 0aba4@f966d >> 12

なるほど、勉強になります。
ありがとうございます。