初心者の質問: 私はモジュールを持っています。 もともとは Roger Govier によって作成されました。
入力セルheader
を使用し、下に配置された空でないセルに対して動的な名前付き範囲を作成しますheader
。作成された名前付き範囲は、ヘッダー セルの値としてラベル付けされます。
Private Sub CreateNamedRange(header As range)
Dim wb As Workbook
Dim WS As Worksheet
Dim rStartCell As range
Dim rData As range
Dim rCol As range
Dim lCol As Long
Dim sSheet As String
Dim Rowno As Long
' get table location
Set rStartCell = header
Set WS = rStartCell.Worksheet
Set wb = WS.Parent
sSheet = "'" & WS.Name & "'"
With rStartCell
Rowno = .row
Set rData = .CurrentRegion
End With
Set rData = WS.range(rStartCell, WS.Cells(Rowno, rStartCell.Column))
Set rCol = rData.Columns
lCol = rCol.Column
wb.Names.Add Name:=Replace(rCol.Cells(1).Value, " ", "_"), _
RefersToR1C1:="=" & sSheet & "!" & rCol.Cells(2).Address(ReferenceStyle:=xlR1C1) & ":INDEX(C" & lCol & ",LOOKUP(2,1/(C" & lCol & "<>""""),ROW(C" & lCol & ")))"
End Sub
このコードを変更して、名前付き範囲を作成する代わりに、名前付き範囲であったはずの範囲のみを返すようにします。
例: にヘッダーがA1
あり、 にデータがありA2:A5
ます。
現在: を呼び出すとCreateNamedRange(.range("A1"))
、 の動的な名前付き範囲が作成されますA2:A5
。
目標: 呼び出す と、VBA コードの変数にCreateNamedRange(.range("A1"))
戻ります。.range("A2:A5")
dim myRange As Range
set myRange = CreateNamedRange(.range("A1"))