セルに入力された文字を使って、セルに名前を付けてみる。
このような疑問を見かけたので、私なりに考えてみた。
セルに入力された文字を使って、セルに名前を付けることが出来るか。
例えば、A列の文字をそのまま、B列のセルの名前にすることは出来るだろうか。
結論は「出来る」。ただし、ワークシート関数で実現する方法は知らない(あるのかもしれない)。
今回は、マクロで実現してみた。
サンプル1
A列のセルの値を一つずつ取り出して、B列のセルの名前とする。
Sub Sample_1() Dim SorceRange As Range Set SorceRange = Range("A1:A5") Dim DestinationRange As Range Set DestinationRange = Range("B1:B5") Dim i As Long For i = 1 To SorceRange.Count DestinationRange.Item(i).Name = SorceRange.Item(i).Value Next End Sub
一つずつ読んでいけば、割と直感的に理解できるのではないかと思う。
サンプル2
名前の元となる範囲と、名前を付ける範囲を、共に引数にしてみた。
Sub Sample_2(sorce_range As Range, destination_range As Range) Dim i As Long For i = 1 To sorce_range.Count destination_range.Item(i).Name = sorce_range.Item(i).Value Next End Sub
Sub Test_2() Call Sample_2(Range("A1:A5"), Range("B1:B5")) End Sub
切り分けたことで、少しすっきりしている。
サンプル3
ユーザー定義関数にしてみた。これに仕事をしてもらったうえで、
- 成功 ⇒ Trueを返す
- 失敗 ⇒ Falseを返す
という風にしてみた。例えば、こんな感じだ。
Function Sample_3(sorce_range As Range, destination_range As Range) As Boolean On Error Resume Next destination_range.Name = sorce_range.Value If Err.Number = 0 Then Sample_3 = True Else Sample_3 = False End If End Function
Sub test_3() If Sample_3(Range("A1"), Range("B1")) = False Then MsgBox "失敗!" Else MsgBox "成功!" End If End Sub
結果を受けて更に何かする場合は、このようなやり方もあるということで。
他にもきっと、様々な方法があるに違いない。
どんな方法で実現するかは、状況と好み次第ということで。
参考まで。