Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kopieren und als Wert einfügen VBA

Forumthread: Kopieren und als Wert einfügen VBA

Kopieren und als Wert einfügen VBA
24.06.2016 09:49:31
Fritz_W

Hallo Forumsbesucher,
ich bitte um eure Hilfe in folgender Angelegenheit:
Mittels Drehfeld verändere ich einen Wert in Zelle B1.
Ich möchte nun erreichen, dass bei jeder Veränderung des Wertes in Zelle B1 folgendes passiert:
Es soll der Zellbereich der Zeile 3 bis 42 der Spalte (im Bereich der Spalten Y bis EV) kopiert und danach als Wert wieder in den gleichen Zellbereich eingefügt werden, indem zum Zeitpunkt der Veränderung des Wertes in Zelle B1 in der Zeile 3 der Spalten des Zellbereichs (also im Zellbereich Y3:EV3) die höchste Zahl steht.
Beispiel: steht zum Zeitpunkt der Ausführung des Makros im Zellbereich Y3:EV3 in der Zelle AA3 die größte Zahl, soll AA3:AA42 kopiert und als Wert wieder in AA3:AA42 eingefügt werden.
Für Eure Unterstützung besten Dank im Voraus.
mfg
Fritz

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren und als Wert einfügen VBA
24.06.2016 11:46:14
RPP63
Hallo!
Formularsteuerelement?
Dies löst kein Change-Ereignis aus.
Nimm ActiveX
Gruß Ralf

AW: Kopieren und als Wert einfügen VBA
24.06.2016 12:58:47
Fritz_W
Hallo Ralf,
vielen Dank,
mit ActiveX kenn ich mich nicht aus, notfalls würde mir aber auch ein "einfaches" Makro ausreichen,
um den entsprechenden Bereich zu kopieren und danach als Werte in den gleichen Bereich wieder einfügen.
frdl. Grüße
Fritz

Anzeige
Spalten Kopieren -Wert
24.06.2016 16:22:00
Michael
Hi zusammen,
anbei "einfaches Makro", das auf etwas Vorarbeit im Tabellenblatt zurückgreift:
https://www.herber.de/bbs/user/106500.xlsm
Option Explicit
Sub machen()
Dim a
Application.Calculation = xlCalculationManual
a = Cells(3, Range("G2")).Resize(40)
Cells(3, Range("G2")).Resize(40) = a
Application.Calculation = xlCalculationAutomatic
Range("g4") = Range("g4") + 1
End Sub
Es hakelt ein bißchen, weil ich Zufallszahlen als Formel verwende; mit echten Daten/Formeln sollte es besser funktionieren.
Allerdings: ist es wirklich so, daß die vorhandenen Formeln nach einem Ersetzen des höchsten Wertes in der Zeile 3 (in den verbleibenden Spalten) HÖHERE Werte erzeugen? Sonst wird nämlich IMMER nur die eine Spalte ersetzt.
Außerdem: Dezimalwerte sollten unbedingt gerundet werden (z.B. auf die 5. Nachkommstelle).
Schöne Grüße,
Michael

Anzeige
AW: Spalten Kopieren -Wert
24.06.2016 18:05:42
Fritz_W
Hallo Michael,
da ich heute abend noch weg gehe, kann ich mich erst morgen mit der Datei und deinen Ausführungen beschäftigen. Ich werde mich aber im Verlauf des morgigen Tages hier auf jeden Fall noch einmal melden.
Einstweilen vielen Dank für Deine Unterstützung.
Viele Grüße
Fritz

Anzeige
AW: Spalten Kopieren -Wert
25.06.2016 10:50:42
Fritz_W
Hallo Michael,
wie gestern schon angekündigt, will ich mich an dieser Stelle noch zu Deinem Vorschlag äußern.
Leider komme ich mit dem Code und der hochgeladenen Beispielmappe nicht klar.
Möglicherweise habe ich mein Anliegen nicht verständlich genug erklärt und habe nun ein schlechtes Gewissen ob der vielen Mühe, die Du investiert hast um mir zu helfen.
Ich habe die Tabelle nun leicht verändert und hoffe, dass ich das, was ich nun noch zur Umsetzung meines Anliegens brauche, verständlicher erkläre:
Ich benötige jetzt ein Makro, das prüft, in welcher Zelle im Zellbereich "Z2:EZ2" eine Zahl steht (nur eine Zelle in diesem Zellbereich enthält eine Zahl, die anderen Zellen - als Formelergebnis - den Wert ""). Die Spalte, in der die Zahl steht, soll im Bereich der Zeilen 3:42 kopiert und dann in den als Wert wieder in den gleichen Zellbereich wieder eingefügt werden.
Vielleicht kannst Du mir noch einmal helfen.
Nochmals vielen Dank für die Bemühungen.
Viele Grüße
Fritz

Anzeige
inwiefern?
25.06.2016 12:27:13
Michael
Hi Fritz,
wenn Du ausführen würdest, wo das Problem liegt, könnte ich Dir vielleicht was dazu sagen.
"Komme nicht klar" ist etwas arg allgemein.
Das nur Deine nächste Antwort vorwegnehmend...
Anbei geänderte Datei: https://www.herber.de/bbs/user/106518.xlsm
In den "Gold" markierten Zellen stehen Formeln, und zwar:
B1: hier wird eine Zufallszahl zwischen 26 und 156 (korrespondierend mit den gewünschten Spalten-Nummern) gezogen. Diese Zahl wird, wenn Du die Datei öffnest, neu errechnet (oder wenn Du F9 drückst oder wenn Du irgendwo in der Tabelle was eingibst oder änderst usw.)
Z2:SZ2: hier wird (nur und nur da) in der Spalte mit der Nr. (aus B2) die Nr. angezeigt, sonst "" - irgendwie muß ich Deine Vorgabe "nur eine Zelle in diesem Zellbereich enthält eine Zahl" ja simulieren.
G1: bildet die Summe aus Z2:SZ2; nachdem nur EINE Zahl vorhanden ist, entspricht die Summme dem Wert dieser einen Zahl.
G2: durchsucht Z2:SZ2 nach der in G1 gefundenen Zahl.
Das "Machen 1" verwendet G1 und G2, "Machen 2" macht genau das Gleiche, halt eben in reinem VBA ohne Verwendung irgendwelcher Zellen.
Die MsgBoxen kannste ja wieder rauswerfen (bis auf die mit der Fehlermeldung "nicht gefunden").
Viel Spaß & Grüße,
Michael

Anzeige
AW: inwiefern?
25.06.2016 13:36:57
Fritz_W
Hallo Michael,
bitte um Entschuldigung für meine (nicht beabsichtigten) Unzulänglichkeiten.
Aber jetzt funktioniert das Ganze so wie ich mir das erhofft hatte. In meine Datei habe dazu ich nur das Makro "Machen 2" einfügen müssen.
Ganz herzlichen Dank
Viele Grüße
Fritz

na fein,
25.06.2016 14:00:39
Michael
Hi Fritz,
freut mich, wenn es rennt.
Aber noch mal der Hinweis: .find KANN Probleme beim Finden haben, wenn es sich um Werte mit zu vielen bzw. noch nicht gerundeten Nachkommastellen handelt.
D.h., falls es sich nicht ohnehin um ganze Zahlen handelt, umklammere mit runden, z.B.:
=RUNDEN(DeineFormel;8)
Happy Exceling,
Michael

Anzeige
AW: na fein,
25.06.2016 17:52:37
Fritz_W
Hallo Michael,
nochmals Dank für die Erläuterungen.
Schönes WE
Fritz

;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Kopieren und als Wert einfügen mit VBA in Excel


Schritt-für-Schritt-Anleitung

Um in Excel VBA eine Zelle zu kopieren und nur die Werte wieder einzufügen, kannst Du folgende Schritte ausführen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu:

    • Klicke im Menü auf Einfügen und wähle Modul.
  3. Füge den VBA-Code ein:

    • Kopiere den folgenden Code in das Modul:
    Option Explicit
    
    Sub WerteKopieren()
       Dim maxZelle As Range
       Dim kopierBereich As Range
       Dim ws As Worksheet
    
       Set ws = ThisWorkbook.Sheets("DeinBlattname") ' Blattname anpassen
       Set maxZelle = ws.Range("Y3:EV3").Find(Application.WorksheetFunction.Max(ws.Range("Y3:EV3")), LookIn:=xlValues)
    
       If Not maxZelle Is Nothing Then
           Set kopierBereich = ws.Range(maxZelle.Offset(0, 0), maxZelle.Offset(39, 0)) ' Bereich 3:42
           kopierBereich.Value = kopierBereich.Value ' Nur Werte einfügen
       Else
           MsgBox "Keine maximale Zelle gefunden."
       End If
    End Sub
  4. Passen den Code an:

    • Ersetze "DeinBlattname" durch den Namen des Arbeitsblatts, in dem Du arbeitest.
  5. Führe das Makro aus:

    • Gehe zurück zu Excel und drücke ALT + F8, wähle WerteKopieren und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Keine maximale Zelle gefunden."

    • Überprüfe, ob im Bereich Y3:EV3 tatsächlich Werte vorhanden sind. Wenn nur leere Zellen vorhanden sind, wird dieser Fehler angezeigt.
  • Fehler: Der Bereich wird nicht korrekt kopiert.

    • Stelle sicher, dass der angegebene Bereich von Y3 bis EV3 korrekt ist und dass die Zellen, die kopiert werden sollen, auch tatsächlich Werte enthalten.

Alternative Methoden

Eine alternative Methode ist die Verwendung von Excel-Formeln, um die Werte direkt zu kopieren, ohne VBA zu verwenden. Zum Beispiel kannst Du folgende Formel in eine Zelle eingeben:

=WENN(Y3=MAX(Y3:EV3), Y3, "")

Diese Formel überprüft, ob die Zelle Y3 die maximale Zahl im Bereich ist, und gibt sie zurück, wenn dies der Fall ist.


Praktische Beispiele

Hier ist ein praktisches Beispiel für das Kopieren und Einfügen von Werten:

  1. Angenommen, Du hast Zahlen in den Zellen Y3 bis EV3.
  2. Der Code sucht die höchste Zahl in diesem Bereich.
  3. Wenn der Wert in Zelle AA3 die größte Zahl ist, wird der Bereich AA3:AA42 kopiert und nur als Wert in AA3:AA42 eingefügt.

Zusätzlich kannst Du mit dem Code die Ausführung anpassen, um beispielsweise nur Dezimalwerte zu runden, bevor Du sie einfügst.


Tipps für Profis

  • Verwende Application.WorksheetFunction.Round, um Dezimalwerte direkt im Makro zu runden:

    kopierBereich.Value = Application.WorksheetFunction.Round(kopierBereich.Value, 5) ' Rundet auf 5 Nachkommastellen
  • Nutze Fehlerbehandlung im VBA-Code, um unvorhergesehene Fehler zu vermeiden:

    On Error GoTo Fehlerbehandlung
    ' Dein Code hier
    Exit Sub
    
    Fehlerbehandlung:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass nur Werte kopiert werden? Um sicherzustellen, dass nur Werte kopiert werden, kannst Du im VBA-Code Value verwenden, wie im obigen Beispiel gezeigt.

2. Welches Excel-Version wird benötigt? Der oben dargestellte VBA-Code funktioniert in Excel 2010 und neueren Versionen. Achte darauf, dass du die Makros in den Excel-Optionen aktivierst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige