Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
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
Inhaltsverzeichnis

Bestimmte Werte per VBA übertragen

Bestimmte Werte per VBA übertragen
13.11.2023 14:10:41
Fritz_W
Hallo Forumsbesucher,
in Tabelle 1 wird in den Zellen des Zellbereichs M2:M501 über eine Formel als Ergebnis die Zahl 0 oder 1 oder auch der Wert "" ausgegeben. Ich möchte nun per Makro die Zellen mit der Zahl 0 als Zahlenwert in die Zelle der jeweils gleiche Zeile der Spalte I im gleichen Tabellenblatt kopieren.
Beispiel: enthalten die Zellen M6, M11, M123 und M200 den Wert 0. Somit soll die 0 in die Zellen I6, I11, I123 und I200 kopiert werden. Eventuell in anderen Zellen des Zellbereichs I2:I501 enthaltene Werte sollen jedoch nicht verändert werden.

Für eure Unterstützung besten Dank im Voraus.

mfg
Fritz

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmte Werte per VBA übertragen
13.11.2023 14:28:08
Yal
Hallo Fritz,

verstehe ich richtig: wenn 0 in Spalte M, dann Inhalt der Spalte I soll durch Ergebnis der darin enthaltenen Formel überschrieben?

Sub Wert_festreinschreiben()

Dim i

For i = 2 To 501
If Cells(i, "M") = "0" Then Cells(i, "I").Value = Cells(i, "I").Value
Next
End Sub


VG
Yal
AW: Bestimmte Werte per VBA übertragen
13.11.2023 14:50:50
Fritz_W
Hallo Yal,

vielen Dank für Deine Unterstützung.
Der Code funktioniert so leider nicht wie gewünscht, möglicherweise habe ich mein Anliegen doch nicht exakt genug beschrieben.
Versuchs deshalb noch einmal:
Die Zellen des Zellbereichs M2:M501 enthält eine Formel, die als Ergebnis entweder 0, 1 oder "" liefert. Es soll nun aus den Zellen, die als Formelergebnis die Zahl 0 enthalten, die (Zahl) 0 - also nicht die Formel - in die entsprechende Zelle (gleiche Zeile) der Spalte I des gleichen Tabellenblatts (Tabelle 1) kopiert werden. Mit den anderen Zellen der spalte M soll nichts passieren. Es soll also, wenn z.B. die Zelle M9 als Formelergebnis die Zahl 0 enthält, in die Zelle I9 eine 0 kopiert werden usw.

LG Fritz
Anzeige
Warum nicht mit Formel?
13.11.2023 15:45:02
Frank
Hallo Fritz

Darf man fragen, warum das per VBA passieren soll und nicht mit einer Formel?

Grüsse
Frank
AW: Warum nicht mit Formel?
13.11.2023 16:12:14
Fritz_W
Hallo Frank,

ja natürlich, weil in die Spalte I - in bestimmten Ausnahmefällen - auch andere Werte direkt eingegeben werden.

mfg Fritz
AW: Bestimmte Werte per VBA übertragen
13.11.2023 14:39:11
Piet
Hallo

anbei einer kleiner Code, der diese Aufgabe erfüllt. Du kannst den Range auf Zeile 501 festlegen, oder mit lz1 = LastZelle nach der letzten Zelle in Spalte M suchen, wenn die Tabelle dynamisch wächst.
Sollten in Spalte I Formeln stehen, werden die durch die 0 überschrieben! Die sind dann verloren!
Oder du müsstest zu beginn des Makros die Formeln für alle Zeilen wiederherstellen.

mfg Piet
Anzeige
AW: Bestimmte Werte per VBA übertragen
13.11.2023 16:22:52
daniel
HI
wenn in der Spalte I schon Werte stehen, die bei 1 oder "" in Spalte M nicht geändert werden sollen, dann gehts auch nur über VBA.
es gibt mindestens vier Möglichkeiten.
a) per Schleife über alle Zellen:
dim Zelle as Range
dim Zelle as range

for each Zelle in Range("M2:M501")
if Zelle.value = 0 Then Zelle.Offset(0, -4).value = Zelle.Value
Next


b) Autofilter
With Range("M1:M501")

.Autofilter Field:=1, criteria1:="0"
.Offset(1, -4).Resize(.Rows.Count - 1, 1).SpecialCells(xlcelltypevisible).Value = 0
.Autofilter
end with


c) Formel mit Hilfsspalte, setzt voraus, dass in I Konstanten stehen und keine Formeln:
With Range("N2:N501")

.FormulaR1C1 = "=IF(RC13=0,0,RC9)"
.offset(0, -5).value = .value
.Clearcontents
end with


d) per Array, auch hier dürfen in Spalte I keine Formeln stehen.
Dim arrI, arrM

Dim z As Long
With Range("I2:I501")
arrI = .Value
arrM = .Offset(0, 4).Value
For z = 1 To UBound(arrI, 1)
If arrM(z, 1) = 0 Then arrI(z, 1) = 0
Next
.Value = arrI
End With


Variante a) ist bei großen Datenmengen langsam
Variante b) kann bei sehr großen Datenmengen unzuverlässig werden (braucht aber +10.000 Zeilen) und falls es vorkommen kann, dass 0 nicht vorkommt, müsste man das noch prüfen, weil es sonst zu einem Fehler kommt.
Varianten c) und d) sind sehr schnell auch bei großen Datenmengen.
c) braucht halt die Hilfsspalte (was aber kein Problem sein sollte), kommt dafür aber ohne Schleifen und ohne zusätzliche Variablen aus, was den "Komfort" für den Programmierer erhöhen kann.
a) und b) hätten noch den Vorteil, dass die anderen Zellen nicht verändern, so dass hier auch Formeln stehen dürfen (wobei man dann überlegen sollte, ob man dann das ganze nicht nicht schon in die Formel einbaut, also: =Wenn(M2=0;0;bisherige Formel für I2)

Gruß Daniel
Anzeige
AW: Bestimmte Werte per VBA übertragen
13.11.2023 16:46:37
Fritz_W
Hallo Daniel,

großartig, vielen Dank insbesondere auch für die - für mich absolut notwendigen - Erläuterungen.

mfg Fritz
AW: Bestimmte Werte per VBA übertragen
13.11.2023 16:58:25
GerdL
(Ganz) leere Zellen geben auch den Value 0 zurück, die Text-Eigenschaft unterscheidet.
AW: Bestimmte Werte per VBA übertragen
13.11.2023 18:10:18
Fritz_W
Hallo Gerd,

danke für den Hinweis, wieder was gelernt!
Ihr seid einfach super!
mfg Fritz
AW: Bestimmte Werte per VBA übertragen
13.11.2023 14:40:10
Piet
Nachtrag, Code vergessen

  • Sub Null_kopieren()
    Dim AC As Range, lz1 As Long
    Cells(Rows.Count, "M").End(xlUp).Row
    For Each AC In Range("M2:M501") 'oder ("M2:M" & lz1)
    If AC.Value = 0 Then AC.Offset(0, -4) = 0
    Next AC
    End Sub
  • Anzeige
    AW: Bestimmte Werte per VBA übertragen
    13.11.2023 14:59:46
    Fritz_W
    Hallo Piet,
    auch Dir vielen Dank für Deine Unterstützung.
    Der Code bringt mir folgende Fehlermeldung:
    Laufzeitfehler 438:
    Objekt unterstützt diese Eigenschaft oder Methode nicht,
    Bezieht sich auf die Codezeile --> Cells (Rows.Count ...

    mfg Fritz
    AW: Bestimmte Werte per VBA übertragen
    13.11.2023 15:06:41
    Piet
    Hallo

    Sorry, mein Fehler, habe die Variable vergessen. So ist es richtig, wenn du mit LastZelle arbeiten willst:
    lz1 = Cells(Rows.Count, "M").End(xlUp).Row - Mit Range("M2:M501") sollte es auf jeden Fall klappen!

    mfg Piet
    AW: Bestimmte Werte per VBA übertragen
    13.11.2023 15:16:48
    Fritz_W
    Hallo Piet,

    perfekt! Jetzt funktioniert es wie gewünscht.
    Vielen Dank!

    mfg Fritz
    Anzeige
    AW: Bestimmte Werte per VBA übertragen
    13.11.2023 15:24:30
    GerdL
    Bist du sicher, Fritz?

    Sub Unit()
    Dim i As Long
    For i = 2 To 501
    If Cells(i, "M").Text = "0" Then Cells(i, "I").Value = 0
    Next
    End Sub

    Gruß Gerd
    AW: Bestimmte Werte per VBA übertragen
    13.11.2023 16:05:45
    Fritz_W
    Hallo Gerd,

    super, dieser Code funktioniert auch.
    Danke!

    mfg Fritz
    AW: Bestimmte Werte per VBA übertragen
    13.11.2023 16:56:43
    Yal
    Jetzt habe ich verstanden, dass ich "Werte in die Zelle kopieren" und "Werte in der Zelle kopieren" durcheinandergebracht habe (bin eben ausländischer ;-)
    Und ich fragte mich ständig: wohin will er dann die Werte kopieren?

    Aber Fritz, hättest Du meinen Code gelesen, in Deutsch und laut gesprochen, wärst Du sehr schnell von
    Sub Wert_festreinschreiben()
    
    Dim i
    For i = 2 To 501
    If Cells(i, "M") = "0" Then Cells(i, "I").Value = Cells(i, "I").Value
    Next
    End Sub

    auf
    Sub Wert_festreinschreiben()
    
    Dim i
    For i = 2 To 501
    If Cells(i, "M") = "0" Then Cells(i, "I").Value = 0
    Next
    End Sub

    gekommen.

    Eine Lösung zu haben, ist gut. Sie zu verstehen, besser. Daraus soviel wissen rausnehmen, dass die nächste Frage selber gelöst wird, der Jackpot.

    VG
    Yal

    Anzeige
    AW: Bestimmte Werte per VBA übertragen
    14.11.2023 14:41:24
    Fritz_W
    Hallo Yal,

    habe eben erst Deinen letzten Beitrag gesehen-
    Wenn man die Lösung bekommt und sie dann auch versteht, ist das zweifellos optimal. Dazugelernt habe ich jedenfalls (hoffe ich zumindest).
    Ich bin einfach immer wieder dankbar für die vielen großartigen Helfer in diesem Forum.

    Ich bin sicher, dass ich wieder einmal eure Unterstützung benötige.

    mfg
    Fritz

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige