マクロで未来の日付を算出する方法

このQ&Aのポイント
  • マクロを使用して、未来の日付を算出する方法について教えてください。
  • 年と月と日の加算を同時に成立させて、未来の日付を表示させたいのですが、うまくいきません。
  • 現在の記述方法では、どの部分が間違っているのか教えていただけますか?
回答を見る
  • ベストアンサー

マクロ 未来の日付を算出する その2

まだまだ未熟な者です。 年と月と日の加算を同時に成立させて、未来の日付を表示させようかなと思っています。加算を同時成立させる方法が分からなくて、以下の方法を取りましたが、マクロがまともに動きません。以下の記述方法の場合、どの点が間違っているのでしょうか?御指導お願いします。 Sub 周期到達日を算出する(2)() Sheets("日付").Range("C6").Value = DateAdd("yyyy", Range("C3"), "1900/1/0") Sheets("日付").Range("C7").Value = DateAdd("m", Range("C4"), "1900/1/0") Sheets("日付").Range("C8").Value = DateAdd("d", Range("C5"), "1900/1/0") Sheets("日付").Range("C10").Value = Range("C3") + Range("C4") + Range("C5") + Range("C9") End Sub

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

こんにちは。 >まちがい DateAdd関数の中で「"1900/1/0"」みたいに文字列を記入しても、計算できません。 それからマクロ名の中に(2)なんて使ったら、そもそもダメです。 周期を加算するスタートになる起算日が無いよと指摘しておきましたが、C9の日付を起算日にしたいと言いたかったのですか。 sub macro1()  worksheets("日付").select  range("C10") = dateadd("yyyy", range("C3"), range("C9"))  range("C10") = dateadd("m", range("C4"), range("C10"))  range("C10") = dateadd("d", range("C5"), range("C10")) end sub

kero1192kero
質問者

お礼

回答ありがとうございました。 最初だけ前のデータを使用し、次回から最初のデータを引用すればよかったんですね。応用力が全くないので、変に考えちゃいました。 あと、マクロ名に(2)が入っていましたね。こちらのマクロ記述では(2)だったんですけど・・・。文字化けしちゃったのかなぁ?

関連するQ&A

  • このマクロあっていますでしょうか?よろしくお願いいたします。

    ★sheetA Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$14" And Target.Address <> "$C$19" _ And Target.Address <> "$F$19" Then Exit Sub If Target.Address <> "$R$14" And Target.Address <> "$S$14" _ And Target.Address <> "$T$19" Then Exit Sub Application.EnableEvents = False With Sheets("B") .Range("F14").Value = Range("C14").Value .Range("F17").Value = Range("C19").Value .Range("F20").Value = Range("F14").Value .Range("F23").Value = Range("F19").Value End With With Sheets("C") .Range("F13").Value = Range("R14").Value .Range("F14").Value = Range("S14").Value .Range("F18").Value = Range("T19").Value End With Application.EnableEvents = True End Sub ★sheetB Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$14" And Target.Address <> "$F$17" _ And Target.Address <> "$F$23" Then Exit Sub Application.EnableEvents = False With Sheets("A") .Range("C14").Value = Range("F14").Value .Range("C19").Value = Range("F17").Value .Range("F19").Value = Range("F23").Value End With Application.EnableEvents = True End Sub ★sheetC Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$13" And Target.Address <> "$F$14" _ And Target.Address <> "$F$18" Then Exit Sub Application.EnableEvents = False With Sheets("A") .Range("R14").Value = Range("F13").Value .Range("S14").Value = Range("F14").Value .Range("T19").Value = Range("F18").Value End With Application.EnableEvents = True End Sub

  • マクロ Date関数の使用中に・・・・

    未来の日付を算出するなかで、起算日(C6セル)にyyyy/m/d以外の情報が入っている場合エラーがかかってしまいます。何故、yyyy/m/d以外の情報が入るかと申しますと、前段階のマクロ処理の中で選択範囲の中に『0 ゼロ』が含まれている場合、履歴無しと入力されてしまうからです。 この場合、前段階のマクロを修正した方が良いのでしょうか?それとも以下のマクロを修正するだけでOKなのでしょうか?御指導お願いします。 Sub シート単位で周期到達日を繰り返し算出する() Dim c As Integer c = 3 Do While Cells(2, c).Value <> "" Cells(7, c) = DateAdd("yyyy", Cells(3, c), Cells(6, c)) Cells(7, c) = DateAdd("m", Cells(4, c), Cells(7, c)) Cells(7, c) = DateAdd("d", Cells(5, c), Cells(7, c)) c = c + 1 Loop End Sub 一応、前段階のマクロ処理を記載しときます。 Sub 一覧以外の全シートの最終履歴を表示する() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then Dim c As Integer c = 3 Do While ws.Cells(2, c).Value <> "" With ws.Cells(6, c) .NumberFormatLocal = "G/標準" .Value = Application.WorksheetFunction.Max(ws.Range(ws.Cells(8, c), ws.Cells(10000, c))) .Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole .NumberFormatLocal = "yyyy/m/d;@" End With c = c + 1 Loop End If Next End Sub

  • エクセル シート上のTextBox(日付)

    今まではForm上にTextBoxを貼り、スピンボタンにて日付を変化させるのは できるのですが、これをシート上で日付を動かすと どのような記述の変化が必要なのでしょうか? TextBoxはhidukeという名でしています!日付は出るのですが スピンボタンは動きません! すいません教えて下さい! Private Sub SpinButton1_SpinDown() Me.hiduke.Value = DateAdd("d", -1, Me.hiduke.Value) End Sub Private Sub SpinButton1_SpinUp() Me.hiduke.Value = DateAdd("d", 1, Me.hiduke.Value) End Sub Private Sub hiduke_Change() Me.hiduke.Value = Format(Now(), "yyyy/mm/dd") End Sub

  • エクセル2003マクロの再編集

    Sub test() Dim 行1 As Long, 最終行 As Long, 行2 As Long Sheets("Sheet2").Cells.ClearContents Sheets("Sheet1").Activate 最終行 = Range("C65536").End(xlUp).Row 行2 = 1 For 行1 = 1 To 最終行 Sheets("Sheet2").Cells(行2, 1).Resize(1, 3) = Range(Cells(行1, 1), Cells(行1, 3)).Value Sheets("Sheet2").Cells(行2, 3).Value = Abs(Sheets("Sheet2").Cells(行2, 3).Value) If Range("A" & 行1).Value = "BBBB1" Then Sheets("Sheet2").Range("A" & 行2) = Range("A" & 行1) & "-1" Sheets("Sheet2").Cells(行2 + 1, 1).Resize(1, 3) = Range(Cells(行1, 1), Cells(行1, 3)).Value Sheets("Sheet2").Range("A" & 行2 + 1) = Range("A" & 行1) & "-2" 行2 = 行2 + 1 End If If Range("A" & 行1) = "" Then 行2 = 行2 - 1 Sheets("Sheet2").Range("C" & 行2) = Sheets("Sheet2").Range("C" & 行2) + Range("C" & 行1) End If 行2 = 行2 + 1 Next 行1 End Sub を編集したいのですが全然図りません ご指導お願いします 元データ AAAA5 9601  950 BBBB1 9660  150 ASAS9 9654  -50 AXCW5 9603  1375 以下の用にマクロで変換する用に出来たのですが 【1】 BBBB1だけではなくAAAA5も対処になったときの 追加方法です 元データは一切変更が出来ません ※フォントの変更も不可です 【2】 元データと変換後データがSheet1からSheet2になっていますが Sheet1の元は範囲はA1~C400で変換後をSheet1E1~G400にしたいのです AAAA5 9601  950  BBBB1-1 9660  150  BBBB1-2 9660  150 ASAS9 9654  50 AXCW5 9603  1375

  • エクセルVBA

    こんばんは。 いつも拝見しています。初歩的でしょうが私ではまだ 解決できません。ご指導いただきたく思います。 ユーザーフォームにテキストボックスとスピンボタンを設置し日付を 変更するようにしています。ユーザーフォームを開くと今日の日付に 変わってしまいます。C2とリンクしテキストボックスに先に値を 取得するにはどうしたらよいでしょうか。お願します。 Private Sub spnDate_SpinDown() Dim dtDate As Date dtDate = UserForm1.txtDate.Value UserForm1.txtDate.Value = Format(DateAdd("m", -1, dtDate), "yyyy/mm") End Sub Private Sub spnDate_SpinUp() Dim dtDate As Date dtDate = UserForm1.txtDate.Value UserForm1.txtDate.Value = Format(DateAdd("m", 1, dtDate), "yyyy/mm") End Sub Private Sub txtDate_Change() Range("c2") = txtDate.Value End Sub

  • 例題を繰り返しマクロで記述したい

    ネットや本でマクロを作成しているいて、あまりマクロの意味も分からず作成しています。 下記のマクロの記述を繰り返しマクロで記述したいので、御指導願います。(H列で終わっていますが、できれば隣のセルが空白になるまで繰り返すようにしたい。) あと、自分の欲しい内容に修正出来るように、記述の意味などもコメントして頂けたら嬉しいのですが・・・。よろしくお願いします。 Sub 最終履歴を表示する(2)() Range("C4").NumberFormatLocal = "G/標準" Range("C4").Value = Application.WorksheetFunction.Max(Range("C6:C10000")) Range("C4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole Range("C4").NumberFormatLocal = "yyyy/m/d;@" Range("D4").NumberFormatLocal = "G/標準" Range("D4").Value = Application.WorksheetFunction.Max(Range("D6:D10000")) Range("D4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole Range("D4").NumberFormatLocal = "yyyy/m/d;@" Range("E4").NumberFormatLocal = "G/標準" Range("E4").Value = Application.WorksheetFunction.Max(Range("E6:E10000")) Range("E4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole Range("E4").NumberFormatLocal = "yyyy/m/d;@" Range("F4").NumberFormatLocal = "G/標準" Range("F4").Value = Application.WorksheetFunction.Max(Range("F6:F10000")) Range("F4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole Range("F4").NumberFormatLocal = "yyyy/m/d;@" Range("G4").NumberFormatLocal = "G/標準" Range("G4").Value = Application.WorksheetFunction.Max(Range("G6:G10000")) Range("G4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole Range("G4").NumberFormatLocal = "yyyy/m/d;@" Range("H4").NumberFormatLocal = "G/標準" Range("H4").Value = Application.WorksheetFunction.Max(Range("H6:H10000")) Range("H4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole Range("H4").NumberFormatLocal = "yyyy/m/d;@" End Sub

  • Excelのマクロについて

    マクロの書き方について質問です。 今回、やりたいことは以下のとおりです。1つのボタンを押して動くようにしたいのです。添付画像を参照して下さい。 ・各シートごとにファイル名を指定しPDFで保存したい。 「住所録」の発送日、法人名、氏名を反映(例:20130301株式会社HOGEHOGE阿賀川)。 ・各シートを印刷する。 現在は添付画像の様にエクセルで納品書などを作成しています。 左上の「納品書」「請求書」「領収書」のボタンを押すと、「住所録」の発送日、法人名、氏名が反映されて各シートが印刷されるようになっています。 右上の「反映」は変更を反映させるためだけなので無視して下さい。 ちなみに今の印刷するコードはネット上で拾ったもので、マクロについては書き方がよくわかりません。 Sub 請求書() For Each myCC In Selection Sheets("請求書").Range("I1").Value = Range("B" & myCC.Row).Value Sheets("請求書").Range("A3").Value = Range("C" & myCC.Row).Value Sheets("請求書").Range("A2").Value = Range("A" & myCC.Row).Value Sheets("請求書").Range("A4").Value = Range("D" & myCC.Row).Value Sheets("請求書").PrintOut Next End Sub よろしくお願い致します。

  • マクロについて

    WINDOWS XP EXCELL 2003です。 C2のセルに入力すれば A2のセルに今日の日付が入力されるのみのマクロが下記です Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$2" Then Target.Offset(0, -2).Value = Date End If End Sub 御指導を仰ぎたいのは C3 に入力されたら A3 今日の日付 C4 に入力されたら A4 今日の日付 C5 に入力されたら A5 今日の日付 という具合になにかを追加すればと良いと考え調べましたが分かりませんでした。 御指導いたたければ幸いです。 よろしく御願いします。

  • VBA publicで日付が呼び出せない

    VBAにて、ユーザーフォーム上のテキストボックスに初期値として今日の日付が入力されており、さらにそれを任意で変更することも出来、最終的なテキストボックスの値を変数に格納するというマクロを作成しようとしています。 'テキストボックス2の初期値を今日の日付とする Private Sub UserForm_Initialize() TextBox2.Text = Format$(Date, "yyyy/mm/dd") 'テキストボックス2の値が日付かどうかチェック Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If IsDate(TextBox2.Value) Then DenpyouDate = TextBox2.Value Else TextBox2.Value = "" MsgBox ("日付が不正です") TextBox2.Text = Format$(Date, "yyyy/mm/dd") End If End Sub '他のモジュールでdenpyoudateを使用し、指定のセルに和暦形式で入力する Public DenpyouDate As Date Sheets("伝票").Range("A10").Value = Format(DenpyouDate, "e") Sheets("伝票").Range("C10").Value = Format(DenpyouDate, "m") 「ユーザーフォームのテキストボックスに初期値として日付を表示させ、その最終的な値を変数として格納、別のモジュールで呼び出してセルにセットする」というイメージです。 このマクロを実行した際、初期値である今日の日付を任意の日付に変更した場合は、問題なくそのままの値がセルにセットされるのですが、初期値のまま実行すると、その数値が反映されません。 ローカルウィンドウをチェックすると、ユーザーフォームの時点では、テキストボックスの初期値がきちんとdenpyoudateに格納されているのですが(例:2009/11/24)、それを別モジュールで呼び出した時は、denpyoudateの値が(#0:00:00#)になっており、これが原因だと考えています。 このエラーを回避し、初期値の場合でも値がきちんとセルにセットされるようにするには、どうしたらよいでしょうか?

  • Excle 表紙作成マクロ

    今、添付しているような表紙を作成しているのですが、下のマクロで印刷からPDF化をしています。 ただ、毎回名前をつけなければいけないので、大変時間がかかります。 どなたか、楽な方法があるなら教えてください。 Sub Test() Dim c As Range Dim Ws As Worksheet Set Ws = Sheets("記録写真(表紙)") For Each c In Sheets("名前").Range("B1:B6") Ws.Range("A10").Value = c.Value '念のため DoEvents Ws.PrintOut Next End Sub

専門家に質問してみよう