プロが教える店舗&オフィスのセキュリティ対策術

年月日の入力により曜日名を取得し、その曜日に関した複数のエクセルシート(例えば複数のシート名が月曜日、monday、mon等)を選択し、それぞれのシートを横断的に参照し比較処理等するマクロは、どのような構文を使用して作成すれば良いでしょうか。例文でのご教示、宜しくお願い致します。
 Excel Sheet名には、まずマクロ結果を表示するmainがあり、この後に
 月曜日、火曜日、水曜日、木曜日、monday、Tuesday,Wednesday、Thursday、Mon,Tue、Wed 、Thu があります。

質問者からの補足コメント

  • どう思う?

    ご回答、有難うございます。ご提示内容は分かりましたが、曜日取得後は、以下のようにその特定の曜日に関連した複数のシート4つをSelectし、以下のSelect Case 構文は可能ですか?
    Select Case w1
    Case 1
    Worksheet(Array("main","日曜日","Sunday",”Sun”)).Select
    Case 2
    Worksheet(Array("main","月曜・・・
     '以下同様
    Case Else
    MsgBox”休みです"
    End Select
    可能ですと、この4つのシートは開いた状態?なので、横断的にセルを比較する場合、worksheets("月曜日")!Range(A1)のようなセルの指定でいいですか? また、シート名を例えば曜日取得文字だけではなく、Mon Amとした場合はご回答された例ではどう記述すれば良いのでしょうか。

      補足日時:2021/09/14 15:01

A 回答 (2件)

mainのシートと各曜日のシートはあきらかにレイアウトが違うので、


arrayの中に組み込まないほうが良いです。
Mon Amとは、月曜日の例でしょうか。日曜日ならSun Amと解釈します。

日曜日のシートのA1の値を、mainのシートに転記する例です。
2021/9/12を入力すると、日曜日のシートが対象になります。
2021/9/13を入力すると、月曜日のシートが対象になります。

Sub Sample()
Dim wday As String
Dim date1 As Date
Dim wno As String
Dim arr As Variant
Dim i As Long
Dim wk As Variant
wday = InputBox("日付を入力してください(yyyy/mm/dd)")
date1 = CDate(wday)
wno = Weekday(date1) '曜日の番号を取得
Select Case wno
Case 1
arr = Array("日曜日", "Sunday", "Sun", "Sun Am")
Case 2
arr = Array("月曜日", "Monday", "Mon", "Mon Am")
'以下同様
Case 3
Case 4
Case 5
Case 6
Case 7

End Select
i = 1
For Each wk In arr
Worksheets("main").Cells(i, "A").Value = Worksheets(wk).Range("A1").Value
i = i + 1
Next
End Sub
    • good
    • 0
この回答へのお礼

お世話になっております。
No1のご回答同様、簡潔で当方からの構文での例の提示が
分かりやすかったです。
有難うございました。

お礼日時:2021/09/16 17:02

以下はinputboxから日付を入力し、その曜日を求め、曜日に対応したシートのA1の内容をメッセージボックスに表示するサンプルです。


inputboxで2021/9/12と入力すると、日曜日、Sunday,SunのシートのA1の内容が表示されます。
-------------------------------------
Sub Sample()
Dim wday As String
Dim date1 As Date
Dim w1 As String
Dim w2 As String
Dim w3 As String
wday = InputBox("日付を入力してください(yyyy/mm/dd)")
date1 = CDate(wday)
w1 = Format(date1, "aaaa") '例 日曜日
w2 = Format(date1, "dddd") '例 Sunday
w3 = Format(date1, "ddd") '例 Sun
MsgBox (Worksheets(w1).Range("A1").Value)
MsgBox (Worksheets(w2).Range("A1").Value)
MsgBox (Worksheets(w3).Range("A1").Value)
End Sub
    • good
    • 0
この回答へのお礼

お世話になっております。
解決しました。
簡潔な例を提示してくださり、分かりやすかったです。
有難うございました。

お礼日時:2021/09/16 16:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!