Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA - beim Kopieren Format nicht ändern

Forumthread: VBA - beim Kopieren Format nicht ändern

VBA - beim Kopieren Format nicht ändern
14.04.2026 21:45:29
Christian
Hallo,

ich bitte euch um Hilfe bei etwas, bei dem selbst ChatGPT am verzweifeln ist...
Die Datei lässt sich leider wegen 30 MB schwer hochladen und der Löwenanteil wird auch für das Makro gebraucht,
aber vielleicht hat ja doch jemand eine Idee.


            For i = 1 To lastRow

Dim cellValue As Variant
cellValue = ws.Cells(i, 4).Value
If cellValue = 1 Then
textB = ws.Cells(i, 2).Value
count2 = 0
For k = i + 1 To lastRow
If ws.Cells(k, 4).Value = 2 Then count2 = count2 + 1 Else Exit For
Next k
If count2 > 0 Then neuesBlatt.Cells(freieZeile, 3).Resize(count2, 1).Value = UCase(textB)
ElseIf cellValue = 3 Then
textC = ws.Cells(i, 3).Value
countVorDrei = 0
For k = i - 1 To 1 Step -1
If ws.Cells(k, 4).Value = 2 Then countVorDrei = countVorDrei + 1 Else Exit For
Next k
If countVorDrei > 0 Then
neuesBlatt.Cells(freieZeile, 1).Resize(countVorDrei, 1).Value = UCase(textC)
freieZeile = freieZeile + countVorDrei
End If
End If
Next i

targetRow = ersteFreieZeile
For i = 1 To lastRow
If ws.Cells(i, 4).Value = 2 Then
neuesBlatt.Cells(targetRow, 2).Value = UCase(ws.Cells(i, 3).Value)
targetRow = targetRow + 1
End If
Next i

' Duplikate nach jedem Blatt entfernen
Dim lrAlle As Long
lrAlle = neuesBlatt.Cells(neuesBlatt.Rows.count, "A").End(xlUp).Row
If lrAlle > 1 Then
With neuesBlatt
.Range("A1:C" & lrAlle).RemoveDuplicates Columns:=Array(2, 3), Header:=xlNo
End With
End If


das mal der betreffende Codeabschnitt. Mein Problem ist wie bekomme ich es hin, dass die Dinge die in Spalte A des neuen Blatts geschrieben werden, wirklich 1:1 übernommen werden, also z.b. nicht aus 12/12/12 der 12.12.2012 gemacht wird oder aus SEPTEMBER 1923 der 01.09.1923 oder aus 3% 0,03.
Um nur ein paar Beispiele zu nennen.

Danke
Christian


Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
VBA - Format mitgeben!
14.04.2026 21:57:49
Sigi.21
Hallo Christian,

die Zellen in Excel sind normalerweise als "Standard" formatiert.
D.h., wenn 12/12/12 eingetragen wird, macht Excel ein Datum daraus ( 12.12.1912). Wen du das nicht willst, musst du die Zelle(n) vor dem eintragen des .Values erst als "TEXT" formatieren, dann wird auch Text eingetragen.
Das gleiche gilt für "SEPTEMBER 1923" (TEXT)und auch "3%" (Format Prozent!)

Gruß Sigi
Anzeige
VBA - beim Kopieren Format nicht ändern
14.04.2026 22:40:20
daniel
Hi
Excel wird immer versuchen, einen Text, der in eine Zelle geschrieben wird und wie eine Zahl, ein Datum oder eine Formel aussieht, diesen Text in eben jeniges zu wandeln.
um das zu verhindern und zu erreichen, das der Text Text bleibt, gibt es zwei Möglichkeiten:

a) die Zellen vorher mit dem Zahlenformat TEXT formatieren, das sieht in VBA dann so aus, diese Zeile müsstest du irgendwo zu beginn einfügen, irgendwo zwischen Zuweisung der Variablen und dem Einfügen der Werte:
neuesBlatt.Range("A:C").numberformat = "@"



b) man stellt vor den einzugebenden Text ein Hochkomma ' , dann weiß Excel dass das nachfolgende Text sein soll und nicht gewandelt werden darf.
also im Prinzip so:
neuesBlatt.Cells(freieZeile, 3).Resize(count2, 1).Value = "'" & UCase(textB)

das musst du überall machen, wo du Texte in Zellen schreibst.
das Hochkomma wird dann im Ergebnis nicht mehr angezeigt.

Ich persönlich bevorzug Variante b) weil des da einfacher ist, das nur für die tatsächlich betroffenen Zellen zu machen.

Gruß Daniel
Anzeige
Formatierung Zieltabelle
15.04.2026 14:04:15
Marc
Wenn sich in der Zieltabelle in den Entsprechenden Zellen/Zeilen/Spalten immer ein gleiches Format ist (nach dem Einfügen) Formatiere doch einfach die Endtabelle so wie du sie brauchst.


Sprich wenn in Zelle A1 IMMER eine % Zahl steht, formatiere sie vorher so und füge dann per VBA einfach den Wert rein..
Wenn ich Spalte B immer Datum steht, formatiere die Spalte nach deinem Wünschen vor...
Wenn in Zeile 3 immer ein Text steht, entsprechend formatieren

Deine Daten, die du kopierst müssen ja mit einer gewissen Logik aufgebaut sein, so das sich ein Muster erkennen läßt wo was steht.
Wenn in der Ziel Tabelle an gleichen Stellen wie in der Ursprungstabelle die gleichen Daten (nur selektiert) stehen.. könnte es sinn machen, die Ursprungstabelle kwasi zu kopieren mit allen Formatierungen und dann nur die Zellinhalte zu löschen, schon hast du alle Formatierungen..

Es ist sowieso sinnvoll, ähnliche Daten entsprechend zu Paketen zu bündeln und entsprechend an zu ordnen.


Anzeige
AW: Formatierung Zieltabelle
16.04.2026 16:20:32
Christian
Hallo Marc,

das ist bestimmt möglich, aber im Vergleich zu meiner jetzigen Lösung sehr mühsam.
Ich hab inzwischen festgestellt, dass ich die ' an falscher Stelle im Makro eingefügt hatte, an der richtigen Stelle löst es all meine Probleme.

Trotzdem danke
Christian
ChatGPT
14.04.2026 22:47:55
Christian
Hallo Daniel,

den genauen Code muss ich jetzt mühsam versuchen aus all den CGPT Versuchen rauszuholen, aber das mit dem Hochkomma, die Idee hatte ich auch schon. Nur C. Vorschlag hatte zu sowas wie '0,03 statt 3% geführt. Das mit dem Format zu Beginn werde ich jetzt mal testen.

Danke
Christian
Anzeige
wird noch was dauern
14.04.2026 23:05:33
Christian
das Problem tritt schon bei den Texten auf, die ins neue Blatt kopiert werden, also musste ich auch das Makro ändern dass diese erstellt.
Das nochmal laufen zu lassen, wird aufgrund großer Downloads aus dem Internet ein paar Stunden dauern. Melde mich dann morgen wieder

Gruß
Christian
Anzeige
ChatGPT ersetzt kein Wissen
14.04.2026 23:25:46
daniel
naja, das kommt jetzt darauf an.

du holst dir hier die Werte, die in die Zelle geschrieben werden sollen, in eine Variable:
textB = ws.Cells(i, 2).Value

damit liest du den unformatierten Zellwert aus der Zelle und das ist, in deinem Fall 0,03, was über das Zahlenformat "0%" als Prozentzahl angezeigt wird.

in dem Fall müsstest du aber den Text so auslesen, wie angezeigt wird
textB = ws.Cells(i, 2).Text


die Grundsatzfrage an diese Stelle ist, was du eigentlich tun willst.
willst du
a) formatiere Zahlenwerte übertragen, und dabei das Zahlenformat mit übernehmen ?
b) Werte, die keine Zahlen oder Datum sind, aber wie solche aussehen übertragen, das könnten beispielsweise Kapitelangaben sein (Kapitel 1.2.3 )

wenn du Zahlenwerte inklusive Zahlenformat übertragen willst, dann so:
- angezeigten Textwert aus der Quellzelle in die Variable vom Typ Text übertragen
- Textwert ohne jegliche vorherige Formatierung und auch ohne Hochkomma in die Zelle einfügen, und zwar in die .FormulaLocal-Eigenschaft.
Excel wird hierbei die Formatierte Zahl erkennen und Zahlenwert und Format korrekt eintragen.
FormulaLocal muss sein, damit Dezimalzahlen oder Datumswerte richtig erkannt werden (sonst wird amerikanisch interpretiert, dh Komma = Tausenderzeichen)
dim textB as string

...
textB = ws.Cells(i, 2).Text
...
neuesBlatt.Cells(freieZeile, 3).Resize(count2, 1).FormulaLocal = textB


eine andere Variante wäre, dass du die Zelle per Copy-Paste überträgst, hierzu speicherst du sie zuerst in einer Rangevariabeln und kopierst dann Wert und Zahlenformat in einem Schritt:
dim textB as Range

...
set textB = ws.Cells(i, 2)
...
textB.Copy
neuesBlatt.Cells(freieZeile, 3).Resize(count2, 1).PasteSpecial xlpastevaluesandnumberformats


Gruß Daniel
Anzeige
ChatGPT ersetzt kein Wissen
14.04.2026 23:38:37
Christian
Hallo Daniel,

kurz gesagt, das Makro hat mehrere Teile, u.a. eins dass die Daten aus dem Internet runterlädt und eins, dass die Daten wie gewünscht verteilt und weiterverarbeitet.
Ich will einfach nur, dass der Text, so wie er im Internet stand auch nachher in Excel steht, egal welches Format es hat.

Mir war aufgefallen im Nachhinein, dass schon beim runterladen es falsch eingetragen wurde und entsprechend ich auch machen konnte was ich wollte im neuen Blatt.
Deshalb lass ich das Makro nochmal neu laufen mit deinem Rat ein ' davorzusetzen und ich schaue dann jetzt erstmal ob jetzt die Daten richtig in die Mappe geschrieben werden.

Danke auf jeden Fall für deine Erklärung.
Und ja du hast ja recht C. ersetzt kein Wissen.

Anzeige
Rückmeldung
14.04.2026 23:57:54
Christian
das ' an der Stelle wo die Daten heruntergeladen werden, hat das Problem gelöst.
Vielen Dank
Christian
VBA - Format mitgeben!
14.04.2026 22:12:18
Christian
Hallo Sigi,

danke für den Hinweis, aber ich bin leider immer noch ratlos, was ich dafür jetzt am Code ändern muss

Danke
Christian
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18