|
▼マナ さん:
>▼VBA初心者 さん:
>
>>原因として考えられるのは、検索した結果(rngFound)がdと一つも当てはまらなかった場合の処理が入っていないということかなと思うのですが、その場合どうすればいいでしょうか?
>>
>>自分としてはIf Not rngFound Is Nothing Thenを使えばいいと思い、何度か組んでみたのですがすべてエラーになってしまうので、教えていただきたいです。
>
>最初の検索の直後に挿入するのでは?
>どのように試したのか提示してください。
マナ様
いつもお世話になっております。
Worksheet("Sheet1")に日付とスケジュール
Worksheet(1月〜12月)にカレンダーを表示させてあります。
Sub カレンダー入力新規()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lastRow As Long
Dim rngCalendar As Range
Dim rngFound As Range
Dim rngFirstcell As Range
Dim d As Long
Dim s As String
Dim k As Long
Dim i As Long
Dim j As Long
For j = 1 To 12
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets(j & " " & "月")
lastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
Set rngCalendar = ws2.Range("A1:H14")
For k = 1 To lastRow
d = ws1.Cells(k, 1).Value '日付け
s = ws1.Cells(k, 2).Value 'スケジュール
i = CLng(d) '日付をシリアル値に変更
Set rngFound = rngCalendar.Find(i, After:=rngCalendar(1), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
MatchCase:=False, MatchByte:=False, SearchFormat:=False)
If d = rngFound.Value Then
Call setSchedule(rngFound.Offset(1, 0), s)
Else
Set rngFound = rngCalendar.FindNext(rngFound)
If Not rngFound Is Nothing Then
If d = rngFound.Value Then
Call setSchedule(rngFound.Offset(1, 0), s)
End If
End If
End If
Next k
Next j
End Sub
Function setSchedule(r As Range, s As String)
If r.Value = "" Then
r.Value = s
Else
r.Value = r.Value & vbLf & s
End If
End Function
|
|