Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
956to960
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
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

if Bedingung erweitern, dass Länge der Strings ...

if Bedingung erweitern, dass Länge der Strings ...
28.02.2008 21:47:30
Peter
... innerhalb einer Spalte weniger als 7 sein muss.
Guten Abend
Mit Hilfe dieses Forums habe ich nachfolgenden Code zusammengestellt, der wunderbar funktioniert.
Bei der ersten Zeile nach For i = 1 To 26 möchte ich die nun die Bedingung etwas abändern. Vorliegend werden die Spalten 1 bis 26 abgearbeitet, bis bestimmte Strings gefunden werden und der maximale Wert in der gleichen Spalte kleiner als 7 ist.
Nun möchte ich den zweiten Bedingungsteil abändern und zwar ist nicht mehr der maximale Wert massgebend, stattdessen soll überprüft werden, ob in der Spalte ein String vorhanden ist, der 7 oder mehr Zeichen enthält.
Optimal wäre, wenn auf diese Spalten auch noch die glätten() angewandt werden könnte.
Danke für jede Unterstützung.
Gruss, Peter

Private Sub Worksheet_deactivate()
Application.StatusBar = ""
Dim i As Integer
Dim rng As Range
With Application.WorksheetFunction
For i = 1 To 26
If .CountIf(Me.Columns(i), "*T.*") + .CountIf(Me.Columns(i), "*C.*") > 0 And .Max(Me. _
Columns(i)) 


8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: if Bedingung erweitern, dass Länge der Strings
28.02.2008 22:39:46
Erich
Hallo Peter,
probier mal

Private Sub Worksheet_deactivate()
Dim i As Integer, lngR As Long
Dim rng As Range
Application.StatusBar = ""
With Application.WorksheetFunction
For i = 1 To 26
lngR = Cells(Rows.Count, i).End(xlUp).Row
If .CountIf(Columns(i), "*T.*") + .CountIf(Columns(i), "*C.*") > 0 And _
Evaluate("=MAX(LEN(" & Chr(i + 64) & "1:" & Chr(i + 64) & lngR & "))") 

Mit dem Evaluate wird eine Arrayformel etwa dieser Art ausgewertet:
=MAX(LÄNGE(D1:D777)) (für i=4 und 777 Zeilen in Spalte D)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: if Bedingung erweitern, dass Länge der Strings
29.02.2008 08:15:07
Peter
Hallo Erich
Das funktioniert, vielen Dank!
Um das ganze zu Verstehen, habe ich noch folgende Frage:
ich habe meinen bisherigen Code durch ergänzt durch
dim lngR As Long sowie durch
lngR = Cells(Rows.Count, i).End(xlUp).Row und die zusätzliche Bedingung
And Evaluate("=MAX(LEN(" & Chr(i + 64) & "1:" & Chr(i + 64) & lngR & "))") < 7 Then ...
ergänzt.
Die übrigen Zeilen habe ich beibehalten, da ich dort die Variable Me drin habe, die sich auf die zu verlassende Tabelle bezieht.
Nun meine Fragen:
Weshalb funktioniert die zusätzliche Bedingung, auch wenn nicht gesagt wird, in welcher Tabelle das "Evaluate" ausgeführt werden soll?
Habe ich richtig verstanden, dass dieses Evaluate nur funktioniert, da die letzte Spalte Z ist, die überprüft wird. Wie müsste die Formel angepasst werden, damit das auch bei zweistelligen Spaltenbezeichnungen (AA ff.) funktioniert?
Danke für eine Rückmeldung.
Peter

Anzeige
AW: if Bedingung erweitern, dass Länge der Strings
29.02.2008 09:54:00
Erich
Hallo Peter,
ja, das stimmt mit der letzten Spalte Z.
Hier eine Version, die auch mit den dreistelligen Spaltenbezeichnungen in Excel 2007 klarkommen _ wird:

Option Explicit
Private Sub Worksheet_deactivate()
Dim i As Integer, lngR As Long, strSp As String
Dim rng As Range
Application.StatusBar = ""
With Application.WorksheetFunction
For i = 1 To 26
lngR = Cells(Rows.Count, i).End(xlUp).Row
strSp = SpalteTxt_ausNum(i)
If .CountIf(Columns(i), "*T.*") + .CountIf(Columns(i), "*C.*") > 0 And _
Evaluate("=MAX(LEN(" & strSp & "1:" & strSp & lngR & "))")  26) - (iNr > 702))
End Function

Das "Me" kannst du hier getrost weglassen, denn Me ist in diesem Moment ohnehin das aktive Blatt.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: if Bedingung erweitern, dass Länge der Strings
29.02.2008 10:39:00
Peter
Hallo Erich
Das funktioniert prima, vielen Dank!
Nun habe ich noch ein Anliegen, worin trotz mehreren Anläufen gescheitert bin.
Ich möchte in der Codezeile "Evaluate" noch WorksheetFunction.Substitute(xxx" ";"") einbauen, damit allfällige mehrere Leerzeichen, die am Anfang oder am Ende eines Eintrages stehen, nicht in die Ermittlung der Stringlänge eingerechnet werden.
Im Tabellenblatt würde eine entsprechende Matrixformel wie folgt aussehen:
{MAX(LÄNGE(WECHSELN(B4:B102;" ";"")))}~f~
Kann ich die Funktion WorksheetFunction.Substitute zusätzlich einbauen? Wenn ja, dann bin ich am Syntax immer gescheitert.
~f~Evaluate("=MAX(LEN(" & strSp & "1:" & strSp & lngR & "))") < 7 Then
Danke für eine Rückmeldung.
Peter

Anzeige
AW: max. Stringlänge ohne Leerzeichen
29.02.2008 11:34:20
Erich
Hi Peter,
so sollte es funzen:

Private Sub Worksheet_deactivate()
Dim i As Integer, lngR As Long, strSp As String
Dim rng As Range
Application.StatusBar = ""
With Application.WorksheetFunction
For i = 3 To 26
lngR = Cells(Rows.Count, i).End(xlUp).Row
strSp = SpalteTxt_ausNum(i)
If .CountIf(Columns(i), "*T.*") + .CountIf(Columns(i), "*C.*") > 0 And _
Evaluate("=MAX(LEN(SUBSTITUTE(" & strSp & "1:" & _
strSp & lngR & ","" "",)))") 

Wozu belegst du eigentlich die StatusBar? Ich denke, die beiden Zeilen könntest du weglassen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: max. Stringlänge ohne Leerzeichen
29.02.2008 13:23:03
Peter
Hallo Erich
Vielen Dank - Es funktioniert.
Noch eine letzte Frage: Mein letzter Versuch war die erste der untenstehenden Zeilen. Weshalb muss das " " (Leerzeichen), das zu ersetzen ist, nochmals in Anführungszeichen gebracht werden?
Zur Statusbar: Das ist tatsächlich ein Überbleibsel aus alter Zeit, das hier nichts mehr zu suchen hat.
Freundlicher Gruss, Peter
Evaluate ("=MAX(LEN(SUBSTITUTE(" & strSp & "1:" & strSp & lngR & "," ","")))")
Evaluate ("=MAX(LEN(SUBSTITUTE(" & strSp & "1:" & strSp & lngR & ","" "",)))")

Anzeige
AW: Gänsefüßchen im String
29.02.2008 14:10:00
Erich
Hi Peter,
wenn ein Gänsefüßchen innerhalb eines Strings auftauchen soll, muss man es verdoppeln.
In der Substitute-Formel muss links und rechts vom Leerzeichen je ein Gänsefuß stehen.
x = "abc"def" ist nicht möglich,
x = "abc""def" ergibt den String abc"def
Das ist sowohl in VBA als auch in Excel so. Gib mal in Excel die Formeln
= "abc"def"
= "abc""def"
in eine Zelle ein.
Grüße von Erich aus Kamp-Lintfort und: Schönes Wochenende!

AW: Gänsefüßchen im String
29.02.2008 15:32:24
Peter
Hallo Erich
Vielen Dank für die Erläuterung. Du hast mir in verschiedenen Fragestellungen SEHR geholfen.
Auch dir ein schönes Wochenende.
Gruss, Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige