3

VBA を使用して Excel で名前付き範囲を定義しようとしています。基本的に、可変列番号があります。次に、ループが実行されて、その特定の列の最初の空のセルが決定されます。ここで、その特定の列の行 2 からその列のデータを含む最後のセル (最初の空のセル - 1) までの名前付き範囲を定義したいと考えています。

たとえば、3 つの値を含む列 5 が指定されているとします。正しい場合、範囲は (2,5)(4,5) になります。(E2:E4) の代わりに整数のみを使用してこの範囲を指定する方法を考えています。それはまったく可能ですか?

名前付き範囲を定義する次のコードを見つけました。

'Change the range of cells (A1:B15) to be the range of cells you want to define
    Set Rng1 = Sheets("Sheet1").Range("A1:B15") 
    ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng1

整数のみを使用してこの範囲を指定するために、誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

6

E2:E4 の範囲をターゲットにしているため、セルの場所を指定する必要があります。以下の関数はあなたに役立つかもしれません.5などの列番号を渡すと、5 = Eおよび27 = AAのアドレスが返されます

ColLetter = ColNo2ColRef(colNo)
Set Rng1 = Sheets("Sheet1").Range(ColLetter & "2:" & ColLetter & "4") 
ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng1

Function ColNo2ColRef(ColNo As Long) As String
    ColNo2ColRef = Split(Cells(1, ColNo).Address, "$")(1)
End Function

お役に立てれば

編集者:

Set rng = Range(Cells(2, 5), Cells(4, 5)) 'E2:E4
ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng
于 2011-06-03T14:09:56.473 に答える
4

または代わりに

Sub test()
Set rng1 = Cells(2, 2) 'B2

Set rng2 = rng1.Resize(3, 1) 'B2:B4
'or
Set rng2 = Range(rng1, Cells(4, 2)) 'B2:B4

End Sub

または使用してループせずに直接実行します

With Sheet1
    col = 5 'variable col
    Set rng1 = .Range(.Cells(2, col), .Cells(.Rows.Count, col).End(xlUp))
    End With

これはと同じです

with sheet1
    Set rng1 = .Range(.Range("E2"), .Range("E" & .Rows.Count).End(xlUp))
    end with

編集:名前付き範囲を動的に変更するように設定している場合、VBA は必要ありません。これを Excel の名前付き範囲に直接入力し、E2 と最後の項目の間で自動的に自動調整するようにします (空白がないことを前提とします)。=$E$2:INDEX($E$2:$E$5000,COUNTA($E$2:$E$5000))(さらに行が必要な場合は 5000 を拡張します)

于 2011-06-03T14:21:12.417 に答える