エクセル小僧:セル範囲に設定された名前を返す [コンピューター]
与えられたセル範囲(Range)に設定された名前を
取得する関数を作ったのですが。。。
ネットから拾った情報だけでは、うまくいかず。。
苦労しました。
関数のコードは以下の通り。
余計なコードが残ってますが、ご愛嬌(?)
nm(1)は不要ですかね。
'【機能】セル範囲に設定された名前を返す
Function mFRngToNm1(rng As Range) As String
'【引数】
' rng : セル範囲
'【変数】
Dim nms As Names
Dim nm(1) As Name
Dim r As Integer
Dim str1 As String
'【実行コード】
Set nms = ActiveWorkbook.Names ' ワークブックの名前コレクション
For r = 1 To nms.Count
' 引数のセル範囲と同じセル範囲だったら、
If "=" & ActiveSheet.Name & "!" & rng.Address = nms(r) Then
' 名前を返す
mFRngToNm1 = "," & nms(r).Name
Exit Function
End If
Next r
mFRngToNm1 = ""
End Function
【解説】
問題の箇所は、
If "=" & ActiveSheet.Name & "!" & rng.Address = nms(r) Then
の行です。
ネットの情報ではNamesから得られる情報は、名前が定義されているセル範囲の
『シート名!セル範囲』なのですが、
ジョージの環境(エクセル2016)では、
『=シート名!セル範囲』
でした。
RefersToRangeプロパティでRangeが得られるらしいですが、こちらの環境ではうまくいきませんでした。
取得する関数を作ったのですが。。。
ネットから拾った情報だけでは、うまくいかず。。
苦労しました。
関数のコードは以下の通り。
余計なコードが残ってますが、ご愛嬌(?)
nm(1)は不要ですかね。
'【機能】セル範囲に設定された名前を返す
Function mFRngToNm1(rng As Range) As String
'【引数】
' rng : セル範囲
'【変数】
Dim nms As Names
Dim nm(1) As Name
Dim r As Integer
Dim str1 As String
'【実行コード】
Set nms = ActiveWorkbook.Names ' ワークブックの名前コレクション
For r = 1 To nms.Count
' 引数のセル範囲と同じセル範囲だったら、
If "=" & ActiveSheet.Name & "!" & rng.Address = nms(r) Then
' 名前を返す
mFRngToNm1 = "," & nms(r).Name
Exit Function
End If
Next r
mFRngToNm1 = ""
End Function
【解説】
問題の箇所は、
If "=" & ActiveSheet.Name & "!" & rng.Address = nms(r) Then
の行です。
ネットの情報ではNamesから得られる情報は、名前が定義されているセル範囲の
『シート名!セル範囲』なのですが、
ジョージの環境(エクセル2016)では、
『=シート名!セル範囲』
でした。
RefersToRangeプロパティでRangeが得られるらしいですが、こちらの環境ではうまくいきませんでした。
ヤバイぜ! ありがとうございます[__猫]
by cheese999 (2016-08-07 05:23)