• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 条件別処理)

VBA条件別処理の記述方法と誤謬のチェック方法

このQ&Aのポイント
  • VBAを使用して、売上台帳から特定の条件で請求書を作成する方法について教えてください。
  • 特定の条件を満たす場合に売上台帳のデータをコピーし、指定のセルに貼り付けるVBAコードの書き方を教えてください。
  • また、コピーしたデータを貼り付ける際の基準セルの指定方法についても教えてください。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

>売上台帳は 縦(列)に1日1行か 1日複数行か 1日分は行的に固まっているのか。 そういうデータの状況のことを書かないと、それらによって大幅に処理ロジックが変わる。模擬実例を挙げよ。 読者には売上台帳が見えないことを忘れるな。 ーー A1に6、A2に25と入っているシートと売上台帳は同じシートか (ブック)シート、(行、列)、データの並び順を明確にして質問のこと。 ーー 年指定の問題は、面倒でも1セル指定するようにすべきだ。 またVBA初心者なら、月末というのをやめて31日、30日、28日、29日を具体的に入れる設計の法が良いと思う。コードが増えるだけ。 ーーー 初心者のうちはCopyメソッドより、他セルに値代入をお勧めする。 経験から、コピー法は初心者にはなれるまで難しいと思う。 ーー 日付はエクセルでは日付シリアル値という整数値であることをご存知か。大切なことです。これが判れば、日付の前後は整数の大小に帰する。 ーー 参考コード 範囲日付の抜き出し 日付条件は同一シート(A1,A2とする)。2008年仮定。 Sub test01() e = DateSerial(2008, Range("a1"), Range("a2")) 'MsgBox e s = DateSerial(2008, Range("a1") - 1, Range("a2")) + 1 'MsgBox s d = Range("a65536").End(xlUp).Row For i = 3 To d hi = DateSerial(2008, Cells(i, "C"), Cells(i, "D")) 'MsgBox hi If (hi >= s) And (hi <= e) Then MsgBox hi '日付条件を満たす。他シートナリに値を代入。 End If Next i End Sub MsgBoxのシングルコーテーションを順次はずして実行し、正しい結果になるかチェック・納得してみて。 ーー 他シートに代入する場合の書き方は少し経験が要る。 まずそういうことを勉強して、判らない場合は質問して、課題解決に進めるべきだ。 どういう要素技術(=コード記述)がいるかが整理できないなら、こんな仕事に関連したことに、今は着手すべきでない。

isekaoru
質問者

お礼

遅くなり大変失礼いたしました。 ありがとうございました。

isekaoru
質問者

補足

imogasi様 長文の御指導ありがとうございます。 長文になりますが、御判読いただき御指導いただければ幸甚で御座います。 >売上台帳は 縦(列)に1日1行か 月/日/注文番号/商品コード/品名/数量/単価/納品金額/入金額/備 考 0/0 繰越金額 1,547 5/25 123 525 AAA 5.25 3.00 16 5/26 5-26 526 BBB 526.00 26.00 13,676 6/ 1 6-1 61 CCC 61.00 16.00 976 6/ 1 6-1-1 1231 DDD 3.00 123.13 369 6/20 入  金 15 6/25 6-25 625 EEE 625.00 65.00 40,625 6/26 6-26 626 FFF 626.00 26.00 16,276 合   計 73,485 15 >1日複数行か ● 固定していません。 1日分は行的に固まっているのか。 そういうデータの状況のことを書かないと、それらによって大幅に処理ロジックが変わる。模擬実例を挙げよ。 >読者には売上台帳が見えないことを忘れるな。 ● 解りました >A1に6、A2に25と入っているシートと売上台帳は同じシートか ● 同じシートです (ブック)シート、(行、列)、データの並び順を明確にして質問のこと。 ーー >年指定の問題は、面倒でも1セル指定するようにすべきだ。 ● 上記御指示の意味は 1.例えば A3に指定する 2.表に 年 の列を設ける 3・表に 年 の列を設け A3 で指定する >またVBA初心者なら、月末というのをやめて31日、30日、28日、29日を具体的に入れる設計の法が良いと思う。コードが増えるだけ。 ● 解りました >初心者のうちはCopyメソッドより、他セルに値代入をお勧めする。 ● 値代入の記述方法を教えてください。 日付はエクセルでは日付シリアル値という整数値であることをご存知か。大切なことです。これが判れば、日付の前後は整数の大小に帰する。 ● 忘れていました。 >参考コード Sub test01() '参考コード '範囲日付の抜き出し '日付条件は同一シート(A1,A2とする)。2008年仮定。  ●エラーメッセージ(変数が定義されていません)が出ましたので下記5行追加してみました。 ' Dim e As Integer Dim s As Integer Dim d As Integer Dim i As Integer Dim hi As Integer  ●ヘルプを見ましたが理解出来ず試行したのはここまでです。 e = DateSerial(2008, Range("a1"), Range("a2")) '← エラーメッセージ(オーバーフローしました。) 'MsgBox e s = DateSerial(2008, Range("a1") - 1, Range("a2")) + 1 'MsgBox s d = Range("a65536").End(xlUp).Row For i = 3 To d hi = DateSerial(2008, Cells(i, "C"), Cells(i, "D")) 'MsgBox hi If (hi >= s) And (hi <= e) Then MsgBox hi '日付条件を満たす。他シートナリに値を代入。 End If Next i End Sub 'MsgBoxのシングルコーテーションを順次はずして実行し、 '正しい結果になるかチェック・納得してみて。 End Sub MsgBoxのシングルコーテーションを順次はずして実行し、正しい結果になるかチェック・納得してみて。 ーー >他シートに代入する場合の書き方は少し経験が要る。 ●出来ればSheet2に作成したいと思っています(売上台帳がSheet1) >まずそういうことを勉強して、判らない場合は質問して、課題解決に進めるべきだ。 ●解りました。 >どういう要素技術(=コード記述)がいるかが整理できないなら、こんな仕事に関連したことに、今は着手すべきでない。 ●リタイアした68歳の勉強中の初心者です。

関連するQ&A