Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


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.
to 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
to 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.
to 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!
to top
#5
Exakt so - ein klares JA;-)
to 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!
to top
#7
in welchen vorhandenen code?
den von oben? das passt doch dann nicht...
to 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!
to 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).
to 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!
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Hilfe gesucht Makro / VBA Wiiinnniii 7 132 31.10.2016, 22:55
Letzter Beitrag: Wiiinnniii
  Makro Hilfe Markus.Jens 16 534 07.09.2016, 05:16
Letzter Beitrag: Kuwer
  Brauche Hilfe bei einem Excel Makro Cyprezz 2 391 02.04.2016, 10:56
Letzter Beitrag: RPP63
  Brauche Hilfe - automatisches Kopieren/Makro? basti1912 0 223 31.03.2016, 11:01
Letzter Beitrag: basti1912
  Auswertung von .txt mit Hilfe Makro Globalcomponents 1 825 01.06.2015, 15:33
Letzter Beitrag: schauan

Gehe zu:


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