Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Zelle größer Finden und Zellenadresse ausgeben

VBA Zelle größer Finden und Zellenadresse ausgeben
07.10.2015 21:56:03
trx
Hallo zusammen,
da ich schon sehr viel aus diesem Forum herausgepickt habe, nun aber nicht mein Problem finde, werde ich mal ein eigenes Thema eröffnen.
Ich möchte gerne ab einer schon gesuchten ZellenAdresse eine Suche starten, bis das Ende der Spalte erreicht ist.
Es soll nach dem ersten Wert gesucht werden, der größer 0,01 ist.
So sieht die Spalte aus:
1,42E-07
1,37E-07
1,37E-07
0,319999993
0,349999994
Er soll mir also die Zeilennummer ausgeben, ab dem der Wert größer 0,01 ist, in diesem Fall also die Nummer von 0,31999999.
Nun soll dies über Mehrere Blätter laufen und mein Code sieht imoment so aus:
Sub Zeilen()
Set wkbDaten = Workbooks("Mappe1.xlsm")
For Each wks In wkbDaten.Sheets
________________________
y = 1
x = wks.Range("A:A").End(xlDown).Row
Set rngHandsOff = wks.Range("A" & y & ":A" & x).Find(What:="yes", LookIn:=xlValues, LookAt:= _
xlWhole)
Zeile = rngHandsOff.Row
wert = WorksheetFunction.Sum(wks.Range("A" & Zeile & ":A" & x))
wks.Cells(10, 1).Value = wert
_____________________________
avntArray = wks.Range("A" & y & ":A" & Zeile)
For Each vntElem In avntArray
If vntElem > 3 Then vntElem.Adress: Exit For
Next
Next
End Sub
Natürlich funktioniert der Code nicht. Ich habe die Idee von ab "For Each vntElem" auch hier im Forum gefunden und dachte ich könnte einfach mit Adress die Adresse ausgeben. Ohne Erfolg. Mit Find fände ich sowas am einfachsten, aber leider kann ich Find nicht sagen, dass ich einen Wert >0,01 suche. Nun die Frage, wie könnte ich diesen Code umbauen, sodass ich die ZellenAdresse von dem vntElem habe.
Die brauche ich um in einer anderen Spalte die Werte (ab Zeile 1) bis dieser Zellenadresse zu summieren. Des Wegen der vorherige Code.
Dies ist aus meinem Testdokument, deswegen habe ich Variablen nur x und y benannt. In meinem Vollständigen Code sind die natürlich besser benannt. Auch habe ich hier nur 1 Spalte und 2 Blätter.
Ich hoffe ich konnte es einigermaßen erklären.

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zelle größer Finden und Zellenadresse ausgeben
07.10.2015 22:22:59
Daniel
Hi
wenn die Liste aufsteigend sortiert ist, dann wäre die Funktion VERGLEICH die geeignte Funktion (in VBA Application.Match)

y = 1
x = wks.Range("A:A").End(xlDown).Row
Zeile = y + Application.Match(0.01, wks.Range("A" & y & ":A" & x), 1)

Gruss Daniel

Anzeige
AW: VBA Zelle größer Finden und Zellenadresse ausgeben
07.10.2015 23:05:13
Trx
Leider muss das ganze nicht aufsteigend sortiert sein sondern kann auch ein Durcheinander sein. Aber schonmal vielen Dank, das kann ich für ein Paar Blätter schonmal benutzen!!

AW: VBA Zelle größer Finden und Zellenadresse ausgeben
07.10.2015 23:16:24
Daniel
Hi
wenns nicht sortiert ist, dann musst du mit ner Schleife über die Zellen laufen und die Zellewerte mit 0,01 vergleichen:
for Zeile = y to x
if wks.cells(z, 1) > 0.01 then Exit for
next

nach abbruch der Schleife hat die Variable Zeile dann die Zeilennummer der ersten Zelle, deren Wert grösser als 0,01 ist.
sollte es vorkommen können, dass alle Werte kleiner als 0,01 sind, dann wird die Schleife vollständig durchlaufen. Um zu überprüfen, ob dieser Fall eingetreten ist vergleicht man Zeile mit dem Schleifenendwert. Ist der Schleifenzähler Zeile grösser als der Endwert x, wurde die Schleife vollständig durchlaufen und es gibt keinen Wert grösser 0,01
Gruss Daniel

Anzeige
AW: VBA Zelle größer Finden und Zellenadresse ausgeben
08.10.2015 18:06:18
trx
Klappt super danke!
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zellenadresse in Excel mit VBA finden, die größer als ein bestimmter Wert ist


Schritt-für-Schritt-Anleitung

  1. Öffne Visual Basic for Applications (VBA):

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf dein Projekt im Projektfenster und wähle Einfügen > Modul.
  3. Füge den folgenden VBA-Code ein:

    Sub ZellenAdresseGroesserAls()
       Dim wkbDaten As Workbook
       Dim wks As Worksheet
       Dim y As Long, x As Long, Zeile As Long
    
       Set wkbDaten = Workbooks("Mappe1.xlsm")
    
       For Each wks In wkbDaten.Sheets
           y = 1
           x = wks.Range("A:A").End(xlDown).Row
    
           For Zeile = y To x
               If wks.Cells(Zeile, 1).Value > 0.01 Then
                   MsgBox "Die Zellenadresse ist: " & wks.Cells(Zeile, 1).Address
                   Exit For
               End If
           Next Zeile
       Next wks
    End Sub
    • Dieser Code durchsucht jede Arbeitsblatt-Zelle in der ersten Spalte und gibt die Adresse der ersten Zelle aus, deren Wert größer als 0,01 ist.
  4. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle dein Makro und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Subscript out of range"

    • Lösung: Stelle sicher, dass der Workbook-Name (Mappe1.xlsm) korrekt ist und die Datei geöffnet ist.
  • Fehler: "Type mismatch"

    • Lösung: Überprüfe, ob die Zellen in der Spalte A tatsächlich numerische Werte enthalten.
  • Keine Ausgabe

    • Lösung: Stelle sicher, dass es mindestens einen Wert in der Spalte A gibt, der größer als 0,01 ist.

Alternative Methoden

Eine alternative Methode besteht darin, die Application.Match-Funktion zu verwenden, wenn deine Daten aufsteigend sortiert sind. Das würde den Code erheblich vereinfachen:

Zeile = y + Application.Match(0.01, wks.Range("A" & y & ":A" & x), 1)
MsgBox "Die Zellenadresse ist: " & wks.Cells(Zeile, 1).Address

Diese Methode funktioniert jedoch nur, wenn deine Daten in aufsteigender Reihenfolge sortiert sind.


Praktische Beispiele

  • Beispiel 1: Wenn du Werte wie 1,42E-07, 0,319999993 in der ersten Spalte hast, wird das Skript die Zellenadresse für 0,319999993 zurückgeben.
  • Beispiel 2: Teste es mit verschiedenen Datensätzen, um sicherzustellen, dass dein Makro robust gegenüber unterschiedlichen Datenverteilungen ist.

Tipps für Profis

  • Nutze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden.
  • Verwende Debug.Print, um Zwischenergebnisse in der Immediate-Window von VBA auszugeben, was dir helfen kann, Fehlersuche zu betreiben.
  • Experimentiere mit der .Find-Methode, um gezielt nach Zellen zu suchen, auch wenn das nicht für Werte größer als 0,01 direkt funktioniert.

FAQ: Häufige Fragen

1. Kann ich den Code für mehrere Spalten anpassen? Ja, du kannst die Schleife anpassen, um durch mehrere Spalten zu iterieren, indem du die Spaltennummer in der Cells-Funktion änderst.

2. Ist dieser Code kompatibel mit Excel Online? Nein, dieser VBA-Code funktioniert nur in der Desktop-Version von Excel, da Excel Online keine VBA-Unterstützung hat.

3. Was passiert, wenn alle Werte kleiner als 0,01 sind? In diesem Fall wird das Skript durch alle Zeilen laufen, aber es wird keine Zellenadresse ausgegeben. Du kannst eine zusätzliche Überprüfung hinzufügen, um dies zu berücksichtigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige