• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:if分で複数条件の記述方法を教えてください。)

VBAを使った締日と請求日の操作方法

このQ&Aのポイント
  • VBAを使ってAccessの検索フォームに締日入力用のコンボボックスと請求日の日付入力ボックスを配置しました。
  • 締日が月末の場合、コンボボックスから31を選択すると請求日の日付入力ボックスに前月の月末が表示され、それ以外の締日を選択すると、前月のその締日が表示されるようにVBAを作成しました。
  • さらに、今月の締日かどうかを確認するメッセージボックスを表示し、今月なら今月の請求日付、違う場合は先月の請求日付を日付入力ボックスに表示する処理も追加しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1645/2495)
回答No.2

示されているコードでいいのではないでしょうか。 rc使わなくて直接 If MsgBox("今月の締日ですか?", vbYesNo) = vbYes Then でもいけます。

shibushijuko
質問者

お礼

ご回答ありがとうございます。 ご指示通り参考にしながら、下記VBAを作成して思う通りできました。ありがとうございました。 Private Sub close1_AfterUpdate() Dim i As Date, j As Date, k As Date, l As Date i = DateSerial(Year(Date), Month(Date) - 1, [close1]) '先月の31日以外の締日から請求日付を取得 j = DateSerial(Year(Date), Month(Date), 0) '先月の31日の締日から請求日付を取得 k = DateSerial(Year(Date), Month(Date), [close1]) '今月の31日以外の締日から請求日付を取得 l = DateSerial(Year(Date), Month(Date) + 1, 0) '今月の31日の締日から請求日付を取得 If MsgBox("今月の締日ですか?", vbYesNo) = vbYes Then If (Me!close1) <> 31 Then Me!day1 = k Else Me!day1 = l End If ElseIf (Me!close1) <> 31 Then Me!day1 = i Else Me!day1 = j End If End Sub

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.1

And/Or/Xorなどと括弧を使って論理条件を組み合わせられます。 https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/operator-summary if a = b And (c > d Or c < e ) Then

shibushijuko
質問者

お礼

ご回答ありがとうございます。無事解決しました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • If~Elseif分で複数の条件式を書くには?

    毎度です。Access2000で悩んでいます。 フォームにいくつかのコンボボックスを設定してあります。 (コンボ1、コンボ2、コンボ3) この時に各コンボボックスの値を元にそれぞれ違うクエリを走らせたいのですがどうやって書けばいいのでしょうか? If Me!コンボ1 = 1 + コンボ2 = 1 + コンボ3 = 1 Then Docmd.OpenQuery "Query1" ElseIf Me!コンボ1 = 1 + コンボ2 = 1 + コンボ3 = 2 Then Docmd.OpenQuery "Query2" って書いてみたのですが、ダメでしょうか? 条件を複数書く時って「+」でつなげないのでしょうか? 素人です。やさしく教えてください。  

  • Accessフォームでの複数条件検索

    検索用テキストが4つとコンボボックスが1つあり、検索ボタンというコマンドボタンを押すと 該当するレコードを表示させるフォームを作りました。 以下がそのVBAです。 Private sub 検索ボタン_click() Dim strfilter As String, strexp As String, aryope As Variant If Not IsNull (me.一) Then strfilter = "And 出版社 Like '*" & Me.一 & "*'" End If If Not IsNull (me.コンボ62) Then strfilter = "And 種類 Like '*" & Me.コンボ62 & "*'" End If If Not IsNull (me.三) Then strfilter = "And 番号 Like '*" & Me.三 & "*'" End If If Not IsNull (me.四) Then strfilter = "And 発刊日 = # " & Format (me.四. "yyyy-mm-dd") & "#" End If If Not IsNull (me.一) Then strfilter = strfilter & " AND " & BuildCritera ( "タイトル", dbText, "*" Replace ( me.五, "", "*AND*") & "*") End If 改正したいことは   1. 検索用テキストボックスに入力された値全てを満たすレコードを表示したい(現在は例えば     出版社、タイトル、番号の3つを入力するとそれぞれの項目にヒットする物がすべて検出さ     れる)   2. テキストボックス[三]の番号は完全一致で抽出したい(26を抽出したいのに126や2673     等も抽出されてしまう)   3. テキストボックス[四]の発刊日は西暦表示から和暦で入力して検索したい     (テキストボックス[四]をコンボボックスに変え、西暦・和暦両方表示にし、[四A]を追加して     月日という名前にしてこれら年月日をくっつけて完全一致で検索する方法を考えましたが     記述がわかりません)   5.タイトルがWeb検索の様に複数曖昧検索ができない     中途半端な検索で抽出してる状態です。     どなたか手直しいただけますでしょうか? 

  • If,Forを使ってカレンダー・スケジュールを作成

    visual basic 2010を使用しています。 「コンボボックス1でAが選択されている場合、コンボボックス2のアイテムをテキストボックス1へ、コンボボックス1がBの場合はテキストボックス2へ……」 というコードを書きました。 If CombBox1.Text = "A" Then TextBox.Text = ComboBox2.Text ElseIf ComboBox.Text = "B" Then TextBox2.Text = ........................... ............................. これに追加して日付の概念を入れるにはどうすればいいでしょうか。 「日付が今日で、なおかつコンボボックス1でAが選択されている場合、コンボボックス2のアイテムをテキストボックス1(今日のAのテキストボックス)へ」 ということです。 「日付が1日後だった場合~」 「日付が2日後だった場合~」 と、1週間後まで繰り返したいです。 ・DateTimePicker ・Dim a As Integer = DateAndTime.day(Now) この二つはフォーム、コードに設置しています。 これらとif,for、もしくはその他の関数を使って効率の良いプログラムの書き方を教えて頂けないでしょうか。 分かりやすいように、手書きで申し訳ないですが、画像も載せておきます。 以上、宜しくお願い致します。

  • access 2003 コマンドボタンのEnabledイベントについて

    いつもお世話になっています。 どなたかわかる方アドバイスいただけないでしょうか? 現在、会社の勤務表をaccess2003にて作成しています。 勤務状況を保存する勤務表テーブルと入力用コントロールが 複数あるフォーム1フォームがあります。 出社時間や退社時間、作業内容を入力し登録コマンドボタンの イベントで入力内容を勤務表テーブルに入力し、同時に その月1ヶ月分の勤務状況をフォーム1フォーム上のリストボックス に表示させています。 今回は 表示している1カ月分の勤務に対して前月、翌月の勤務を表示する コマンドボタンを作成しました。 前月は問題なくできたのですが、翌月に関してはシステム時間に 対して未来の月に関しては表示させない(コマンドボタンを使用不可 にする制限をつけ)ようとしているのですが、できません。 翌月コマンドボタンのイベントで未来の月を表示させようとした時に 使用不可にしようとしても翌月コマンドボタンのイベントで 翌月コマンドボタンを使用不可にはできないみたいですし、 どうにもこまっています。 なにかいい案ありませんでしょうか?どなたかお願いします。 ちなみに翌月ボタンに関するコードです。 '翌月ボタンに関するイベント Private Sub コマンド89_Click() DoCmd.SetWarnings False Dim yokugetucount Dim yokugetu yokugetucount = DCount("*", "勤務表", "[ユーザー名] = [Forms]![フォーム1]![コンボ56] AND [日付] >= DateSerial(Year(calendar6),Month(calendar6)+1,1) and [日付] < Dateserial(Year(calendar6),Month(calendar6)+2,1)") If yokugetucount > 0 Then Me!リスト76.RowSourceType = "Table/Query" Me!リスト76.RowSource = "select id,format([日付],'mm/dd'),曜日,出社,出社属性,退社,退社属性,作業時間,作業内容 from 勤務表 where [ユーザー名] = [forms]![フォーム1]![コンボ56] and ([日付] >= DateSerial(Year(calendar6),Month(calendar6)+1,1) and [日付] < Dateserial(Year(calendar6),Month(calendar6)+2,1)) ORDER BY 日付;" Else yokugetu = Format(DateSerial(Year(Calendar6), Month(Calendar6) + 1, 1), "yyyy/mm") Select Case Right(yokugetu, 2) Case 1, 3, 5, 7, 8, 10, 12 X = 31 Case 4, 6, 9, 11 X = 30 Case 2 If IsDate(yokugetu & "/29") = True Then X = 29 Else X = 28 End If End Select For C = 1 To X Work1 = yokugetu & "/" & Right("00" & C, 2) Work2 = Format(yokugetu & "/" & Right("00" & C, 2), "aaa") kakunin = DCount("*", "勤務表", "[ユーザー名] = [Forms]![フォーム1]![コンボ56] AND 日付 = #" & Work1 & "#") If (kakunin = 0) And (Me!コンボ56 <> "") Then DoCmd.RunSQL "Insert into 勤務表(ユーザー名,日付,曜日) values ([forms]![フォーム1]![コンボ56],#" & Work1 & "#,'" & Work2 & "')" End If Next End If Me!リスト76.RowSourceType = "Table/Query" Me!リスト76.RowSource = "select id,format([日付],'mm/dd'),曜日,出社,出社属性,退社,退社属性,作業時間,作業内容 from 勤務表 where [ユーザー名] = [forms]![フォーム1]![コンボ56] and ([日付] >= DateSerial(Year(calendar6),Month(calendar6)+1,1) and [日付] < Dateserial(Year(calendar6),Month(calendar6)+2,1)) ORDER BY 日付;" Calendar6 = DateSerial(Year(Calendar6), Month(Calendar6) + 1, 1) テキスト88 = Calendar6 DoCmd.SetWarnings True End Sub 前月ボタンはEnd Subの前に If DateSerial(Year(Calendar6), Month(Calendar6) + 1, Day(Calendar6)) > DateSerial(Year(Date), Month(Date), Day(Date)) Then コマンド89.Enabled = False Else コマンド89.Enabled = True End If を入れる事でやりたい事ができました。

  • FindFirst複数条件

    access 超初心者です。 フォームに2つのコンボボックス(COM_A,COM_B)があり そのコンボボックスで条件を2つ設定し、テーブル(TBL)から 条件の一致したレコードを検索したいのですが、うまくいきません。 TBLのフィールド AAA ---> COM_Aで指定 BBB ---> COM_Bで指定 Dim db As DAO.Database Dim TBL As DAO.Recordset Set db = CurrentDb Set TBLrs = db.OpenRecordset("TBL", dbOpenDynaset) TBLrs.FindFirst"AAA='"&Me.COM_A&"'"And"BBB='"& Me.COM_B & "'" If TBLrs.NoMatch Then 処理 Else 処理 End If というコードなのですが、実行すると『型が一致しません』となってしまいます。 TBLrs.FindFirst"AAA='"&Me.COM_A&"'" If TBLrs.NoMatch Then ~ とか TBLrs.FindFirst"BBB='"&Me.COM_B&"'" If TBLrs.NoMatch Then  ~ のように条件を1つにすると各々問題なく動作します。 単純にAndでひっつけるだけではダメなのでしょうか? いろいろ調べましたが、完全に行き詰ってしまいました。 ヒントでもいただければありがたいです。 よろしくお願いします。

  • AccessVBAで複数条件で検索する方法

    お世話になります。 複数条件での検索をしたいのですが、分類をコンボボックスから選び、日付をテキストボックスに 2002/08/01 ~ 2002/08/14 と入力してボタンを押すとサブフォームにその結果を出すようにしたいです。 可能でしょうか?? 宜しくお願いします!!

  • エクセル VBA if構文

    毎度お世話になります。 下記プログラミングですが、 シャーペンまたはボールペンがコンボボックス1で 選択された場合はコンボボックス2で10束または50束の選択肢となり 消しゴムまたはシャー芯がコンボボックス2で 選択された場合はコンボボックス2で100コまたは1000コの選択肢としたいのですが 他の方法がありますでしょうか。 宜しくお願い致します。 If Me.ComboBox1.Value = "シャーペン" Or Me.ComboBox1.Value = "ボールペン" Then ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "" ComboBox2.Clear ComboBox2.AddItem "10束" ComboBox2.AddItem "50束" ComboBox2.ListIndex = -1 End If If Me.ComboBox1.Value = "消しゴム" Or Me.ComboBox1.Value = "シャー芯" Then ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "" ComboBox2.Clear ComboBox2.AddItem "100コ" ComboBox2.AddItem "1000コ" ComboBox2.ListIndex = -1 End If

  • アクセスvba if文の記述方法

    検索フォームを作成しました。 入力項目は「氏名」「カナ」で入力チェックをおこなっております。 (未入力)メッセージを表示「未入力です」 (入力有)結果一覧のフォームを表示 未入力チェックは正常に処理されておりメッセージが表示されます。 項目に値を入力した場合フォームが起動しません。 if文から外した場合は正常に実行されます。 この条件の場合if文でどのように記述したらよいのでしょうか。 宜しくお願いします。 Private Sub 検索_Click() Dim mct As Control Dim flg As Boolean flg = False For Each mct In Me.Controls  If mct.ControlType = acTextBox Then   If mct.Tag = "Check" Then    If Not IsNull(mct) Then     flg = True     Exit Sub    End If   End If  End If Next mct If flg = True Then  Dim str As String  str = "[氏名] Like ""*" & Me!氏名 & "*"" And [カナ] Like ""*" & Me!カナ & "*"""  DoCmd.OpenForm "結果一覧", , , str Else  MsgBox ("未入力です") End If End Sub

  • VBA FIND時のIFの使い方について

    VBA素人です。教えてください。 添付シートのようなデータがあるとします。 ユーザーフォームにテキストボックスを作成し、 (1)シート内の型式を型式BOXに手入力で入れる (2)良品数を手入力で入れる (3)日付を手入力で入れる(初期設定はDateをかえす) (1)~(3)を入力し、入力コマンドボタンで型式と日付がFINDするセルに 良品数を入れるコードを下記作成しました。 シート内に対象の型式、日付があれば、うまく作動するのですが、 型式、日付両方が無い場合、もしくはどちらか片方が無い場合は、 うまく作動しません。 おそらく型式FIND~IF、日付FIND~IFの使い方が悪いと思います。 型式がシート内に無ければ、型式エラーとしマクロを抜ける。 型式があり、日付が無ければ、日付エラーでマクロを抜けるコードを教えてください。 なお、型式を手入力で入れていますが、シート内の("B:B")セルを選択すると自動で型式テキストボックスに入れる方法もご教示下さい。 Private Sub UserForm_Initialize() 型式BOX = ""'テキストボックス 良品BOX = ""'テキストボックス 日付BOX = Date'テキストボックス 型式BOX.SetFocus End Sub Private Sub 入力_Click() Application.ScreenUpdating = False Application.EnableEvents = False If Len(型式BOX.Value) = 0 Then MsgBox "型式が未選定です" Cancel = True ElseIf Len(良品BOX.Value) = 0 Then MsgBox "良品が未入力です" Cancel = True ElseIf Len(日付BOX.Value) = 0 Then MsgBox "日付が未入力です" Cancel = True Else Dim a As Variant a = 型式BOX.Value Dim b As Date b = 日付BOX.Value On Error Resume Next Columns("B:B").Select ActiveSheet.Cells.Find(a, , , xlWhole, xlByRows, xlNext, False).Select X = ActiveCell.Row If Err = 91 Then MsgBox (prompt) & a & "の型式はありません", _ (vbOKOnly + vbExclamation), ("型式検索結果") Err.Clear End If On Error Resume Next Rows("1:1").Select ActiveSheet.Cells.Find(b, , , xlWhole, xlByColumns, xlNext, False).Select Y = ActiveCell.Column If Err = 91 Then MsgBox (prompt) & b & "の日付はありません", _ (vbOKOnly + vbExclamation), ("日付検索結果") Err.Clear   End If Cells(X, Y) = 良品BOX.Value End If End Sub

  • accessの検索フォームについて(複数条件)

    access初心者です。 本などを参考に検索フォームを作成しました。 1つの条件で検索することは出来たのですが、複数の条件を入力するとうまく検索出来ません。 全ての条件を満たすデータの抽出を行いたいと思います。 「あ」「い」「う」というテキストボックスを用意しています。 Private Sub コマンド14_Click() If Not IsNull(Me.txt_あ) Then ' Me.Filter = "あ LIKE '*" & Me!txt_あ & "*'" End If If Not IsNull(Me.txt_い) Then ' Me.Filter = "い LIKE '*" & Me!txt_い & "*'" End If If Not IsNull(Me.txt_う) Then ' Me.Filter = "う LIKE '*" & Me!txt_う & "*'" End If Me.FilterOn = True End Sub よろしくお願いします。

このQ&Aのポイント
  • G6030を使用していたが、プリンターを設置場所を変更してからエラーランプが点灯し、印刷などの機能が使えなくなった。電源のON/OFFに関係なく、オレンジのエラーランプが常時点灯している。電源を2分以上抜いても変化がない。壊れたのかどうか、そして復帰方法があれば教えてほしい。
  • G6030の設置場所を変更するためにコンセントとUSBコードを切り離し、再び繋げた結果、オレンジのエラーランプが点灯して印刷機能が使用できなくなった。電源のON/OFFには関係がなく、エラーランプは常に点灯している。電源を2分以上抜いても改善しないため、プリンターが壊れたのかどうか知りたい。また、復帰方法があれば教えてほしい。
  • G6030を使用しており、プリンターの設置場所を変更した結果、オレンジのエラーランプが点灯し、印刷機能が使えなくなった。電源のON/OFFに関係なくエラーランプが点灯し続け、電源を2分以上抜いても改善しない。どのような原因によるエラーなのか分からず、復帰方法があれば教えてほしい。
回答を見る