Microsoft Excel

Herbers Excel/VBA-Archiv

Zellen mit bestimmten Inhalt markieren und Werte in Liste kopieren

Betrifft: Zellen mit bestimmten Inhalt markieren und Werte in Liste kopieren von: Pascal
Geschrieben am: 26.09.2020 13:34:37

Hallo,

ich versuche gerade folgenden Arbeitsschritt zu automatisieren, um Zeit zu sparen und zu verhindern, dass meine Mitstudenten durch einfaches Copy&Paste aus Versehen Formatierungen übertragen.

1) Auf dem Arbeitsblatt "Beispielauswertung" alle Zeilen in Spalte M und N markieren, in denen in Spalte N einen der Werte in "Dropdown!A6:A21" enthält.
2) Diese Mehrfachauswahl möchte ich dann als Werte an das Ende der Liste auf dem Arbeitsblatt "Liste #1" kopieren. Den Hyperlink dazu habe ich in der Zelle "Beispielauswertung!C23" schon erstellt

Leider ist das meine erste Excel in der ich mit normalen Formeln nicht weiterkomme...
Wäre diese Automatisierung umsetzbar und kann jemand einen Online-Kurs empfehlen, in dem die nötigen Grundlagen unterrichtet werden?

https://www.herber.de/bbs/user/140454.xlsm

Beste Grüße
Pascal

Betrifft: AW: Zellen mit bestimmten Inhalt markieren und Werte in Liste kopieren
von: Dieter Klemke
Geschrieben am: 26.09.2020 16:43:52

Hallo Pascal,

Du könntest die Übertragung mit dem folgenden Programm machen.
Sub Übertragen()
  Dim letzteZeileQ As Long
  Dim letzteZeileZ As Long
  Dim wsD As Worksheet ' Blatt "DropDown"
  Dim wsQ As Worksheet ' Quelle
  Dim wsZ As Worksheet ' Ziel
  Dim zeileD As Long
  Dim zeileQ As Long
  Dim zeileZ As Long
  Dim zf As String
  
  Set wsD = ThisWorkbook.Worksheets("DropDown")
  Set wsQ = ThisWorkbook.Worksheets("Beispielauswertung")
  Set wsZ = ThisWorkbook.Worksheets("Liste #1")
  letzteZeileQ = wsQ.Cells(wsQ.Rows.Count, "M").End(xlUp).Row
  letzteZeileZ = wsZ.Cells(wsZ.Rows.Count, "A").End(xlUp).Row
  zeileZ = letzteZeileZ + 1
  For zeileQ = 7 To letzteZeileQ
    If Not IsEmpty(wsQ.Cells(zeileQ, "N")) Then
      zf = wsQ.Cells(zeileQ, "N")
      For zeileD = 6 To 21
        If wsD.Cells(zeileD, "A") = zf Then
          wsQ.Cells(zeileQ, "M").Resize(, 2).Copy
          wsZ.Cells(zeileZ, "A").PasteSpecial Paste:=xlPasteValues
          zeileZ = zeileZ + 1
          Exit For
        End If
      Next zeileD
    End If
  Next zeileQ
  wsZ.Activate
  wsZ.Cells(zeileZ, "A").Select
End Sub

Das Programm könnte durch eine Worksheet_FollowHyperlink-Prozedur gestartet werden.
Allerdings lässt sich das bei dir nicht einrichten, weil dein Blatt geschützt ist.
Die übertragenen Daten werden in dem Tabellenblatt "Beispielauswertung" offenbar durch bedingte Formatierung unsichtbar.
Da sich in das geschützte Blatt auch keine Schaltfläche zum Programmstart einfügen lässt, startest du das Programm über das Register "Entwicklertools" > Gruppe "Code" > "Makros".

Mit freundlichen Grüßen
Dieter

Betrifft: AW: Zellen mit bestimmten Inhalt markieren und Werte in Liste kopieren
von: Dieter Klemke
Geschrieben am: 26.09.2020 16:49:54

Die Arbeitsmappe mit dem Programm sollte auch noch dabei sein:

https://www.herber.de/bbs/user/140456.xlsm

Betrifft: AW: Zellen mit bestimmten Inhalt markieren und Werte in Liste kopieren
von: Pascal
Geschrieben am: 27.09.2020 08:22:22

Hallo Dieter,

vielen Dank, das Programm funktioniert einwandfrei!
Ich hatte gehofft den Code zu verstehen und auf den Bereich Menükomponenten erweitern zu können. Leider werde ich aus dem Code nicht schlau, was aufgrund fehlender VBA-Kenntnisse nicht weiter verwunderlich ist. Hast du Zeit und Lust den Code, gerne gegen Entschädigung für den Zeitaufwand, zu erweitern, sodass folgende Funktion erfüllt wird?

Über eine Schaltfläche auf dem Arbeitsblatt „Vorlage“ (Die auch für anders benannte Kopien der Vorlage funktionieren muss, da für jedes neue Ernährungsprotokoll ein neues Blatt angelegt wird) soll folgender Vorgang gestartet werden:
1) Auf dem Arbeitsblatt mit der Schaltfläche:
Alle Zeilen in Spalte M und N markieren, in denen in Spalte N einen der Werte in 'Dropdown'!A6:A21 enthält UND in denen der Wert (Name) in Spalte M nicht bereits in 'Liste #1'!A:A vorkommt(Zeilen mit doppelt vorkommenden Namen [Spalte M] sollten im Optimalfall auch nur einmal markiert werden).
2) Diese Mehrfachauswahl kopieren und als Werte an das Ende der Liste auf dem Arbeitsblatt "Liste #1" einfügen.
3) Alle Zeilen in Spalte P bis V markieren, in denen alle Zellen einen Wert enthalten UND in denen der Wert (Name) in Spalte P nicht bereits in 'Liste #2'!A:A vorkommt(Zeilen mit doppelt vorkommenden Namen [Spalte P] sollten im Optimalfall auch nur einmal markiert werden).
4) Diese Mehrfachauswahl kopieren und als Werte an das Ende der Liste auf dem Arbeitsblatt "Liste #2" einfügen.
5) Die Zelle BC15 auf dem Arbeitsblatt mit der Schaltfläche als aktive Zelle wählen

Ich frage nur ungern nach einer Komplettlösung, benutze Excel aber erst seit einem Jahr durch meinen HiWi-Job und bin mit Makros noch völlig überfragt…
Diesmal vergesse ich auch nicht die Datei zu entsperren und die bedingte Formatierung, die übertragene Werte unsichtbar macht zu entfernen. Die Beispiele in der Vorlage sollten mein Anliegen noch einmal veranschaulichen.

https://www.herber.de/bbs/user/140463.xlsm

Beste Grüße
Pascal

Betrifft: AW: Zellen mit bestimmten Inhalt markieren und Werte in Liste kopieren
von: Dieter Klemke
Geschrieben am: 27.09.2020 14:53:25

Hallo Pascal,

ich denke, das ist kein Problem, aber ich komme erst morgen dazu.
Eine Frage zum gewünschten Ergebnis: Sollen die gefundenen Werte wirklich markiert werden oder reicht es, wenn sie übertragen werden? Für die Übertragung ist nämlich keine vorherige Selektion erforderlich.
Wir können auch gern über meine angehängte E-Mail korrespondieren.

Viele Grüße und noch einen schönen Sonntag
Dieter