|
もう十分な回答がありますけど、NavigateArrowを使うこんな方法は
どうでしょうか。nさんの正規表現手法が常識的で推奨ですけれど。
Sub test()
Dim ws As Worksheet
Dim myRange As Range
Dim r As Range
Dim refercell As Range
Dim k As Long
Application.ScreenUpdating = False
Set ws = ActiveSheet
ws.Cells.Interior.ColorIndex = xlNone
ws.ClearArrows
Set myRange = Union(ws.Cells.SpecialCells(xlCellTypeFormulas, 23), _
ws.Cells.SpecialCells(xlCellTypeConstants, 23))
' ↑ 少し甘い。該当なしの場合エラーになるよ。
For Each r In myRange
r.ShowDependents
On Error Resume Next
k = 0
Do
k = k + 1
Set refercell = r.NavigateArrow(TowardPrecedent:=False, _
ArrowNumber:=1, LinkNumber:=k)
If Err.Number = 0 And refercell.Parent.Name <> "Sheet1" Then
r.Interior.Color = vbYellow
Exit Do
End If
Loop Until Err.Number <> 0 _
Or refercell.Address(external:=True) _
= r.Address(external:=True)
On Error GoTo 0
Next
ws.Activate
ws.ClearArrows
Application.ScreenUpdating = True
End Sub
これであれば、
・単純参照(例: =Sheet1!A1のような)ではない、
= B1 + Sheet1!A1 のような参照でもOKです。
・また、名前を介した参照でもOKかと思います。
(この例では、そうしたものは無い前提かもしれませんが)
|
|