Zum Inhalt springen

Excel VBA: Mit If Abfrage mehrere Zellen auswählen


thommescan

Empfohlene Beiträge

Hallo zusammen,

bin ein blutiger Programmier-Anfänger würde aber gerne mit VBA ein paar kleine Programme programmieren. Leider wurden mir schon bei meinen ersten Schritten große Steine in den Weg geworfen.

Jetzt zu meinem Problem:

Ich habe folgende Liste gegeben:

Fuß

Fuß

Fuß

Schuh

Fuß

Schuh

Fuß

Fuß

Schuh

Fuß

Ich würde jetzt gerne alle Zellen markieren in denen Schuh steht.

Am besten zeig ich euch jetzt erstmal meine Gehversuche.

Sub Makro1()

Dim zellen As Object

For Each zellen In Selection

'Ich hab also alle Zellen markiert.

If zellen = Schuh Then

zellen.Select

End If

Next zellen

End Sub

Leider scheinen mir schon die ersten kleinen Programme zu schwer zu sein.

Bei mir markiert es bei diesem Programm leider immer nur diese Zelle mit Schuh drin, die am weitesten unten in der Liste steht.

Hat mir vielleicht irgendjemand einen Tipp wie es mir alle Zellen mit Schuh drin auswählt? oder wie ich dann gleich die ganzen Zeilen in denen Schuh steht markieren kann?

Wär wirklich super, wenn ihr mir helfen könntet. Bin nämlich ziemlich montiviert meine Kreativität im Excel ein bißchen auszuleben.

Liebe Grüße Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

mhm mhm mhm

das erste is, das dir wie gesagt deine ursprüngliche Selection flöten geht wenn du ne neue Zelle selectest.

Imo ist es nicht sinnvoll, die Zellen die du suchst in eine Selection zu packen, du schreibst da grad ein makro, also mach doch gleich was du im hinterkopf hast mit den entsprechenden Zellen.

Als nächstes ist deine if schlicht murks.

If ltrim(rtrim(zellen.Value)) = "Schuh" Then

müsst das heissen wenn das funktionieren soll.

Die trims sind optional, aber der Erfahrung nach is das eine beliebte Fehlerquelle.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Lupo49,

danke für deine schnelle Antwort. Wusste leider nicht wie ich meine Quellcodes richtig reinstelle, habs aber gerade gefunden.

Bei mir wird also jede Zelle mit Schuh einzelnd markiert und dann wieder gelöscht und bei der letzten Zelle bleibt dann die Auswahl stehen? Oder habe ich das falsch verstanden?

Was muss ich dann ändern, damit alle Zellen mit Schuh markiert werden?

Liebe Grüße Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

nein, bei dir wird nichts selektiert.

Die if passt nicht. Wenn du nen String vergleichen willst, müssen da " " rein. Desweiteren musst du auf das Attribut .Value der Zelle zugreifen wenn du irgendwas vergleichen willst vom Inhalt.

Wenn die if passt, würde dir die erste Zelle markiert wo Schuh drinsteht.

Du hast ne Schleife :

"für jedes Element in meiner aktuellen Selektion mach das"

Das heist, sobald du da eine Zelle Selektierst, ist DAS deine aktuelle Selektion.

Bei dem was du da vorhast, wenn überhaupt, dann musst du anders rum rangehn, alle Zellen wo NICHT "Schuh" drinsteht, aus der Selektion entfernen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Streffin,

auf die Idee bin ich ja noch gar nicht gekommen, dass man gar nicht nach den zellen fragt wo schuh drin steht, sondern nur die Zellen nichtmehr markiert in denen Schuh nicht drin steht :)

Wie sollte aber dann meine If-Anweisung aussehen? Meine war ja scheinbar ein richtiger griff ins klo.

gibt es auch einen Befehl um die Auswahl aufzuheben?

Liebe Grüße Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hm, du hast dir da was doofes rausgesucht muss ich sagen ....

Mir wäre nicht bekannt, dass es da eine Methode giebt, mit der man einzellne Zellen zu einer Selektion hinzufügen oder entfernen kann.

Aber, du kannst eines machen :

du nimmst dir ein Array (redim preserve brauchste hier dann), oder eine Arraylist (String), gehst zuerst deine Selektion durch, und schreibst dir jede Zelladresse in das String array.

Die Adresse einer Zelle bekommste

for each cell in Selection

cell.row

cell.column

Allerdings brauchst du noch eine kleine Funktion dafür, mit der du dir den Spaltennamen von 1,2,3,4 in A,B,C,D übersetzt.

In dein Array schreibst du dann die Zelleadresse im Format "A1", "B1" usw.

So, dann haste erstmal alle Zellen deiner Selektion in dem Array. soweit, so gut.

Wenn du jetzt alle Elemente deines Arrays durchgehst, prüfst ob die Zellen den gesuchten String enthalten, und dir dann daraus eine neue Selektion baust, haste was du haben willst :


dim sRange as String = ""


for i = 0 to ubound(arr) - 1

    range(arr(i)).select


    if activecell.value = "irgendwas" then

         sRange = sRange & arr(i) & ","

    end if


i = i + 1

next


sRange = left(sRange, len(sRange) -1)


range(sRange).select

Is nen dirty workarround, aber .... naja, is halt vba :P

Hoff du hast ungefähr ne Vorstellung wie ich das mein.

Allgemein gesagt, Selection is immer was doofes, was du aber auch nicht wirklich oft brauchst in makros. Makros schreibst du ja primär zur automatisierung von Arbeitsschritten die oft vorkommen, oder wenn du sachen vor hast, die Excel in der Form nicht ohne weiteres hinbekommt (Ich sag nur Datenbank Excel reporting, ein weites Feld). D.h. du gehst im Makro eher hin, und kopierst, löschst, oder sonst was mit den Zellen die du am suchen bist.

Das ist auch weit einfacher zu programmieren dann.

mfg

Sven

Bearbeitet von streffin
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bah gott, vergiss n grossteil, ich brauch urlaub ....

prinzip bleibts gleiche, aber einfacher :


sub selektieren

dim sRange as String


For Each cell in Selection

    if ltrim(rtrim(cell.Value)) = "irgendwas" then

         sRange = sRange & "Cells(" & cell.row & "," & cell.column & "),"

    end if

next


sRange = Left(sRange , len(sRange) - 1 )


Range(sRange).select


end sub

mir ist enfallen das man ne Range auch per Range(Cells(i,j), Cells(x,y)) bilden kann, is so natürlich um einiges einfacher ..... vergiss den Beitrag eins drüber am besten

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich das lese brauch ich glaube ich auch Urlaub ;)

Wenn ich das jetzt richtig verstanden habe, dann markiert deine Prozedur jetzt aus einer Auswahl alle Zellen wo irgendwas drin steht oder?

wenn ich das aber teste funktioniert das bei mir nicht, da bei

Range(sRange).Select
immer ein Laufzeitfehler kommt. Mit dem Ausdruck
sRange = sRange & "Cells(" & cell.Row & "," & cell.Column & ")"

kann ich leider auch nicht so viel anfangen, da ich das in der Klammer nicht versteh. Formuliert das die allgemeine Position meiner bestimmten Zellen, d.h. die Reihe und die Zeile?

Ist mir fast schon peinlich, dass ich da nicht durchsteig, aber jeder fängt einmal klein an.

Liebe Grüße Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

des kommt von wenn man nichts zum debuggen da hat ....


Sub selektieren()

Dim sRange As String


For Each cell In Selection

    If LTrim(RTrim(cell.Value)) = "irgendwas" Then

         sRange = sRange & GetColName(cell.Column) & CStr(cell.Row) & " ,"

    End If

Next

If Len(sRange) > 0 Then

    sRange = Left(sRange, Len(sRange) - 1)

    Range(sRange).Select

End If



End Sub


Function GetColName(lcol As Long)

Dim s As String


    If lcol > 26 Then

        s = Chr(64 + (lcol - 1) \ 26) & Chr(64 + (lcol - 1) Mod 26 + 1)

    Else

        s = Chr(64 + lcol)

    End If

    GetColName = s

End Function

so, dat tut.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...