• ベストアンサー

エクセルマクロで日付から曜日を取得する方法

エクセルマクロで日付から曜日を取得する方法ですが、 例えば、2008/8/19 の様な書式ですと、 Dim a As Date a = Date Range("$A$1") = a Range("$A$2") = Weekday(a) Range("$A$3") = WeekdayName(Weekday(a)) このように記述すると簡単に取得できたのですが、 08.19.2008の様な書式ですと、 エラーが出て変換ができません。 何か良い方法はありませんでしょうか? 当方、完全に初心者です。 よろしければ、素人でもわかりやすいように 御教示いただけましたら幸いです。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

『.』を『/』に変換してやれば 日付として認識できるでしょう ただし 年月日をすべて2桁で入力した場合年月日の要素を誤認する場合があるので気をつけましょう たとえば 2008/8/9を 08.09.2008と入力した場合は正しいのですが 08.09.08と入力してしまうと2008/9/8と認識してしまいます これは コントロールパネルの設定の国の設定に依存するためです Sub Macro1   dim ss as string, oDat as date   ss = Range( "A1" ).Value   ss = Replace( ss, ".", "/" )   oDat = DateValue( ss )   Range( "A2" ).Value = Weekday( oDat )   Range( "A3" ).Value = WeekdayName( WeekDay( oDat ) ) End Sub

qchan2007
質問者

お礼

御回答、ありがとう御座います。 この方法でうまく変換することが出来ました!! #1の方の方法かどちらかでやらせていただきたいと思います。 少し不思議に思ったのは、08/19/2008でも、2008/08/19でも 同じシリアル値になるのですね。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

#4です。データが確実に08.19.2008のような月、日、年の順なら またピリオドで区切られているなら A1セルにデータがあるとして Sub test01() d = Split(Cells(1, "A"), ".") dt = DateSerial(d(2), d(0), d(1)) MsgBox Weekday(dt) MsgBox WeekdayName(Weekday(dt)) End Sub というやり方もある。

qchan2007
質問者

お礼

御回答、ありがとう御座いました。 又、今後、参考にさせていただきたいと思います。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

これはVBAコードなど以前の問題でしょう。 エクセルは一般的に年、月、日の区切りをスラシュ、ハイフン。ピリオドで区切って入れられますが、(多分、国別日付設定のせいと思うが)年、月、日の順を任意に並べて入力した場合、エクセルで日付と 認識されない場合がある(これは仕様でどうしようもない)。 >書式の問題ではなく、入力データそのものの問題です。書式は、セルに正しく日付シリアル値に設定されて後の段階の問題です。 だから質問のように入力されると予想設定は危険や処理の難しさがあるということです。こういうのは出来るだけ避けるべきです。 入力者に絶対守られる保証はあるのでしょうか。 日付を受け付ける場合は、年、月、日を入力者に認識させて(従って受付テキストボックスなどを分けて、行うべきと最近思う。 内容的に入力者との齟齬がなければ VBの関数Datesirial関数やDatevalue、Day、Month、Year関数でなんとでもなると思う。

qchan2007
質問者

お礼

御回答、ありがとう御座います。 入力データはだれかが入力するのではなく、取得先のデータが このような書式になっているので、それを変換するしか方法が ありません。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。 #1 ご回答のとおりですが、08.19.2008 のピリオドをハイフン(-)に 置換しても、CDate でシリアル値に変換できそうですよ。 シリアル値に変換できれば、Format でも日本語の曜日は取り出せます。 Sub sample()   Dim d As Date   d = CDate(Replace$("08.19.2008", ".", "-"))   MsgBox Format$(d, "aaaa") End Sub

qchan2007
質問者

お礼

御回答、ありがとう御座います。 やってみましたが、この方法でもうまく変換することが出来ますね。 ただ、"08.19.2008"の部分を変数にすると実行時エラーが出てしまい ましたので、#1か#3の方の方法に落ち着きそうです。

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

セルに08.19.2008と打ち込んで、セルの書式設定>日付で書式を変更しても 何も変化が起きないと思います。 Excelがそのデータを日付と認識できないからでしょう。 認識できる方法で行なうか、認識させる方法をとるかですけど。 文字列”08.19.2008”から年・月・日をそれぞれ取り出して、 DateSerial 関数でシリアル値を取得してあげればいいのでは? Sub test() Dim a As Date Dim st As String st = "08.20.2008" a = DateSerial(Val(Mid(st, 7, 4)), Val(Mid(st, 1, 2)), Val(Mid(st, 4, 2))) MsgBox WeekdayName(Weekday(a)) End Sub

qchan2007
質問者

お礼

御回答、ありがとう御座います。 この方法でうまく変換することが出来ました!! #3の方の方法かどちらかでやらせていただきたいと思います。 ただ、7,4 1,2 4,2 の数字の意味は全くわかりませんでした。

関連するQ&A

  • 日付からの曜日取得

    VB6を使っています。 取得した年月の一日の曜日を取得したいのですが うまくできません。formatもなぜかエラー出るんです・・・ どなたか教えてください Dim dtCurrent As Date Dim y As Integer Dim m As Integer Dim j as string Dim nWeek As Integer j=DateTime.Date() y = Mid(j, 1, 4)'年 m = Mid(j, 6, 2)'月 dtCurrent = Format(y&m&01, yyyy / mm / dd) Week = Weekday(dtCurrent) - 1 '曜日取得

  • Access カレンダーの曜日表示

    先日、こちらで教えていただいた方法で下記のように記述し、曜日を取得し表示できたのですが、 「月曜日」と表示されてしまい、不都合が生じましたので「月」だけ表示したいのですがどのようにすれば宜しいでしょうか? どなたかアドバイスお願い致します。 WeekdayName(Weekday(CDate(2005 & "/" & [月数] & "/" & [日付1])))

  • テキストボックスの日付の変更時のみマクロ実行する

    Windows7とExcel2007でマクロ作成中の、初心者です。 (1)ブックAにマクロ書き込み、Bブックに処理データがあります。 (2)Bブックは毎月一回だけ、書式の変更マクロを実行します。 (3)そのため、苦肉の策として Range("E3")が0のときは、実行するが、1のときはマクロ実行しないように しています。 (4)以上の方法では、更新するときは、いちいちRange("E3")の値を手動で0に する必要があります。面倒です。 (5)そこでAブックのユーザーフォームに日付の入ったテキストボックスを取り付け ここの日付けが変更されたときだけ、マクロを実行するようにしたいのですが。 難しくて出来ません。教えていただきたいです。お願いします。 Sub 書式の変更操作() Application.ScreenUpdating = False Dim n As Long Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim mydate As Date mydate = Worksheets("集計").Range("D2").Value If Range("E3").Value = 0 Then myMsg = "この" & Format(Range("D2").Value, "m月") & "分 表の書式等を更新します。" myTitle = "書式変更の確認" myBtn = MsgBox(myMsg, vbOKOnly + vbExclamation, myTitle) 書式更新のマクロ実行 Range("E3").Formula = "1" ’ここで次回起動時マクロ実行しない MsgBox "書式を更新しました。" Else MsgBox "既に変更済みです。", vbOKOnly + vbExclamation Exit Sub End If Application.ScreenUpdating = True End Sub

  • Excel マクロ

    Private Sub Workbook_Open() Dim name As String name = "7月" '//ワークシート名----編集用(本日曜日カラー変更ロジック用----月初変更箇所) Dim week As String Dim Y As Integer Dim X As Integer '//処理(1)-(1) すべての曜日セルの背景を白にする Worksheets(name).Range("A13:M13").Interior.ColorIndex = 19 '白 '//処理(1)-(2) 今日の曜日を取得して色を変更する week = WeekdayName(Weekday(Now), False) '今日の曜日 Y = Worksheets(name).Cells.Find(week).Row X = Worksheets(name).Cells.Find(week).Column Worksheets(name).Cells(Y, X).Interior.ColorIndex = 45 'オレンジ系の色 '//処理(2) 本日日付を取得して色を変更する Dim D As Integer D = Day(TODAY()) '本日の日付 Y = Worksheets(name).Cells.Find(D, LookAt:=xlWhole).Row X = Worksheets(name).Cells.Find(D, LookAt:=xlWhole).Column Worksheets(name).Cells(Y, X).Interior.ColorIndex = 19 ' End Sub 途中なのですが、日付を取得して色を変える というロジックを作っていて 処理(2)からを新しく付け足した時にエラーが起こりました。 内容は「SubまたはFunctionが定義されていません」です。 どうやらD = Day(TODAY())らへんでエラーになっているようなのですが どなたか分かる方教えてください(´・ω・`)(´-ω-`))ぺこり

  • Excelマクロ 曜日自動入力方法

    マクロ初心者です。 こちらのサイトから日付の自動入力の方法がわかりました。 Sub Macro1() Dim f As String f = ActiveCell.NumberFormat ActiveCell = Now End Sub ↑の右セルに曜日を自動入力したいのですが・・・ 追加するコード?を教えてほしいです。 (選択したセルA1には"7/24"をセルB1"土" のマクロ)

  • マクロ 任意の日付のセルを選択する方法

    いつも回答して頂きありがとうございます。 インプットボックスを使用して、任意の日付の期間を選択する方法がさっぱり分かりません。御指導の程宜しくお願い致します。あと、この記述方法では、『If Not ?? Is Nothing Then』がいるのでしょうか? シートの詳細 ・B4から下方向に日付が連番で記載されている。 Sub 範囲の選択() Dim Date1 As Date Dim Date2 As Date Dim b1 As Variant Dim b2 As Variant Date1 = Application.InputBox("最初の日付を2012/11/1のように入力してください。") Date2 = Application.InputBox("最後の日付を2012/11/31のように入力してください。") With Worksheets("集計用") Set b1 = .Columns("B").Find("Date1", , xlValues, 1) Set b2 = .Columns("B").Find("Date2", , xlValues, 1) .Range(b1, b2).Select End With End Sub

  • エクセルのマクロについて

    エクセルでマクロを作成しました。 インプットボックスに日付を入力するのですが、インプットボックスのキャンセル時に、マクロを停止したいのですが、色々試しましたが、上手く出来ません。(IfやOn Erorrなど)どの様な方法があるでしょうか? 入力する日付は○/1と入力しています。 Dim a As Date a = InputBOx("日付を入力してください") この様なコードで開始しています。

  • エクセルVBAの日付の表示で教えてください

    A1セルに「2021年9月5日(日)です」と表示したいのですが、下記のマクロを実行すると「9月04日(木)です」と表示され、日付も曜日も違う結果が表示されてしまいます。 初心者で良く分からないため、マクロに詳しい方、教えていただけないでしょうか。 Sub test() Dim niti As Date niti = "2021/ 9 /5" Range("A1").Value = Month(niti) & "月" & Format(Day(niti), "dd") & "日" & Format(Day(niti), "(aaa)") & "です" End Sub

  • 式ビルダで曜日文字列取得

    日付型データから曜日を表す文字列を取得したいのですが、 式ビルダを利用して取得する方法はありませんか。 式ビルダの関数の中にWeekdayName関数がないので WeekdayName関数以外の方法で式ビルダから取得したいと考えています。 環境はMS-ACCESS2000、Win98です。 宜しくお願いします

  • Accessのクエリ / 曜日の表示について教えてください

    お世話になっております。 Accessのクエリについて教えてください。日付から曜日を表示させたいのですが、うまくいきません。 アクセスのクエリの作成の画面で、フィールドのところに Weekdayname(Weekday[日付(MM/DD/YYY形式で日付が入って言います)]と入力したのにエラーが出て更新できません。 どうしたらいいのでしょうか? どうぞよろしくお願いいたします。

専門家に質問してみよう