[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Sheet1とSheet2のセルを照合する』(万年マクロ)
Sheet1に作成済みの「横書きのカレンダー」があります。Sheet2には知人の誕生日とその右隣のセルには「氏名」も記述している。Sheet1とSheet2とを照合し、期日が“合った”セルが有ったとき、Sheet2の誕生日の期日の右隣のセルの「氏名」を、Sheet1のカレンダーの期日の“下”に記述したいのでずが、マクロの基礎の無い小生には上手く「動きません」。どうかご教授願います。
Sub カレンダ横()
Dim 元年月 As String Dim 年 As Integer Dim 月 As Integer Dim j As Long Dim カレンダ(1 To 12, 1 To 7) Dim cn As Integer Dim 曜日表示(1 To 1, 1 To 7) Dim cl As Range Dim k As Integer Dim 曜日 Dim myr As Range Set myr = Worksheets("sheet2").Range("A2:A7")
元年月 = Application.InputBox("2021/6の型で年月を記入", Type:=2)
If 元年月 = "False" Or Not IsDate(元年月) Then MsgBox "終了しました" Exit Sub End If
年 = Year(元年月) 月 = Month(元年月) 曜日 = Array("日", "月", "火", "水", "木", "金", "土") For k = 0 To 6 曜日表示(1, k + 1) = 曜日(k) Next
cn = 1 For j = DateSerial(年, 月, 1) To DateSerial(年, 月 + 1, 0) If Day(j) <> 1 And Weekday(j) = 1 Then cn = cn + 2 カレンダ(cn, Weekday(j)) = Format(j, "yyyy/m/d") Next
Application.ScreenUpdating = False Range("A:H").Clear Range("A1") = DateSerial(年, 月, 1) Range("B2").Resize(1, 7) = 曜日表示 Range("B3").Resize(12, 7) = カレンダ
Range("A1").NumberFormatLocal = "yyy""年""m""月""" Range("B2").Resize(13, 7).HorizontalAlignment = xlCenter Range("B3").Resize(12, 7).NumberFormatLocal = "d"
Range("B2").Resize(13, 1).Font.Color = RGB(255, 0, 0) Range("H2").Resize(13, 1).Font.Color = RGB(0, 0, 255)
For Each cl In Range("B3").Resize(12, 7) If Application.CountIf(myr, cl) > 0 Then cl.Offset(1).Value = myr.Offset(, 1).Value
End If Next
Application.ScreenUpdating = True
End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
こんばんは ^^ 日付は難しいですね、エクセル様が気をきかして2021/06/02とかに変換 するらしくて。。。^^; 方法は様々有るとは思いますが レンジオブジェクトのValue2等をつかい、myrの日付分を整数に変換後 配列にでも格納して、整数どうしで比較し、myrの行を取得して カレンダに格納すれば、出来ましたですよ。 (隠居じーさん) 2021/07/03(土) 18:43
追伸 ^^; 気が付いた点だけ。。。 シートは指定した方が良いと思いますよ。 うっかり、記入する表のシートがアクテイブになってたりすると カレンダーが上書きされ、消えてしまいますよ (隠居じーさん) 2021/07/03(土) 18:48
おはよ〜ございます。。。^^ 下記のよ〜な事でも。 バリアント型変数、x を追加定義、 エラー処理を付け加え、行を求めて、指定すればOKかと シートは指定する様に変更してくださいね^^;。。。テスト中何度も消えてw( ̄▽ ̄) m(_ _)m Dim x As Variant For Each cl In Range("B3").Resize(12, 7)
'If Application.CountIf(myr, cl) > 0 Then 'cl.Offset(1).Value = myr.Offset(, 1).Value 'End If x = Application.Match(cl, myr, 0) If Not IsError(x) Then cl.Offset(1).Value = myr(x, 1).Offset(, 1).Value End If Next (隠居じーさん) 2021/07/04(日) 08:09
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.