• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:毎月とか隔週に連動して日付を変えたい)

エクセルVBAで日付を変更する方法を教えてください

このQ&Aのポイント
  • 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文の中に追加する必要があります。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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日ルールなら、もちろんこういう問題は起こりません。

ryujixryuj
質問者

お礼

ありがとうございます。親身な回答とても参考になりました おっしゃるように、この方法では破綻するかもしれませんが、他に方法がみあたらず、エクセルの前で困ってしまっている状態です。

関連するQ&A