Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert sind; Die von diesem Forum gesetzten Cookies düfen nur auf dieser Website verwendet werden und stellen kein Sicherheitsrisiko dar. Cookies auf diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Die Updates sind abgeschlossen. Bitte meldet eventuelle Bugs und Auffälligkeiten im entsprechenden Forum.
Sollte das Loginfenster nicht sichtbar sein, ist es unten links. Entweder Ihr loggt Euch dort ein oder löscht den Browsercache und versucht es noch einmal.


Hilfe mit Makro
#1
Hallo,

ich bin absoluter Neuling was VBA angeht.
Jetzt habe ich eine Anforderung in Excel die sich wohl nur mit einem Makro lösen läßt.

Ich habe zwei Tabellenblätter.
In Blatt 1 gibt es die Spalte B mit folgenden Beispielwerten (ABC, DEF, ABC, XYZ). Werte können also mehrfach vorkommen.
IN Blatt 2 stehen in Spalte A erlaubte Werte, also z.B. ABC

Das Makro soll nun prüfen, ob der Zelleninhalt von Spalte B in Blatt 1 ebenso in Blatt 2 in Spalte A vorkommt.
Falls nicht soll die Zeile nicht gelöscht, sondern der Text"Fehler" eingesetzt werden.

Wäre toll wenn jemand weiterhelfen kann.
Antwortento top
#2
Hallo,

möglicherweise reicht auch folgende Formel

=WENN(ZÄHLENWENN(B1;Tabelle2!A:A);"Fehler";"")

Die Formel schreibst du z.B. in C1 und kopierst sie einfach nach unten.

Wenn das so zu verstehen ist,
Zitat:sondern der Text"Fehler" eingesetzt werden.
, dass dieser Text Fehler in die Spalte B statt dem bisherigen Wert eingetragen werden soll dann geht das tatsächlich nur mit einem VBA-Code.

Wenn es dir allerdings genügen würde diese Zelle einfach rot zu markieren dann könnte man wiederum mit einer Bedingten Formatierung arbeiten.
Gruß
Peter
Antwortento top
#3
Nein es muss leider ein Makro sein;-)

Im Prinzip funktioniert dies hier:

Sub ReplaceStrings()
Dim DoNotWant
Dim i As Long

DoNotWant = Array("The ", ".", ",", ":", ";", "'", "ABC", "DEF") '<-- extend as needed
Application.ScreenUpdating = False
With Columns("B") '<-- adjust to suit your column
For i = 0 To UBound(DoNotWant)
.Replace What:=DoNotWant(i), Replacement:="XXX", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next i
End With
Application.ScreenUpdating = True
End Sub

Schön wäre, wenn das was im Array steht eben in ein eigenes Tabellenblatt ausgelagert werden könnte.
Antwortento top
#4
(12.08.2014, 12:24)Ilsfeld110 schrieb: Schön wäre, wenn das was im Array steht eben in ein eigenes Tabellenblatt ausgelagert werden könnte.
Meinst du damit, dass sich das VBA-Array seine Werte aus einem definierten Bereich einer Tabelle holen soll?
Fall "ja", dann würde ich den Bereich als Liste/Tabelle einrichten und dort die Werte direkt auslesen/in das Array einlesen.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antwortento top
#5
Exakt so - ein klares JA;-)
Antwortento top
#6
Dann sollte das eine gute Grundlage sein:
In Blatt 2 (Tabelle2) definierst du die entsprechenden Werte als Liste bzw. Tabelle (Hängt von deiner Excel-Version ab).
Die bekommt dann typischerweise den Namen "Tabelle1". -> Bei Bedarf: [F5] und dann wird der Name aufgelistet.
Diesen Namen verwendest du als Range, siehe den Code hierunter.

Code:
Option Explicit
Option Base 1

Sub Verboten()
   Dim aNotGood
  
   aNotGood = Sheets("Tabelle2").Range("Tabelle1")
   MsgBox aNotGood(1, 1) 'Ergibt in deinem Beispiel "The"
End Sub

Diesen Code bindest du in den bereits vorhandenen ein (mit deinen Variablennanen Wink) -> Natürlich ohne die "Kontroll-Maßnahme der MsgBox)
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antwortento top
#7
in welchen vorhandenen code?
den von oben? das passt doch dann nicht...
Antwortento top
#8
wieso sollte das nicht passen? Huh

Code:
Option Explicit
Option Base 1

Sub ReplaceStrings()
   Dim DoNotWant
   Dim i As Long
  
   DoNotWant = Sheets("Tabelle2").Range("Tabelle1") '<-- extend as needed ### Passiert dank Tabelle automatisch
   Application.ScreenUpdating = False
   With Columns("B") '<-- adjust to suit your column
      For i = 0 To UBound(DoNotWant)
         .Replace What:=DoNotWant(i), Replacement:="XXX", LookAt:=xlPart, _
         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
         ReplaceFormat:=False
      Next i
   End With
   Application.ScreenUpdating = True
End Sub

Da ich deine Mappe nicht sehe, kann ich auch nur das Prinzip darstellen ...
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antwortento top
#9
Danke für den kompletten Code;-)
Trotzdem hakt es noch

Hast Du mir ein Beispiel was genau hier rein sollte? Also als "Tabelle2" und "Tabelle1".
DoNotWant = Sheets("Tabelle2").Range("Tabelle1")

Mein Tabellenblatt mit den erlaubten Werten heißt "Whitelist". Der Bereich in dem die erlaubten Werte stehen geht von A1 bis A23. Und die Tabelle heißt Tabelle3
Das Tabellenblatt das gegen die Werte geprüft werden soll heißt "Daten" und die Werte stehen in Spalte B (B1-B12769). Die Tabelle darin heißt Tabelle2

Wenn ich es jetzt richtig verstehe müßte folgendes im Code stehen:
DoNotWant = Sheets("Whitelist").Range("Tabelle3")
--> Das ergibt aber den Laufzeitfehler 9 (Index außerhalb des gültigen Bereichs).
Antwortento top
#10
Lies dir bitte noch einmal den TEXT in Beitrag #6 durch.
Sheets("Tabelleblatt-Name")
Range("automatisch vergebener Name der Tabelle/Liste")

Ohne Beispiel-Mappe (auch gerne mini ohne reale Daten) und xls-Version kann ich nicht weiter helfen, in Sachen Tabelle/Liste musst du dich belesen ... Mr. Goo ist da recht aukunftsfreudig Exclamation
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste