30

c# でこの質問に対する同様の解決策を見つけました c#の Excel.Range オブジェクトでワークシート内のすべてのセルを選択する方法は?

VBAでこれを行うプロセスは何ですか?

通常、「ctrl + shift over arrow、down arrow」を使用してデータを選択し、セル範囲全体を選択します。これをマクロで実行すると、たとえば 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

編集:
同じコードを使用したい他の部分がありますが、範囲は「C3:行と列の終わり」です。ドキュメント内の最後のセルの位置を取得する方法は VBA にありますか?

4

11 に答える 11

23

を使用して、ワークシート内のすべてのセルcells.selectを選択するだけです。と言うと、有効なアドレスを取得できます。 Range(Cells.Address)

Used Rangeフォーマットを変更したり、値を入力した最後の場所を見つけたい場合はActiveSheet.UsedRange、そこから呼び出して選択することができます。それが役立つことを願っています

于 2013-07-30T19:11:25.820 に答える
15

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

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

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

于 2015-04-15T11:47:36.277 に答える
1

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

レコードをフィルタリングする 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 のようなものを使用できます。

于 2013-07-30T19:25:29.693 に答える
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
于 2019-05-02T19:38:08.380 に答える