Excel (VBA) farbig Markieren und anschließend kopieren?

4 Antworten

Sub einfaerben()
  Dim rRef As Range
  On Error Resume Next
  For Each rRef In Range("A1:A100")
    If Not IsEmpty(rRef) Then
      Tabelle2.Range(rRef.Value).Interior.Color = vbYellow
    End If
  Next
  On Error GoTo 0
End Sub
Woher ich das weiß:Berufserfahrung – Programmierer
KaiserWilhelmXL 
Fragesteller
 17.01.2017, 13:46

Kannst du mir das erläutern? Da tut sich nichts bei mir.

0
Suboptimierer  17.01.2017, 13:48
@KaiserWilhelmXL

Du musst den Bereich A1:A100 noch bei dir auf deine Zellreferenzen anpassen. Auch den Tabellennamen "Tabelle2" musst du noch anpassen.

0
KaiserWilhelmXL 
Fragesteller
 17.01.2017, 14:07
@Suboptimierer

Erstmal danke für deine Zeit. Leider funktioniert es danach auch nicht. Ich weiß ohne eine Excel-Datei nur an hand der wagen Infos von mir ist da fast unmöglich.

Aber zum Verständnis deiner Programmieren? Woher weiß er denn in welchem Tabellenblatt gesucht und eingefärbt werden soll?

0
Suboptimierer  17.01.2017, 14:13
@KaiserWilhelmXL

Das Tabellenblatt, auf dem die Schaltfläche liegt ist das, wo die Zelladressen stehen (A1:A100)

Eingefärbt wird in meinem Beispiel auf Tabelle2.

Das Kopieren habe ich vergessen (siehe Oubiy)

0
KaiserWilhelmXL 
Fragesteller
 17.01.2017, 14:17
@Suboptimierer

Er sucht die komplette Datei ab, wo dann irgendwas von den Werten zwischen A1 und A100 steht? Sorry irgendwie vestehe ich das Prinzip nicht und leider funktioniert es auch nicht. Sorry.

0
Ninombre  18.01.2017, 07:37
@KaiserWilhelmXL

Es kommt noch darauf an, wo du den Code im VBA Editor hinterlegst, d.h. ob in einem Modul oder zu einem Tabellenblatt. Das oben genannte sollte funktionieren, wenn es bei Tabelle1 steht, d.h. wo die Angaben wie A15, A193 stehen.

Ansonsten nur ein Punkt ergänzen:

Sub einfaerben()
Dim rRef As Range
On Error Resume Next
For Each rRef In tabelle1.Range("A1:A100")
If Not IsEmpty(rRef) Then
Tabelle2.Range(rRef.Value).Interior.Color = vbYellow
End If
Next
On Error GoTo 0
End Sub

Es wird der Bereich A1:A100 auf dieser Tabelle 1 definiert und jede Zelle in diesem Bereich geprüft. Wenn sie nicht leer ist, wird der Inhalt (der ein Zellbezug wie A1, A33 etc.) sein muss, als Adresse für das Färben auf Tabelle2 verwendet.

Wenn deine Zellbezüge nicht in A1:A100 stehen, musst Du das anpassen, ebenso wie die beiden Stellen mit Tabelle1, Tabelle2. Da muss der tatsächliche Namen des Tabellenblatts rein.

Ansonsten macht das Ding das gleiche wie mein Entwurf, ist nur sauberer aufgesetzt von suboptimierer.

0
Ninombre  18.01.2017, 10:41
@Ninombre

so, mit dem Kopieren inklusive könnte das so aussehen:

Sub einfaerben_kopieren()
Dim rRef As Range
On Error Resume Next
For Each rRef In Range("A1:A10")
If Not IsEmpty(rRef) Then
Tabelle2.Range(rRef.Value).Interior.Color = vbYellow
Tabelle2.Range(Tabelle2.Range(rRef.Value), Tabelle2.Range(rRef.Value).Offset(0, 17)).Copy
Tabelle3.Range(rRef.Value).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
Next
On Error GoTo 0
End Sub
1

Vorschlag:

Schalte dem Makro-Recorder ein
führe die benötigten Schritte händisch einmal aus (für die erste Lokalisierung, A4)
Beende die Aufzeichnung
Stelle uns (in einer neuen Antwort) dieses Makro zur Ansicht.

Gruß aus Berlin

Woher ich das weiß:Hobby – Jahrelanges programmieren.

So 100%ig klar ist mir das noch nicht.
WO stehen die Zellpositionen denn? Stehen die da als Text?
Angenommen sie stehen in Ermittlungen!A1:A4.
Dann im Modul dieses Tabellenblattes:

Sub Farbig()
Dim Bereich As Range
Dim Zelle As Range
Set Bereich = Range("A1:A4")
With Sheets("Markierungen")
For Each Zelle In Bereich
.Range(Zelle.Value).Interior.ColorIndex = 4
Next Zelle
End With
End Sub

Sub Kopieren()
Dim Zeile As Long
Dim Bereich As Range
Dim Zelle As Range
Set Bereich = Range("A1:A4")
With Sheets("Markierungen")
For Each Zelle In Bereich
Zeile = Zeile + 1
.Range(Zelle.Value).Copy Sheets("Prüfung").Cells(Zeile, 1)
Next Zelle
End With
End Sub

Das kopiert erstmal nur die Zelle aus Spalte A nach Prüfungen.
Leider habe ich jetzt keine Zeit mehr, das auf die Spalten A:R zu erweitern.
Schau erstmal, ob Dir das so schon weiter hilft.
Sonst frage nochmal detailliert nach.
Um die Erweiterung auf mehr Spalten kann ich mir erst morgen kümmern.
Aber vielleicht hilft hier ja auch ein anderer Experte weiter.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
KaiserWilhelmXL 
Fragesteller
 17.01.2017, 14:04

Erstmal danke für deine Bemühungen.

Die Zellpositionen stehen in dem Tabellenblatt "Ermittlung" in der Spalte A1:A55

Hierbei zeigt er mir ein Fehler an:

.Range(Zelle.Value).Copy Sheets("Prüfung").Cells(Zeile, 1)
0

Schritt 1, nur um sicherzustellen, dass ich das richtig verstehe:

i = 1
While sheets(1).Cells(i, 1).Value <> ""
Sheets(2).Range(Sheets(1).Cells(i, 1).Value).Interior.Color = vbYellow
i = i + 1
Wend

wenn die Zellangaben (A4,A1517 etc). von A1 bis Axxx stehen

Im Grunde kann man das Markieren doch auch überspringen, oder?

KaiserWilhelmXL 
Fragesteller
 17.01.2017, 14:00

Theoretisch hast du Recht, man könnte diesen Schritt auch überspringen. Denn müssten man die Spalte A:S von dem Tabellenblatt "Markierung" , unter berücksichtigung der erforderlichen Zeilen, die sich bei dem Tabellenblatt "Ermittlung" befinden, in das Tabellenblatt "Prüfung" ebendfalls in dem Bereich A:S reinkopieren.
 Klingt das verständlich? Danke dir.

Bei deinem VBA sagt er mir das ein Objekt erforderlich ist. Sheets hatte ich zuvor schon angepasst.

0
KaiserWilhelmXL 
Fragesteller
 18.01.2017, 07:11

Hast du noch eine Idee?

0
Ninombre  18.01.2017, 10:48
@KaiserWilhelmXL

ich hab die Variante inkl. Kopieren bei Suboptimierers Antwort als Kommentar ergänzt, weil mir sein Ansatz als Basis besser gefällt

0