[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.