『開始〜終了日付から矢印(オブジェクト)を記載することはできないか?』(ヒマワリの種)
おはようございます。
現在、建築工事の進捗スケジュールを作成しています。
今まで手で作成していたのを、調べならが自動でできないか苦慮しています。
以下、マクロで開始〜終了日を入力すると、矢印で予定を明示したく。
実行すると、
startCol = foundCell1.Column ' 検索該当セルの列番号 ←←←
で実行エラー91が出力。現在原因が分かっておりません。
原因および回避策をご教授いただけませんでしょうか。
カレンダー日付:U5〜KB5まで
曜日 :U6〜KB6まで
開始予定 :N7より縦100行ほど枠があり ※今後行が増える可能性あり
終了予定 :O7より縦100行ほど枠があり ※今後行が増える可能性あり
開始実績 :P7より縦100行ほど枠があり ※今後行が増える可能性あり
終了実績 :Q7より縦100行ほど枠があり ※今後行が増える可能性あり
上手く、WBSのイメージが伝えれていないかもしれませんが、
必要情報がありましたら、ご指摘ください。
どうか、よろしくお願い致します。
Sub 日付から矢印作成()
Dim rng1 As Range Dim dt As Range Dim rng2 As Range Dim r As Long Dim foundCell1 As Range Dim startCol As Long Dim foundCell2 As Range Dim endCol As Long Dim targetRng As Range
Set rng1 = ActiveSheet.Range(Range("U5"), Range("U5").End(xlToRight)) ' 日付入力範囲 Set dt = ActiveSheet.Range("Q2") ' 今日の日付入力セル
For Each rng2 In ActiveSheet.Range(Range("N7"), Range("N7").End(xlDown)) ' 開始日入力範囲 r = rng2.Row ' 開始日・終了日入力セルの行番号 Set foundCell1 = rng1.Find(rng2, , xlFormulas, xlPart) ' 開始日で検索した時の該当セル startCol = foundCell1.Column ' 検索該当セルの列番号 ←←← If rng2.Offset(0, 1) = "" Then ' 終了日が空欄の場合 Set foundCell2 = rng1.Find(dt, , xlFormulas, xlPart) ' 今日の日付で検索した時の該当セル endCol = foundCell2.Column '検索該当セルの列番号 Else ' 終了日が空欄ではない場合 Set foundCell2 = rng1.Find(rng2.Offset(0, 1), , xlFormulas, xlPart) ' 終了日で検索した時の該当セル endCol = foundCell2.Column '検索該当セルの列番号 End If ActiveSheet.Range(Cells(r, startCol), Cells(r, endCol)).Select Set targetRng = Selection ' 開始日から終了日までのセル範囲 With ActiveSheet.Shapes.AddLine(targetRng.Left, targetRng.Top + targetRng.Height / 2, _ targetRng.Left + targetRng.Width, targetRng.Top + targetRng.Height / 2).Line .ForeColor.RGB = RGB(255, 0, 0) ' 線の色 .Weight = 3 ' 線の太さ .EndArrowheadStyle = 2 ' 線の終点のスタイル End With Next rng2
End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
開始予定〜終了予定が 青→
開始実績〜終了実績が 赤→
のようなオブジェクトを描く方が、見やすいなどありましたら、
そちらでお願いしたく。
アドバイスよろしくお願い致します。
(ヒマワリの種) 2025/04/09(水) 10:09:10
foundCell1 = rng1.Find(rng2, , xlFormulas, xlPart) の部分で、
rng2(開始日)が rng1(日付範囲)内で見つからない場合、
foundCell1 が Nothing になり、次の行で foundCell1.Column を呼び出すとエラーが発生します。
同様に、foundCell2 も同じように Find メソッドで該当するセルが見つからない場合、
Nothing になり、その後の処理でエラーが発生します。
回避策 ------
Find メソッドの後に、該当するセルが見つかったかどうかをチェックし、
見つからなかった場合の処理を追加する必要があります。
もし該当するセルが見つからなかった場合に、
その処理をスキップしたり、エラーメッセージを表示するなどの対策を取ると良いです。
で修正後のコードとしては
Sub 日付から矢印作成()
Dim rng1 As Range Dim dt As Range Dim rng2 As Range Dim r As Long Dim foundCell1 As Range Dim startCol As Long Dim foundCell2 As Range Dim endCol As Long Dim targetRng As Range
Set rng1 = ActiveSheet.Range(Range("U5"), Range("U5").End(xlToRight)) ' 日付入力範囲 Set dt = ActiveSheet.Range("Q2") ' 今日の日付入力セル
For Each rng2 In ActiveSheet.Range(Range("N7"), Range("N7").End(xlDown)) ' 開始日入力範囲 r = rng2.Row ' 開始日・終了日入力セルの行番号
' 開始日で検索 Set foundCell1 = rng1.Find(rng2.Value, , xlFormulas, xlPart) If Not foundCell1 Is Nothing Then startCol = foundCell1.Column ' 検索該当セルの列番号 Else MsgBox "開始日 " & rng2.Value & " は日付範囲に見つかりませんでした。", vbExclamation Exit Sub End If
' 終了日が空欄の場合、今日の日付を検索 If rng2.Offset(0, 1).Value = "" Then Set foundCell2 = rng1.Find(dt.Value, , xlFormulas, xlPart) ' 今日の日付で検索 If Not foundCell2 Is Nothing Then endCol = foundCell2.Column ' 検索該当セルの列番号 Else MsgBox "今日の日付 " & dt.Value & " は日付範囲に見つかりませんでした。", vbExclamation Exit Sub End If Else ' 終了日が空欄ではない場合 Set foundCell2 = rng1.Find(rng2.Offset(0, 1).Value, , xlFormulas, xlPart) ' 終了日で検索 If Not foundCell2 Is Nothing Then endCol = foundCell2.Column ' 検索該当セルの列番号 Else MsgBox "終了日 " & rng2.Offset(0, 1).Value & " は日付範囲に見つかりませんでした。", vbExclamation Exit Sub End If End If
' 開始日から終了日までのセル範囲を選択 ActiveSheet.Range(Cells(r, startCol), Cells(r, endCol)).Select Set targetRng = Selection ' 開始日から終了日までのセル範囲
' 矢印を追加 With ActiveSheet.Shapes.AddLine(targetRng.Left, targetRng.Top + targetRng.Height / 2, _ targetRng.Left + targetRng.Width, targetRng.Top + targetRng.Height / 2).Line .ForeColor.RGB = RGB(255, 0, 0) ' 線の色 .Weight = 3 ' 線の太さ .EndArrowheadStyle = 2 ' 線の終点のスタイル End With Next rng2 End Sub
(暇な人) 2025/04/09(水) 10:22:02
このあたりが参考になるかと思います。 http://officetanaka.net/excel/vba/tips/tips131b.htm 数式ではなく、値を検索するとよいかも知れません。 (xyz) 2025/04/09(水) 10:24:12
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.