web-dev-qa-db-ja.com

VBAのマクロを使用して、範囲を含むExcelシート全体をどのように選択しますか?

私はC#でこの質問に似た解決策を見つけました...以下のリンクを参照してください

c#のExcel.Rangeオブジェクトのワークシート内のすべてのセルを選択する方法

誰かがVBAでこれを行うためのスニペットを持っていますか?私はVBAにあまり詳しくないので、これは役に立ちます。ここに私が持っているものがあります...

「Ctrl + Shiftオーバー矢印、下矢印」を使用してセルの範囲全体を選択することにより、通常データを選択します。これをマクロで実行すると、たとえばA1:Q398247930がコーディングされます。私はそれが必要です

.SetRange Range("A1:whenever I run out of rows and columns")

これは非常に単純で、マクロなしで自分で簡単に行うことができますが、プロセス全体をマクロにしようとしていますが、これはほんの一部です。

Sub sort()
    'sort Macro
    Range("B2").Select
    ActiveWorkbook.Worksheets("Master").sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Master").sort.SortFields.Add Key:=Range("B2"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Master").sort
        .SetRange Range("A1:whenever I run out of rows and columns")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

edit:同じコードを使用したいところもありますが、範囲は「C3:行と列の終わり」です。ドキュメントの最後のセルの場所を取得する方法はVBAにありますか?

ありがとう!

24
C. Tewalt

シート上のすべてのセルではなく、A1の現在の領域と周囲のセルを見つけたいと思います。その場合-単に使用します... Range( "A1")。CurrentRegion

27
ExcelExpert

単純にcells.selectを使用して、ワークシートでallセル​​を選択できます。 Range(Cells.Address)と言って、有効なアドレスを取得できます。

何らかの書式変更を行った、または値を入力した最後のUsed Rangeを見つけたい場合は、ActiveSheet.UsedRangeを呼び出してそこから選択できます。役立つことを願っています

19
chancea

すべてのセルを次のようなオブジェクトとして使用できます。

Dim x as Range
Set x = Worksheets("Sheet name").Cells

Xは、ワークシート全体を含む範囲オブジェクトになりました

9
user4791681

ここにはいくつかのオプションがあります:

  1. UsedRangeプロパティを使用する
  2. 使用された最後の行と列を見つける
  3. シフトダウンと右シフトの模倣を使用する

私は個人的に使用範囲を使用し、ほとんどの場合、最後の行と列の方法を見つけます。

UsedRangeプロパティを使用して行う方法は次のとおりです。

Sheets("Sheet_Name").UsedRange.Select

このステートメントは、ワークシートで使用されているすべての範囲を選択します。列と行を削除すると、これがうまく機能しない場合があることに注意してください。

別の方法は、ワークシートで使用されている最後のセルを見つけることです

Dim rngTemp As Range
Set rngTemp = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
If Not rngTemp Is Nothing Then
    Range(Cells(1, 1), rngTemp).Select
End If

このコードがしていること:

  1. 値を含む最後のセルを見つける
  2. 最後のセルまでずっとcell(1,1)を選択します
6
Derek Cheng

この投稿にあるようなマクロを記録することをお勧めします。

レコードをフィルタリングするExcel VBAマクロ

しかし、必要なワークブックの終わりではなく、データの終わりを探している場合、データの始まりと終わりの間に空のセルがない場合、私はしばしばこのようなものを使用します。

R = 1
Do While Not IsEmpty(Sheets("Sheet1").Cells(R, 1))
    R = R + 1
Loop
Range("A5:A" & R).Select 'This will give you a specific selection

データが終了した後、行の番号にR =が残ります。これは列にも使用でき、Cを列表示にした場合は、Cells(C、R).Selectなどを使用できます。

1
MakeCents

ここに私が使用したものがあり、それはいくつかの完璧さを使用できることを知っていますが、他の人を助けると思います...

''STYLING''

Dim sheet As Range

' Find Number of rows used
Dim Final As Variant
    Final = Range("A1").End(xlDown).Row

' Find Last Column
Dim lCol As Long
    lCol = Cells(1, Columns.Count).End(xlToLeft).Column

Set sheet = ActiveWorkbook.ActiveSheet.Range("A" & Final & "", Cells(1, lCol ))
With sheet
    .Interior.ColorIndex = 1
End With
1

ワークシートの「.UsedRange」メソッドは、多くの場合、この問題を解決するのに優れていることがわかりました。 「.CurrentRegion」メソッドの通常の動作である切り捨ての問題に苦労しました。 [Worksheets( "Sheet1")。Range( "A1")。CurrentRegion]を使用しても、ワークシートが1つの列で構成され、行に空白が含まれる場合(および空白が必要な場合)、希望する結果が得られません。この場合、「。CurrentRegion」は最初のレコードで切り捨てられます。私は回避策を実装しましたが、最近さらに良いものを見つけました。セット全体を別のシートにコピーできる、または実際の住所(または行と列のみ)を特定できる以下のコードを参照してください。

Sub mytest_GetAllUsedCells_in_Worksheet()
    Dim myRange

    Set myRange = Worksheets("Sheet1").UsedRange
    'Alternative code:  set myRange = activesheet.UsedRange

   'use msgbox or debug.print to show the address range and counts
   MsgBox myRange.Address      
   MsgBox myRange.Columns.Count
   MsgBox myRange.Rows.Count

  'Copy the Range of data to another sheet
  'Note: contains all the cells with that are non-empty
   myRange.Copy (Worksheets("Sheet2").Range("A1"))
   'Note:  transfers all cells starting at "A1" location.  
   '       You can transfer to another area of the 2nd sheet
   '       by using an alternate starting location like "C5".

End Sub
1
Lifygen

データが連続している限り、範囲内のすべてのセルを選択する別の方法は、Range("A1", Range("A1").End(xlDown).End(xlToRight)).Selectを使用することです。

1
Bob the Builder

たぶんこれはうまくいくかもしれません:

Sh.Range( "A1"、Sh.Range( "A"&Rows.Count).End(xlUp))

0
Sarah

最初の質問を参照して、同じことを検討しています。マクロを記録した結果は、セルA76を選択することから始まります。

Sub find_last_row()
    Range("A76").Select
    Range(Selection, Selection.End(xlDown)).Select
End Sub
0
Pavlin Todorov
Sub SelectAllCellsInSheet(SheetName As String)
    lastCol = Sheets(SheetName).Range("a1").End(xlToRight).Column
    Lastrow = Sheets(SheetName).Cells(1, 1).End(xlDown).Row
    Sheets(SheetName).Range("A1", Sheets(SheetName).Cells(Lastrow, lastCol)).Select
End Sub

ActiveSheetで使用するには:

Call SelectAllCellsInSheet(ActiveSheet.Name)
0
Yehia Amer