1164509374 エクセルのVBAでお願いします。添付画像のように現在日とその曜日が表示されているとき、上矢印マークをクリックするとその前日(11月25日(土))が、下矢印をクリックすると11月27日(月)が表示されるようにしたのですが、いかがでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2006/11/26 11:49:36
  • 終了:2006/11/26 13:44:53

ベストアンサー

id:bonlife No.2

回答回数421ベストアンサー獲得回数752006/11/26 12:50:35

ポイント50pt

標準モジュールに以下のコード部分を追記してください。

その後、上矢印ボタン上で右クリックし、[マクロの登録]を選び、setPreviousDayを選択してください。

同様に下矢印ボタン上で右クリックし、[マクロの登録]を選び、setNextDayを選択してください。

(対象とするセルはtargetCellという変数で指定するようにしており、下記のサンプルでは"A1"にしております。)

  • 日付を表示形式のユーザ定義で m"月"d"日"(aaa) と指定して表示している場合
Option Explicit
Sub setNextDay()
    Dim targetCell As String
    targetCell = "A1"
    Range(targetCell).Value = Range(targetCell).Value + 1
End Sub
Sub setPreviousDay()
    Dim targetCell As String
    targetCell = "A1"
    Range(targetCell).Value = Range(targetCell).Value - 1
End Sub
  • 文字列として"11月26日(日)"がセルにセットされている場合
Option Explicit
Sub setNextDay()
    Dim dateStr As String, targetCell As String
    Dim dateSerialNextDay As Long
    targetCell = "A1"
    dateStr = Range(targetCell).Value
    dateSerialNextDay = DateValue(Left(dateStr, InStr(1, dateStr, "(") - 1)) + 1
    Range(targetCell).Value = Format(dateSerialNextDay, "M月D日(aaa)")
End Sub
Sub setPreviousDay()
    Dim dateStr As String, targetCell As String
    Dim dateSerialPreviousDay As Long
    targetCell = "A1"
    dateStr = Range(targetCell).Value
    dateSerialPreviousDay = DateValue(Left(dateStr, InStr(1, dateStr, "(") - 1)) - 1
    Range(targetCell).Value = Format(dateSerialPreviousDay, "M月D日(aaa)")
End Sub

日付を文字列として扱うメリットはありませんので、2番目のやり方はオススメできませんが、参考情報として載せました。

また、2番目のやり方の場合、年の部分は実行した年となるので、年末年始に実行した場合に問題が出てくる可能性がありますので、ご注意ください。

参考になれば幸いです。

id:anglar

2つもありがとうございました。結局、都合があって、何と、2番目を採用させていただきました。感謝です。

2006/11/26 13:42:38

その他の回答(1件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012006/11/26 12:19:16

ポイント40pt

(1)1日加算マクロ

Sub Macro1()

Range("A1").Value = Range("A1").Value + 1

End Sub

(2)1日減算マクロ

Sub Macro2()

Range("A1").Value = Range("A1").Value - 1

End Sub


以上2つのマクロを登録しておいて、上向き矢印と下向き矢印に割り当ててください。

上記ではセルA1に日付が入っている事が前提となっていますので、適宜修正してください。

id:anglar

素早い対応、ありがとうございました。シンプルVBAで分かりやすかったです。

2006/11/26 13:38:55
id:bonlife No.2

回答回数421ベストアンサー獲得回数752006/11/26 12:50:35ここでベストアンサー

ポイント50pt

標準モジュールに以下のコード部分を追記してください。

その後、上矢印ボタン上で右クリックし、[マクロの登録]を選び、setPreviousDayを選択してください。

同様に下矢印ボタン上で右クリックし、[マクロの登録]を選び、setNextDayを選択してください。

(対象とするセルはtargetCellという変数で指定するようにしており、下記のサンプルでは"A1"にしております。)

  • 日付を表示形式のユーザ定義で m"月"d"日"(aaa) と指定して表示している場合
Option Explicit
Sub setNextDay()
    Dim targetCell As String
    targetCell = "A1"
    Range(targetCell).Value = Range(targetCell).Value + 1
End Sub
Sub setPreviousDay()
    Dim targetCell As String
    targetCell = "A1"
    Range(targetCell).Value = Range(targetCell).Value - 1
End Sub
  • 文字列として"11月26日(日)"がセルにセットされている場合
Option Explicit
Sub setNextDay()
    Dim dateStr As String, targetCell As String
    Dim dateSerialNextDay As Long
    targetCell = "A1"
    dateStr = Range(targetCell).Value
    dateSerialNextDay = DateValue(Left(dateStr, InStr(1, dateStr, "(") - 1)) + 1
    Range(targetCell).Value = Format(dateSerialNextDay, "M月D日(aaa)")
End Sub
Sub setPreviousDay()
    Dim dateStr As String, targetCell As String
    Dim dateSerialPreviousDay As Long
    targetCell = "A1"
    dateStr = Range(targetCell).Value
    dateSerialPreviousDay = DateValue(Left(dateStr, InStr(1, dateStr, "(") - 1)) - 1
    Range(targetCell).Value = Format(dateSerialPreviousDay, "M月D日(aaa)")
End Sub

日付を文字列として扱うメリットはありませんので、2番目のやり方はオススメできませんが、参考情報として載せました。

また、2番目のやり方の場合、年の部分は実行した年となるので、年末年始に実行した場合に問題が出てくる可能性がありますので、ご注意ください。

参考になれば幸いです。

id:anglar

2つもありがとうございました。結局、都合があって、何と、2番目を採用させていただきました。感謝です。

2006/11/26 13:42:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません