Ich habe einen benannten Bereich col_9395, es ist eine ganze Spalte. Ich möchte einen Bereich innerhalb dieses benannten Bereichs festlegen. Ich möchte, dass der Bereich in Zeile 3 bis Zeile 200 derselben Spalte beginnt. Was ist der beste Weg, dies zu tun?

Ursprüngliche Arbeitslinie ohne benannten Bereich:

Set rngBlnk = Sheet108.Range("T3:T200").SpecialCells(xlCellTypeBlanks)

Dies ist der Code, den ich ohne Glück ausprobiert habe:

Set rngBlnk = Range("col_9395)(3,1):Range("col_9395)(200,1).SpecialCells (xlCellTypeBlanks)
1
VBANewbie 19 Apr. 2018 im 17:47

5 Antworten

Beste Antwort

Könnte falsch sein, aber ich finde das am einfachsten:

Private Sub Test()
    Dim rngBlnk As Range
    Set rngBlnk = Range("col_9395").Rows("3:200").SpecialCells(xlCellTypeBlanks)
End Sub
1
AntiDrondert 19 Apr. 2018 im 15:01

Sie können die Art der Logik mit sehen

Option Explicit

Sub test()

Dim colToUse As Long
colToUse = ThisWorkbook.Worksheets("Sheet1").Range("ol_9395").Column

With ThisWorkbook.Worksheets("Sheet1")
Debug.Print .Range(.Cells(3, colToUse), .Cells(200, colToUse)).Address
End With

End Sub
1
QHarr 19 Apr. 2018 im 14:54
Sub t()
Dim rng As Range
Set rng = Range("col_9395") ' for easier use

Dim blnkRng As Range
Set blnkRng = Range(Cells(rng.Rows(3).Row, rng.Column), Cells(rng.Rows(200).Row, rng.Column)).SpecialCells(xlCellTypeBlanks)
blnkRng.Select
End Sub

Ich habe Ihren benannten Bereich einer Variablen zugewiesen (nur zur einfacheren Referenzierung). Dann habe ich mit der Eigenschaft Range() die Zeilen 3rd und 200th Ihres benannten Bereichs verwendet, um den Bereich für die Suche nach leeren Zellen festzulegen.

Die Idee ist, dass dies Ihnen hilft, falls Ihr benannter Bereich nicht einfach eine ganze Spalte ist. Es wird die relative 3. und 200. Zeile aus Ihrem benannten Bereich erhalten.

1
BruceWayne 19 Apr. 2018 im 14:56
Option Explicit

Public Sub TestMe()

    Dim rngBlnk As Range

    Dim firstCell As Range
    Dim lastCell As Range

    Set firstCell = [col_9395].Cells(3, 1)
    Set lastCell = [col_9395].Cells(200, 1)

    If WorksheetFunction.CountBlank(Range(firstCell, lastCell)) > 0 Then
        Set rngBlnk = Range(firstCell, lastCell).SpecialCells(xlCellTypeBlanks)
    End If   

End Sub

Eine Art Problem mit SpecialCells und deren Zuweisung besteht darin, dass ein Fehler ausgelöst wird, wenn keine Zellen des jeweiligen Typs vorhanden sind.

Daher erfolgt eine Überprüfung mit WorksheetFunction.CountBlank()>0 vor der Einstellung von rngBlnk für die speziellen Zellen.

1
Vityata 19 Apr. 2018 im 15:09

Ich bin zu spät zur Party, ich weiß, aber vielleicht hilft das jemandem. Ich bin auf eine Technik gestoßen, die ich in keiner der wenigen "Range-in-a-Range" -Fragen hier als Option sehe.

Ich habe festgestellt, dass Sie VBA direkt nach einem Bereich fragen können. Ich habe einige Daten als Tabelle formatiert, aber es kann sich einfach um einen benannten Bereich oder sogar um einen unbenannten Bereich handeln, nehme ich an. Mein Code, der funktioniert, sieht folgendermaßen aus:

        With Workbooks(Filename)
            .Worksheets(tabName).Activate
            .Worksheets(tabName).Range("SummaryBand").Range("B2:R2").Copy
            End With

Meine Tabelle heißt SummaryBand, was sich aufgrund eines vorherigen Schritts nicht unbedingt immer an derselben absoluten Position in der Tabelle befand, aber ich wollte einen absoluten Bereich innerhalb von SummaryBand. In diesem Beispiel ist "B2: R2" die absolute Position innerhalb der Tabelle, wobei die obere linke Zelle der Tabelle A1 ist.

0
Puddles 23 Apr. 2020 im 18:56