- ベストアンサー
エクセルVBAで日付を変更する方法を教えてください
- ExcelのVBAコードを使用して、指定の条件に基づいて日付を変更する方法を教えてください。質問文には、M列に入力された数値に応じてA列の日付を変更するルールが記載されています。また、質問1では、毎月、隔月、隔週の場合に日付を変更するためのコードの追加方法についても質問しています。
- VBAコードを使用して日付を変更するためには、Excelのワークシートの中にコードを追加する必要があります。質問文に記載されているコードは、M列の値が0以上の場合に、B列の値に応じてA列の日付を変更するものです。具体的な日付の変更ルールは、B列が「毎日」の場合は+1日後、B列が「毎週」の場合は+7日後です。
- 質問1では、毎月、隔月、隔週の場合に日付を変更するためのコードの追加方法について質問しています。質問文に記載されているコードでは、B列の値が「毎月」の場合には+30日後、B列の値が「隔月」の場合には+60日後、B列の値が「隔週」の場合には+14日後に日付を変更するようになっています。コードの追加場所は、For EachループのElseIf文の中に追加する必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ごく一般的には「毎月」とは「翌月同日」の意味で+30日ではありませんが、あなたのそのお仕事では+30日、+60日、+120日刻みのことなのですか?そういう職種もあります。 これは一般にどうこうじゃなく、個別のお仕事での決め事の問題ですから、あなたがご自分の仕事においてご自分で決めないと誰に聞いても答えは出てきません。 作成例: private sub Worksheet_Change(byval Target as excel.range) dim h as range on error resume next for each h in application.intersect(target, range("M:M")) if h > 0 then select case cells(h.row, "B") case "毎日" cells(h.row, "A") = cells(h.row, "A") + 1 case "毎週" cells(h.row, "A") = cells(h.row, "A") + 7 case "隔週" cells(h.row, "A") = cells(h.row, "A") + 14 case "毎月" cells(h.row, "A") = dateadd("M", 1, cells(h.row, "A")) case "隔月" cells(h.row, "A") = dateadd("M", 2, cells(h.row, "A")) end select end if next end sub #余談ですが それでもし「翌月同日」なら、アナタの今やろうとしてるアプローチで破たんしている問題としては、たとえば1/31を開始で毎月を加算していった場合、翌月や翌々月は一体どういう日付の推移になっていくのかといったケースがあります。前回のご質問でほかの方からアドバイスが寄せられていましたが、起算日の記録を抹消して日付を都度書き換えようとしているので、こういう破たんが起こります。 +30日ルールなら、もちろんこういう問題は起こりません。
お礼
ありがとうございます。親身な回答とても参考になりました おっしゃるように、この方法では破綻するかもしれませんが、他に方法がみあたらず、エクセルの前で困ってしまっている状態です。