Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1576to1580
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
Spalten markieren anhand von Überschrift
24.08.2017 13:50:58
Überschrift
Hallo Excel-Tüftler Gemeinde,
ich habe mich dazu entschieden, mich im Forum zu registrieren und einen Beitrag zu verfassen, weil ich vor einer Aufgabe stehe, welche ich einfach auch nach Stunden nicht gelöst bekomme.
Ich habe eine Excel-Datei vorliegen mit verschiedenen Spalten. In der Spalte 8 stehen jeweils die Überschriften und dann entsprechend die Daten darunter. Ich möchte ein VBA-Makro einbinden, welches nach der Überschrift "Betrag" sucht, die gesamte Spalte markiert und mit einer anderen Spalte vergleicht.
Beispiel:
In der Spalte "Betrag" steht der Wert 5 €. Ich habe zuvor bereits das gesamte Sheed per Makro kopiert und invisible hinten drangefügt. Nun soll überprüft werden, ob bei den Werten unter "Betrag" eine Änderung vorgenommen wurde, bsp. aus ursprünglich 5 (wie auch in der Kopie gesichert zuvor gesichert) wurden 4 gemacht.
Dafür brauche ich eben ein Makro, welches nach der Zelle in welcher "Betrag" steht in Zeile 8 sucht und die Werte in der Spalte mit meiner Vergleichskopie per Makro vergleicht.
Ich hoffe, mir kann weitergeholfen werden, da dort wirklich meine Kenntisse aufhören :)
Grüße,
Simo7

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten markieren anhand von Überschrift
24.08.2017 15:22:46
Überschrift
Hallo Simo,
stellt sich die Frage, was passieren soll, wenn bei der Überprüfung unterschiedliche Werte festgestellt werden.
Gruß Werner
AW: Spalten markieren anhand von Überschrift
25.08.2017 19:18:35
Überschrift
Hallo Werner, die überprüfung soll durchgeführt werden, nachdem ein Button geklickt wurde. Wenn Unterschiede festgestellt wurden, soll eine MsgBox erscheinen, dass Änderungen vorgenommen worden sind. Wenn keine Veränderungen zur Vergleichskopie gefunden werden, soll die Meldung erscheinen, dass keine Änderungen festgestellt wurden.
Das wars dann auch, da die einzelnen Zellen in einer anderen Mappe bereits verformelt sind und die Änderungen automatisch vorgenommen werden. Es geht eher darum den Benutzer "zu warnen" dass etwas verändert wurde, was sich eben auch an entsprechender Stelle an den Berechnungen auswirken wird.
Ich habe mal die betreffenden Spalten mit dem Makrorekorder ausgewählt:
Sheets("Data Dez '15").Select
Range("AB34,I:I,J:J,K:K,L:L,M:M,N:N,O:O,P:P,Q:Q,R:R,S:S,T:T").Select
Range("T1").Activate
Weiß nur nun nicht, wie ich genau die selben Spalten mit der zuvor erstellten Kopie (Data Dez '15 (2)) vergleiche?
Hoffe auf Hilfe.
Grüße,
Simo7
Grüße,
Simo7
Anzeige
AW: Spalten markieren anhand von Überschrift
26.08.2017 01:33:27
Überschrift
Hallo Simo,
teste mal das folgende Makro. Das Makro gehört in ein allgemeines Modul.
Option Explicit
Public Sub Unterschiede()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim strBlatt1 As String, strBlatt2 As String
Dim loLetzte As Long, Zähler As Long, s As Long, z As Long
strBlatt1 = InputBox("Vergleichen von Blatt?...", "Tabellenblatt wählen")
If Not strBlatt1 = vbNullString Then
On Error Resume Next
Set ws1 = Worksheets(strBlatt1)
If Err.Number = 9 Then
MsgBox "Der Tabellenblattname ist nicht korrekt."
On Error GoTo 0
Exit Sub
End If
Else
Exit Sub
End If
strBlatt2 = InputBox("...mit Blatt? vergleichen", "Tabellenblatt wählen")
If Not strBlatt2 = vbNullString Then
On Error Resume Next
Set ws2 = Worksheets(strBlatt2)
If Err.Number = 9 Then
MsgBox "Der Tabellenblattname ist nicht korrekt."
On Error GoTo 0
Exit Sub
End If
Else
Exit Sub
End If
With ws1
loLetzte = .Cells(.Rows.Count, 9).End(xlUp).Row
For s = 9 To 20
For z = 2 To loLetzte
If .Cells(z, s)  ws2.Cells(z, s) Then
.Cells(z, s).Interior.ColorIndex = 4
Zähler = Zähler + 1
End If
Next z
loLetzte = .Cells(.Rows.Count, s + 1).End(xlUp).Row
Next s
If Zähler = 0 Then
MsgBox "Es konnten keine Unterschiede festgestellt werden."
Else
MsgBox "Es gibt in  " & Zähler & " Zelle/n" & "  Unterschiede" _
& vbLf & "zwischen den zwei Tabellenblättern."
End If
End With
End Sub
Deine Beispielmappe konnte ich mir leider nicht anschauen, da ich hier aktuell keine Datei mit Makros herunterladen kann.
Ich bin mal davon ausgegangen, dass in deinen Tabellenblättern in Zeile 1 Überschriften stehen und der Datenbereich in Zeile 2 beginnt. Wenn dem so nicht ist, dann müsste man das noch anpassen.
Ich habe das jetzt mal so gelöst, dass zunächst über Inputboxen abgefrag wird, welche Tabellenblätter miteinander verglichen werden sollen. Das hat den Vorteil, dass du da sehr flexibel bist.
Zudem werden die Zellen, die sich unterscheiden, im "Masterblatt" farblich markiert. Wenn das nicht gewünscht ist, dann einfach die Codezeile .Cells(z, s).Interior.ColorIndex = 4 einfach löschen.
Teste einfach mal.
Gruß Werner
Anzeige
AW: Spalten markieren anhand von Überschrift
28.08.2017 15:47:34
Überschrift
Hallo Werner,
ich habe gerade Deinen Code getestet und er funktioniert einwandfrei, vielen Dank für Deine Mühe!
Es ist nur so, dass der Benutzer nicht gefragt werden soll, welche Datenblätter miteinander verglichen werden sollen. Ich habe versucht Deinen Code entsprechend umzubauen, da er mit dem Vergleich ja tut was er soll, jedoch leider ohne Erfolg. Die Eingabe ist zu Fehleranfällig (Man weiss nie wer vor dem Rechner sitzt) und es sollen ja wirklich auch nur identische Monate miteinander nach Änderungen mit der Kopie nach dem öffnen der Datei verglichen werden (also Januar mit Januar, Februar mit Februar usw.) um festzutsellen, ob seit dem öffnen der Datei eine Änderung in den entsprechenden Monaten vorgenommen wurde. Ich würde sonst mal eben nennen, welche Arbeitsblääter es sind, evtl. kann man das ja noch entsprechend umbauen?
Also es soll verglichen werden:
HR Data Dez '15 mit HR Data Dez '15(2)
HR Data Jan mit HR Data Jan (2)
HR Data Feb mit HR Data Feb (2)
HR Data Mär mit HR Data Mär(2)
HR Data Apr mit HR Data Apr (2)
HR Data Mai mit HR Data Mai (2)
HR Data Jun mit HR Data Jun (2)
HR Data Jul mit HR Data Jul (2)
HR Data Aug mit HR Data Aug (2)
HR Data Sep mit HR Data Sep (2)
HR Data Okt mit HR Data Okt (2)
HR Data Nov mit HR Data Nov (2)
HR Data Dez mit HR Data Dez (2)
So soll also nach dem Klick auf den Button eine automatische Überprüfung durchgeführt werden. Es kommen auch nur die genannten Arbeitsblätter in dieser Kombination in Frage. Vielleicht lässt sich dies ja noch entsprechend anpassen? Wäre wirklich klasse, wenn das gehen würde.
Vielen Dank.
Grüße,
Simo7
Anzeige
AW: Spalten markieren anhand von Überschrift
28.08.2017 17:45:03
Überschrift
Hallo Simo,
habe ich das richtig verstanden, der Code soll grundsätzlich alle Monatsblätter mit den entsprechenden Kopien vergleichen?
Ist denn gesichert, dass immer alle Monatsblätter und die entsprechenden Kopien vorhanden sind?
Gruß Werner
AW: Spalten markieren anhand von Überschrift
28.08.2017 17:53:10
Überschrift
Hallo Werner,
Ja, ist es. Die Monatsblätter befinden sich in der Datei und können hädnisch vom Benutzer verändert werden. Ich habe es geschafft ein Makro zu schreiben, welches eine Kopie von allen Monatsblättern generiert und Invisible als Arbeitsblätter ablegt. Dieses Makro ist im AutoStart hinterlegt, sodass diese Kopie erstellt wird, sobald der Benutzer die Datei öffnet. Nur eben ein Makro welches den Vergleich wie oben beschrieben erstellt habe ich nicht hinbekommen.
Grüße,
Simo
Anzeige
AW: Spalten markieren anhand von Überschrift
29.08.2017 11:46:30
Überschrift
Hallo Simo,
ich hoffe mal, du hast in deiner Mappe nicht noch andere Blätter, deren Name auch mit HR Data beginnen. Die Namen der Blätter, die geprüft werden müssen, wähle ich nämlich über den Namensteil HR Data aus.
Teste mal, aber natürlich mit einer Kopie deiner Arbeitsdatei:
Option Explicit
Public Sub Prüfung()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim loLetzte As Long, s As Long, z As Long, Zähler As Long
Dim Blattname As String, Meldung As String
For Each ws1 In ThisWorkbook.Worksheets
If Left(ws1.Name, 7) = "HR Data" Then
If Mid(ws1.Name, 9, 7) = "Dez '15" Then
If Right(ws1.Name, 3)  "(2)" Then
Set ws2 = Worksheets("HR Data Dez '15 (2)")
With ws1
loLetzte = .Cells(.Rows.Count, 9).End(xlUp).Row
If loLetzte = 1 Then loLetzte = 2
For s = 9 To 20
For z = 2 To loLetzte
If .Cells(z, s)  ws2.Cells(z, s) Then
.Cells(z, s).Interior.ColorIndex = 4
Zähler = Zähler + 1
End If
Next z
If Zähler > 0 Then
Blattname = ws1.Name & " / " & ws2.Name
Meldung = Meldung & vbLf & Blattname & "  " _
& Zähler & "  Zelle/n"
Zähler = 0
End If
loLetzte = .Cells(.Rows.Count, s + 1).End(xlUp).Row
Next s
End With
End If
ElseIf Right(ws1.Name, 3)  "(2)" Then
Select Case Mid(ws1.Name, 9, 3)
Case Is = "Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul" _
, "Aug", "Sep", "Nov", "Dez"
Set ws2 = Worksheets(ws1.Name & " (2)")
With ws1
loLetzte = .Cells(.Rows.Count, 9).End(xlUp).Row
If loLetzte = 1 Then loLetzte = 2
For s = 9 To 20
For z = 2 To loLetzte
If .Cells(z, s)  ws2.Cells(z, s) Then
.Cells(z, s).Interior.ColorIndex = 4
Zähler = Zähler + 1
End If
Next z
If Zähler > 0 Then
Blattname = ws1.Name & " / " & ws2.Name
Meldung = Meldung & vbLf & Blattname _
& "              " & Zähler & "  Zelle/n"
Zähler = 0
End If
loLetzte = .Cells(.Rows.Count, s + 1).End(xlUp).Row
Next s
End With
Case Else
End Select
End If
End If
Next
If Meldung = "" Then
MsgBox "Es konnten keine Änderungen festgestellt werden."
Else
MsgBox "Änderungen in folgenden Blättern:" & vbLf & Meldung
End If
End Sub
Gruß Werner
Anzeige
AW: Spalten markieren anhand von Überschrift
30.08.2017 12:08:13
Überschrift
Hallo Werner,
vielen Dank für Deine Mühe, Dein Makro funktioniert! Ich habe mich dennoch dazu entschlossen, Dein ersten Vorschlag etwas umzubauen und hart zu kodieren, welche Sheets mit einander vergleichen werden sollen. Der Code ist um einiges kürzer und es erfüllt seinen Zweck.
Vielen Dank für die schnelle Hilfe, ohne Dich wäre es nicht möglich gewesen!
Grüße,
Simo7
Danke für die Rückmeldung, aber....
30.08.2017 12:18:55
Werner
Hallo Somo,
...na ja, da habe ich dann wohl etwas für den Mülleimer gearbeitet.
Gruß Werner
AW: Danke für die Rückmeldung, aber....
30.08.2017 14:27:46
Simo7
Hallo Werner,
nein gar nicht, es ist schließlich ein Kreuzprodukt aus beidem entstanden :)
Das liegt tatsächlich darin begründet, dass Du die Mappe nicht vorliegen hattest und somit
gar nicht wissen konntest, welche kleinen Fallstricken sich so in den einzenlnen Worksheets verbergen.
Wie gesagt, habe auf Deinem ersten Makro aufbauend beides verwendet und entsprechend angepasst! (Mit Gefahr auf Spaghetti-Code, aber es erfüllt seinen Zweck und das ist für mich mit meinen dürftigen Kenntnissen das wichtigste) Somit ist im Papierkorb nichts gelandet.
Danke nochmal!!
Grüße,
Simo7
Anzeige
na dann noch viel Spaß damit. o.w.T.
30.08.2017 21:28:16
Werner

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige