Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1648to1652
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Cells für Bereiche

Cells für Bereiche
17.10.2018 08:46:39
Burak
Guten Morgen,
ich versuche grade Fleixibilität in meine Makros zu bekommen, angefangen mit aus Range("xxx") Cells(x, x) zu machen.
Dabei werden die Spalten immer durch eine Variable ersetzt.
Also zb. wird aus "Range("A10")" ein Cells(10, barcodespalte).
So weit so gut. Jetzt stecke ich bei Bereichen fest. Also wenn zB. von A20 bis A100 oder noch schlimmer, A10 bis C100.
Die einzige Möglichkeit die mir da spontan einfällt wäre es Cells mit einer bzw. zwei Schleifen zu kombinieren und die Schleifenenden von Variablen abhängig zu machen.
1. geht das auch anders?
2. Wie schaut es aus mit komplizierteren Fällen wie:
Do Until IsError(Application.Match(Barcode, Worksheets(linie).Range("A" & ezeile + 1 & ":A" & lastRowInList), 0)) Or ezeile = lastRowInList
Freundliche Grüße
Burak

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Cells für Bereiche
17.10.2018 08:49:01
Nepumuk
Hallo Burak,
für A10 bis C100 so:
Range(Cells(10, 1), Cells(100, 3))
Gruß
Nepumuk
funktioniert, danke!
17.10.2018 09:20:30
Burak
funktioniert super, danke dir
das man das auch nirgendwo im Internet so leicht findet -.-
ehm hier aber nicht :(
17.10.2018 09:43:58
Burak
hier funktioniert es aber nicht. Wo ist mein Fehler?
aus:
Worksheets(linie).Range("E" & szeile + 1 & ":E" & ezeile).Copy Columns(d + 25)
habe ich:
Worksheets(linie).Range(Cells(szeile + 1, 5), Cells(ezeile, 5)).Copy Columns(d + 25)
gemacht
Grüße
Burak
Anzeige
Unvollständige Referenzierung...
17.10.2018 09:50:04
EtoPHG
Hallo,
Das Problem wird es wohl solange geben, wie sich Leute an VBA versuchen und nicht verstehen, was sie machen!
Cells(....) ohne Objektreferenzierung bezieht sich auf das ActiveSheet
Vollständig müsste es heissen:
Worksheets(linie).Range(Worksheets(linie).Cells(szeile + 1, 5), _
Worksheets(linie).Cells(ezeile, 5)).Copy Worksheets(linie).Columns(d + 25)

oder mit einem With Konstrukt:
With Worksheets(linie)
.Range(.Cells(szeile + 1, 5), .Cells(ezeile, 5)).Copy .Columns(d + 25)
End With
Gruess Hansueli
Anzeige
AW: Unvollständige Referenzierung...
17.10.2018 10:20:51
Burak
grundsätzlich richtig, nur dass vor "Columns(d + 25)" kein Punkt gehört.
aber auch danke dir :)
woher weiss ich, wohin du kopieren willst? (owT)
17.10.2018 10:30:20
EtoPHG

AW: ehm hier aber nicht :(
17.10.2018 09:52:25
Nepumuk
Hallo Burak,
du musst den Bezug aller Objekte auf die richtige Tabelle setzen:
With Worksheets(linie)
.Range(.Cells(szeile + 1, 5), .Cells(ezeile, 5)).Copy Columns(d + 25)
End With

Gruß
Nepumuk
AW: ehm hier aber nicht :(
17.10.2018 10:20:02
Burak
hast recht, funktioniert jetzt. danke :*
AW: Cells für Bereiche
17.10.2018 09:27:10
Luschi
Hallo Burak,
oder für den Bereich 'BA10:BC100' auch so: Range(Cells(10, "BA"), Cells(100, "BC"))
Damit entfällt dann die obligatorische Finger-Zähl-Übung.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Cells für Bereiche
17.10.2018 09:54:31
Daniel
Hi
eine oft übersehene Möglichkeit, Zellbereiche zu beschreiben, ist die RESZIZE-Methode.
diese bietet sich immer an, wenn die Linke obere Zelle sowie die Anzahl der Zeilen und Spalten, die ein Bereich umfassen soll, bekannt ist:
dh ein unflexibles Range("A10:C100") wird zu Cells(10, 1).Resize(91, 3)
das Cells().Resize() hat gegenüber dem Range(Cells(), Cells()) den Vorteil, dass man bei Bezug auf ein nicht aktives Tabellenblatt dieses nur einmal angeben muss und nicht mehrfach.
Range(Sheets("xyz").Cells(a, b), Sheets("xyz").Cells(c, d))
Sheets("xyz").Cells(a, b).Resize(x, y)

ist vorallem dann interessant, wenn die WITH-Klammer schon für ein anderes Objekt verwendet wird.
Gruß Daniel
Anzeige
AW: Cells für Bereiche
17.10.2018 12:34:11
Nepumuk
Hallo,
Resize hat einen Nachteil, es ist ziemlich langsam.
Gruß
Nepumuk
den nachteil konnte ich bisher..
17.10.2018 13:10:12
Daniel
..noch nicht feststellen.
Selbst wenn ein Cells.Resize etwas langsamer ist als ein Range(Cells, Cells) dürfte sich das kaum spürbar auswirken, da man das eher selten in Schleifen mit hohen Umlaufzahlen einsetzt, so dass die Vorteile durch die einfachere und übersichtlichere Anwendung überwiegen.
hast du da genauere Informationen oder einen Testcode, mit dem man den Unterschied messen kann?
Gruß Daniel
AW: den nachteil konnte ich bisher..
17.10.2018 14:31:20
Nepumuk
Hallo,
in 2013 ist der Unterschied kaum noch da, in früheren Versionen war er spürbarer.
Public Sub Test()
    Dim sngTimer As Single
    Dim lngIndex As Long
    Dim avntArray As Variant
    sngTimer = Timer
    For lngIndex = 1 To 10
        avntArray = Range(Cells(1, 1), Cells(5000, 5000)).Value
    Next
    Debug.Print Timer - sngTimer
    sngTimer = Timer
    For lngIndex = 1 To 10
        avntArray = Cells(1, 1).Resize(5000, 5000).Value
    Next
    Debug.Print Timer - sngTimer
End Sub

Gruß
Nepumuk
Anzeige
AW: den nachteil konnte ich bisher..
17.10.2018 15:07:42
Daniel
naja muss ich zu Hause mal testen, da hab ich noch 2010.
aber ich glaube kaum, dass da was signifikantes rauskommen dürfte, weil in dem Beispiel das Einlesen von 25.000.000 Werten in ein Array die Zeitbestimmende Komponente sein dürfte.
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige