it-swarm.com.de

Wie wählen Sie die gesamte Excel-Tabelle mit Bereich mit Makro in VBA aus?

Ich habe eine ähnliche Lösung für diese Frage in c # ... gefunden. Siehe untenstehenden Link

Wie alle Zellen in einem Arbeitsblatt in Excel auswählen. Objekt von c # auswählen?

Hat jemand einen Ausschnitt dafür in VBA? Ich bin mit VBA nicht wirklich vertraut, daher wäre dies hilfreich. Hier ist was ich bis jetzt habe ...

Ich wähle Daten normalerweise mit "Strg + Umschalttaste, Abwärtspfeil" aus, um einen gesamten Zellbereich auszuwählen. Wenn ich dies in einem Makro ausführen, codiert es beispielsweise A1: Q398247930. Ich brauche es einfach

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

Dies ist sehr einfach und ich könnte es auch ohne Makro selbst machen, aber ich versuche, den gesamten Prozess zu einem Makro zu machen, und das ist nur ein Teil davon. 

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: Es gibt andere Bereiche, in denen ich möglicherweise denselben Code verwenden möchte, aber der Bereich lautet "C3: Ende von Zeilen und Spalten". Gibt es eine Möglichkeit in VBA, die Position der letzten Zelle im Dokument abzurufen?

Vielen Dank!

20
matrixugly

Ich glaube, Sie möchten die aktuelle Region von A1 und die umgebenden Zellen finden - nicht unbedingt alle Zellen auf dem Blatt. Wenn ja - verwenden Sie einfach ... Bereich ("A1"). CurrentRegion

24
ExcelExpert

Sie können einfach cells.select verwenden, um all - Zellen im Arbeitsblatt auszuwählen. Sie können eine gültige Adresse erhalten, indem Sie Range(Cells.Address) sagen. 

Wenn Sie nach dem letzten Used Range suchen möchten, an dem Sie eine Formatierungsänderung vorgenommen oder einen Wert eingegeben haben, können Sie ActiveSheet.UsedRange aufrufen und von dort auswählen. hoffentlich hilft das

19
chancea

sie können alle Zellen als Objekt wie folgt verwenden: 

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

X ist jetzt ein Bereichsobjekt, das das gesamte Arbeitsblatt enthält

7
user4791681

sie haben hier einige Möglichkeiten:

  1. Verwenden der UsedRange-Eigenschaft
  2. finde die zuletzt verwendete Zeile und Spalte
  3. verwenden Sie ein Mimik von Herunterschalten und Rechtsschalten

Ich persönlich benutze den Used Range und finde die letzte Zeilen- und Spaltenmethode meistens.

So gehen Sie mit der UsedRange-Eigenschaft vor:

Sheets("Sheet_Name").UsedRange.Select

Diese Anweisung wählt alle verwendeten Bereiche im Arbeitsblatt aus. Beachten Sie, dass dies beim Löschen von Spalten und Zeilen manchmal nicht gut funktioniert.

Die Alternative besteht darin, die letzte im Arbeitsblatt verwendete Zelle zu finden

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

Was macht dieser Code:

  1. Suchen Sie die letzte Zelle, die einen beliebigen Wert enthält
  2. zelle (1,1) bis zur letzten Zelle auswählen
4
Derek Cheng

Ich würde empfehlen, ein Makro aufzunehmen, wie in diesem Beitrag zu finden.

Excel VBA-Makro zum Filtern von Datensätzen

Wenn Sie jedoch nach dem Ende Ihrer Daten und nicht nach dem Ende der Arbeitsmappe suchen, wenn zwischen dem Anfang und dem Ende Ihrer Daten keine leeren Zellen vorhanden sind, verwende ich oft etwas davon.

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

Sie bleiben mit R = bis zur Nummer der Zeile, nachdem Ihre Daten beendet sind. Dies könnte auch für die Spalte verwendet werden, und dann könnten Sie etwas wie Cells (C, R) verwenden. Wählen Sie, wenn Sie C als Spaltendarstellung gewählt haben. 

1
MakeCents

Hier ist, was ich verwendet habe, ich weiß, es könnte etwas Perfektionierung gebrauchen, aber ich denke, es wird anderen helfen ...

''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

Ich habe festgestellt, dass die Arbeitsblattmethode ".UsedRange" in vielen Fällen überlegen ist, um dieses Problem zu lösen. Ich kämpfte mit einem Kürzungsproblem, das ein normales Verhalten der ".CurrentRegion" -Methode ist. Wenn Sie [Arbeitsblätter ("Sheet1"). Range ("A1"). CurrentRegion] verwenden, werden nicht die gewünschten Ergebnisse erzielt, wenn das Arbeitsblatt aus einer Spalte mit Leerzeichen in den Zeilen besteht (und die Leerzeichen gewünscht werden). In diesem Fall wird ".CurrentRegion" beim ersten Datensatz abgeschnitten. Ich habe ein Workaround implementiert, aber kürzlich ein noch besseres gefunden. Der folgende Code ermöglicht das Kopieren des gesamten Satzes auf ein anderes Blatt oder das Identifizieren der tatsächlichen Adresse (oder nur von Zeilen und Spalten):

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

Eine andere Möglichkeit, alle Zellen innerhalb eines Bereichs auszuwählen, sofern die Daten zusammenhängend sind, ist die Verwendung von Range("A1", Range("A1").End(xlDown).End(xlToRight)).Select.

1
Bob the Builder

Vielleicht könnte das funktionieren:

Sh.Range ("A1", Sh.Range ("A" und Zeilen.Zahl) .End (xlUp))

0
Sarah

In Bezug auf die erste Frage schaue ich auf das Gleiche ... Das Ergebnis, das ich beim Aufzeichnen eines Makros bekomme, ist zunächst die Auswahl der Zelle 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

So verwenden Sie mit ActiveSheet:

Call SelectAllCellsInSheet(ActiveSheet.Name)
0
Yehia Amer