web-dev-qa-db-ja.com

VBA:変数による範囲の選択

Excelシートのフォーマットされた範囲を選択したい。最後の行と最初の行を定義するには、次の関数を使用します。

lastColumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count
lastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row

次のステップでは、この領域を選択します。式は次のようになります。

Range(cells(1, 1), cells(lastRow, lastColumn).Select

ただし、これは機能していません。たぶん誰かがそれのどこが悪いのかを知っているかもしれません。どうもありがとう!

11
Fabian Stolz

「相対参照」でマクロを記録しましたが、これは私が得たものです:

Range("F10").Select
ActiveCell.Offset(0, 3).Range("A1:D11").Select

私が考えたものは次のとおりです。範囲選択が引用符で囲まれている場合、VBAは実際にSTRINGを必要とし、そこからセルを解釈するので、次のことを試みました。

Dim MyRange as String
MyRange = "A1:D11"
Range(MyRange).Select

そして、それはうまくいきました:)...あなたの変数を使用して文字列を作成し、STRING変数としてExcelのディメンションを作成することを確認してください。

動作確認済みであることが判明しました:

Sub Macro04()

Dim Copyrange As String

Startrow = 1
Lastrow = 11
Let Copyrange = "A" & Startrow & ":" & "D" & Lastrow
Range(Copyrange).Select
End Sub
30
Nikesh Rastogi

私は似たようなことに出くわしました-いくつかの変数に基づいて範囲を作成したかったのです。セルの値がRangeに渡されたと思うので、Worksheet.Cellsの使用は直接機能しませんでした。

これはうまくいきました:

Range(Cells(1, 1).Address(), Cells(lastRow, lastColumn).Address()).Select

これにより、セルの数値の位置がRangeが期待するもの、つまりA1形式に変換されます。

8
Daver

使用する範囲を選択するだけの場合は、

ActiveSheet.UsedRange.Select

A1から使用範囲の最後までを選択する場合は、次のようなSpecialCellsメソッドを使用できます。

With ActiveSheet
    .Range(.Cells(1, 1), .Cells.SpecialCells(xlCellTypeLastCell)).Select
End With

最後のセルが何であるかについて、Excelが混乱することがあります。実際に使用されている範囲よりも小さい範囲になることはありませんが、一部のセルが削除された場合は大きくなる可能性があります。これを回避するには、検索とアスタリスクワイルドカードを使用して、実際の最後のセルを検索します。

Dim rLastCell As Range

With Sheet1
    Set rLastCell = .Cells.Find("*", .Cells(1, 1), xlValues, xlPart, , xlPrevious)

    .Range(.Cells(1, 1), rLastCell).Select
End With

最後に、本当に必要な場合にのみ選択していることを確認してください。 Excel VBAで行う必要があるほとんどのことは、最初に選択するのではなく、範囲に対して直接行うことができます。の代わりに

.Range(.Cells(1, 1), rLastCell).Select
Selection.Font.Bold = True

あなたはできる

.Range(.Cells(1,1), rLastCells).Font.Bold = True
7
Dick Kusleika

かっこがありません、I.E。 Range()を閉じていません。

これを試してくださいRange(cells(1, 1), cells(lastRow, lastColumn)).Select

しかし、Dick Kusleikaからの他の回答を見て、より良いサービスを提供できる可能性のある選択肢を探してください。具体的には、コードと同じ最終結果を持つActiveSheet.UsedRange.Select

4
Daniel

それらをアドレスに変換していますが、Cells(#、#)はアドレス入力ではなく整数入力を使用するため、lastRow = ActiveSheet.UsedRange.Rows.countlastColumn = ActiveSheet.UsedRange.Columns.Countを使用してください

1
273K Kool

私は使用してみました:

Range(cells(1, 1), cells(lastRow, lastColumn)).Select 

lastRowlastColumnは整数ですが、実行時エラー1004を受け取りました。古いVB(6.5)を使用しています。

うまくいったのは、次のものを使用することでした:

Range(Chr(64 + firstColumn) & firstRow & ":" & Chr(64 + lastColumn) & firstColumn).Select.  
1
Chris Bates