• 締切済み

【VBA】土日をスキップして日付計算

今A列に土日を除いた日付があり、マクロを実行すると、日付が一日加算される下記のようなVBAを書いてます。 Sub DateCulc() i = 3 Do dodate = (DateAdd("d", 1, Cells(i, 1))) Cells(i, 1) = dodate i = i + 1 Loop While Cells(i, 1).Value <> "" End Sub 一日加算した場合、土日をスキップ、つまり金曜の日付は月曜になるようにしたいのですが、思いつきません。WeekDayを使うのだと思うのですが。 ご教授頂けますか。宜しくお願いします。

みんなの回答

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

一例まで。 Sub DateCulc_2() i = 1 Do a = Format(Cells(i, 1), "aaa") b = 1 If a = "金" Then b = 3 dodate = (DateAdd("d", b, Cells(i, 1))) Cells(i, 1) = dodate i = i + 1 Loop While Cells(i, 1).Value <> "" End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

足してから考えるか前に考えるかだが、前者なら金曜なら+3 後者なら土曜日ならさらに+2すれば月曜になるよ。 曜日はWeekday関数を使えば良い。 >思いつきません なぜ? >一日加算した場合 これに拘るから、難しいと思うのでしょう。 コードは簡単だから自分で作ること。 ーー 祝日が心配だが。

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

関連するQ&A

  • VBA 九九 Do While

    VBAのDo Whileステートメントを使って九九の表をつくりたいのですが、何度やっても途中で詰まり、実行に至りません。 For NextとDo untilではできたと思うのですがDo Whileがどうしてもわからなくて… どなたか助けてください。お願いします。 Sub 九九計算_for() Dim i, j As Integer For i = 1 To 9 For j = 1 To 9 Cells(i, j).Value = i * j Next Next End Sub Sub 九九計算_do_until() j = 1 Do i = 1 Do Cells(j, i).Value = i * j i = i + 1 Loop Until i = 10 j = j + 1 Loop Until j = 10 End Sub

  • 簡単なエクセルVBA

    最近エクセルのVBAを勉強し始めたのですが、 1×1=1 1×2=2 1×3=3  ・  ・ 9×9=81 と出るようにしたいのですが、 Sub kuku() Do While i < 9 i = i + 1   Do While j < 9   j = j + 1   a = i * j   Debug.Print i; "×"; j; "="; a   Loop Loop End Sub としたところ1×9=9までしかでません。 どうすれば上手くループするようになるでしょうか? お願いします。

  • VBAで空欄にデータに表示

    エクセルVBAのIFを使って、シートaのA列に値があって、B列が空欄の場合のみ、空欄のセルにシートbの値を表示させたいです。 上手くできませんでしたので、教えてください。 Sub Do文2() Dim i As Integer i = 1 If Worksheets("a").Cells(i, 2) = "" Then Do While Worksheets("a").Cells(i, 1) <> "" Worksheets("a").Cells(i, 2) = Worksheets("b").Cells(1, 1) i = i + 1 Loop End If End Sub

  • VBAで行を挿入する

    VBAを始めた初心者です。 Exel2002使用です。 VBAでA列の4行目から10行目に行の挿入をできるようにしようと下記のように書きましたが、Rows("i:i").Selectの部分でデバックがかかってしまいます。間違っている理由がわからないのですがよろしくお願いします。 また、DO While Loopステートメントを使ってA列が空白になるまで(例えばA4セル以下の)行を挿入とする場合の方法も教えていただけましたら幸いです。 Sub 4行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i End Sub Sub 4行目から空白になるまで() Dim i As Integer Range("A4").serect Do While activecell.value = "" Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown activecell.offset(1,0).select Loop End Sub

  • Excel・VBAで・・。

            A    |     B    |     C 1   あああ<>いい<>  |         | 2   あああ<>うう<>  |         | 3   えええ<>おお<>  |         |     A     |    B  |   C    |   D  | 1 あああ<>いい<> | あああ  | いい<>   | いい   | 2 あああ<>うう<> | あああ  | うう<>   | うう   | 3 えええ<>おお<> | えええ  | おお<>   | おお   | というようになるようにしたいのです。 そこで、こんな感じのコードをかきました。 i = 1 i2 = 1 Do While Cells(i, i2).Value <> "" Do While Cells(i, i2).Value <> "" Namae = Cells(i, i2).Value Point = InStr(1, Namae, "<>") Cells(i, i2 + 1).Value = Left(Namae, Point - 1) Cells(i, i2 + 2).Value = Mid(Namae, Point + 2) i = i + 1 Loop i2 = i2 + 2 Loop でもD列までいかないで、C列で止まってしまうんです。 1つ目のDo whileが原因かな?と思ってるんですが、どう直したらいいかわかりません。 よろしくお願いします。

  • Do~Loopステートメント

    Do~Loopステートメントで使わな方が良いステートメントとは? Do~Loopステートメントで「古いから使わない方がよい」、と言われたことがあるのですが どれの事だか忘れてしまいました。 Sub test() セルのA1~A10に1~10を入力する i = 1 Do While i < 11 Worksheets("Sheet1").Cells(i, 1).Value = i i = i + 1 Loop End Sub これは一般的だから使ってもよいと思います。 Sub test() セルのA1~A10に1~10を入力する i = 1 Do Until i = 11 Worksheets("Sheet1").Cells(i, 1).Value = i i = i + 1 Loop End Sub これもよく見かけます。 Do While,Do Until以外にもloopステートメントってありますか? あと使わない方が良いステートメント、私の勘違いでなければ教えてください。

  • ACCESS VBAが分からない!この問題ですが

    ACCESS VBAの勉強をはじめました。 下のプロシージャを実行するとメッセージボックスに「2018/08/30」と出るようですが、なんでそうなるのかが分からないんです。 ちなみに Loop は繰り返しでWhileは~間という意味は分かるのですが。。。 よろしくお願いいたします。 Sub Lesson() Dim ret As Date, i As Long ret = #8/29/2018# Do ret = ret + 1 i = i + 1 Loop While i > 3 MsgBox ret End Sub

  • Excel VBA セルの指定の方法

    VBAの初心者です。処理1 のサブルーチンを使わずに直接記述すれば、エラーはでませんが、以下のように記述すればエラーが出てしまいます。宜しくお願いします。 Sub Macro10() i = 1 Do Until Cells(i, 1) = "" 処理1 i = i + 1 Loop End Sub Sub 処理1() Cells(i, 2).Select  ← ここでエラーになります。        ActiveCell.FormulaR1C1 = "◎" End Sub

  • VBA 合計金額の計算

    OSは、XPpro Excelは2003を使用しています。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1444918209 を参考にさせて頂いて、 Dim gk As Variant Dim i As Long i = 2 Do While Cells(i, 1).Value <> "" gk = gk + Cells(i, 2).Value If Cells(i, 2).Value = "" Then Cells(i, 2).Value = gk gk = 0 End If i = i + 1 Loop i = 2 Do While Cells(i, 1).Value <> "" gk = gk + Cells(i, 3).Value If Cells(i, 3).Value = "" Then Cells(i, 3).Value = gk gk = 0 End If i = i + 1 Loop として、図の水色のセルの合計までは出来たのですが、 合計行だけDセルにBセルとCセルの合計を入たいのですが、 どの様にすれば良いか どなたか教えて頂けないでしょうか? 説明不足なところがありましたら、追記致します。 どうかよろしくお願い致します。

  • VBA アクティブセルに1行目の日付を入力したい

    こんにちは、VBA初心者です。 アドバイスお願いします。 1行目に日付が入力してあります。 任意のセルを選択し、マクロを実行すると1行目の日付(日のみ)がそのセルに入力されるマクロを作っています。 例えば、    A       B      C 1 2008/11/1  2008/11/2  2008/11/3 2 3 4          2  5 セルB4を選択して実行するとB4に2が入力され、セルC3を選択して実行するとC3に3と入力するようにしたいです。 私なりに考えたのが下記のコードです。 Sub アクティブセルに1行目の日付を入力() Dim hidukesyutoku As Byte Dim dd As Date dd = Date Do While ActiveCell.Value <> dd ActiveCell.Offset(-1).Activate hidukesyutoku = hidukesyutoku + 1 Loop ActiveCell.Copy Destination:=ActiveCell.Cells(hidukesyutoku + 1, 1) End Sub Do Whileを使って日付があるまでアクティブセルをオフセットしていくというものですが、このコードのままでは、dd=dateとなっているため今日の日付にしか反応しません。 今日だけではなく、日付というだけで反応するようにするにはどうしたらいいでしょうか? また、このコードは、処理にも時間がかかりあまりいいものではないと思います。(初心者の私では、これが限界でした。) もっと早いコードの作り方があれば教えて下さい。