セルに入力された文字を使って、セルに名前を付けてみる。

このような疑問を見かけたので、私なりに考えてみた。

セルに入力された文字を使って、セルに名前を付けることが出来るか。

例えば、A列の文字をそのまま、B列のセルの名前にすることは出来るだろうか。

f:id:Infoment:20190607184456p:plain

結論は「出来る」。ただし、ワークシート関数で実現する方法は知らない(あるのかもしれない)。
今回は、マクロで実現してみた。

サンプル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

f:id:Infoment:20190607184912p:plain

一つずつ読んでいけば、割と直感的に理解できるのではないかと思う。

サンプル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

結果を受けて更に何かする場合は、このようなやり方もあるということで。

他にもきっと、様々な方法があるに違いない。
どんな方法で実現するかは、状況と好み次第ということで。

参考まで。