Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1624to1628
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

VBA Excel verschlugt sich/trägt falsch ein

VBA Excel verschlugt sich/trägt falsch ein
31.05.2018 11:50:29
christoph
Mein Code soll in alle Spalten von D bis zur letzten beschriebenen Spalte von Reihe 30 bis 580 prüfen ob ein Wert in Spalte B steht.
Steht in der Zeile ein Wert in Spalte B soll er in die Zeile von Spalte D bis zur letzten beschriebenen die Werte aus dem Bereich Range D29 bis zur letzten Spalte in Zeile 29 kopieren.
Mein Code dafür sieht folgendermaßen aus.
For Wochentag = 30 To 580
If Range("B" & Wochentag) "" Then
If RaZelle Is Nothing Then
Set RaZelle = Range("D" & Wochentag, Cells(Wochentag, letzteSpalte))
Else
Set RaZelle = Union(RaZelle, Range("D" & Wochentag, Cells(Wochentag, letzteSpalte)))
End If
End If
Next
RaZelle.Value = Range("D29", Cells(29, letzteSpalte)).Value
Nun funktioniert der Code für Zeile 30 - 60 (B ist einheitlich beschrieben)
bis 66 keine Eintragung
ab 67 - 85 verdreht er die Spalten aus der Zeile 29 (also statt in jede Zeile 1 2 3 4 5 6
schreibt er in die erste 6 6 6 6 6 6 6
in die zweite 5 5 5 5 5 5 5
dritte 4 4 4 4 4 4
also er vertauscht Zeile und Spalte
ab Zeile 86 schreibt er #NV (obwohl die Zellen gleichermaßen formatiert sind)
bis Zeile 94
Dann kommen keine Eintragung bis 101
102 - 132 sind perfekt
und dann selbes Fehler bild mit vertauschten Spalten und #NV
Dieses Fehler Bild zieht sich durch bis ans Ende in dieser Reihenfolge.
Wenn ich den For Bereich verkleinere also nur
For 30 to 60
und For 61 to 90
...... und/oder die leeren Spalten auslasse formatiert er es in den selben Spalten die zuvor falsch waren weiterhin falsch.
Jemand ne Erklärung?

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Bitte Beispieldatei owT.
31.05.2018 12:42:29
ChrisL
.
[A3:C3,A5:C50] = [A1:C1]?
31.05.2018 13:59:38
ChrisL
Hi Christoph
Wenn du mal in Zelle A1:C1 z.B. die Werte 1, 2, 3 einträgst. Dann folgende Testmakros:
Sub t()
Range("A3:C3,A5:C50") = Application.Transpose(Range("A1:C1").Value)
End Sub

Sub tt()
Range("A3:C3,A5:C50") = Range("A1:C1").Value
End Sub
Je nach Variante wird A3:C3 oder A5:C50 falsch eingetragen.
Ich bin mir nicht sicher, aber ich denke weil die Bereiche A=B nicht übereinstimmen, interpretiert Excel selber, ob horizontal oder vertikal eingesetzt wird. Nach welchem Schema die Excelinterpretation abläuft kann ich auch nicht sagen, aber eine Einflussmöglichkeit wird es nicht geben.
Als Lösung fällt mir nur ein, die zusammenhängenden Bereiche oder die Spalten einzeln abzuarbeiten.
cu
Chris
Anzeige
wusstest nen schnellen alternativ weg?
31.05.2018 14:39:34
christoph
Ok sehe was du meinst!
Aber:
Warum meinst du, dass die Bereiche A=B nicht übereinstimmen?
Eigentlich sollte er doch
immer Zeilen von den Spalten D bis W zwischenspeichern
und am Ende Werte aus der Zeile 29; D bis W die Werte reinkopieren.
Also selbe Größebereich, selber Zelltyp
Problem ist wenn ich die zusammenhängenden Bereiche nehme hat er in den selben Bereichen den Fehler auch wenn die Bereiche deutlich kleiner sind
Wenn ich die Spalten einzeln abarbeite ist er bei ca. 5sekunden was mich nervt :(
AW: wusstest nen schnellen alternativ weg?
31.05.2018 15:04:50
ChrisL
Hi
Eine fundierte Erklärung habe ich nicht. Sonst müsstest du die Frage offen kennzeichnen, vielleicht weiss da jemand anders Bescheid.
Range("A3:C3,A5:C50") = Range("A1:C1").Value
A = B
Die beiden Datenfelder haben unterschiedliche Dimensionen/Grössen.
5 Sekunden dauert so etwas nicht. Die Performanceeinbusse holst du wieder rein, wenn du die beiden Schleifen zu einer zusammenfasst ;)
cu
Chris
Anzeige
AW: wusstest nen schnellen alternativ weg?
31.05.2018 16:35:00
christoph
Danke dir erstmal,
erstmal Feierabend und Steuererklärung :( morgen gehts weiter
Frage offen Kennzeichnen?!
Du meinst unterschiedliche Größen
A3:C3 - A5:C50 ist größer als A1:C1?!
Wenn ja ok verstanden :D ;)
Schönen abend noch und bis morgen
gruß chris
AW: wusstest nen schnellen alternativ weg?
31.05.2018 17:56:06
ChrisL
Hi
Bevor du auf "Vorschau" drückst, die Checkbox aktivieren.
Und Teil 2: ja.
Auftrag: Fülle mit jeweils einem Apfel-, zwei Birnen- und drei Aprikosenbäumen einen ganzen Obstgarten. Das Ergebnis wird ohne explizite Anweisung ein zufälliges Muster sein.
Etwas sachlicher:
Ich denke dass Excel die Bereiche als Array/Datenfelder zwischen speichert.
Dimensionierung/Grösse:
Dim MyArray1(1 To 3) As Variant          ' eindimensional A1:C1
Dim MyArray2(5 To 50, 1 To 3) As Variant ' zweidimensional A5:C50
MyArray2 = MyArray1                      ' Excel interpretiert nach bestem Wissen und Gewissen
Das Hauptproblem sind aber die nicht zusammenhängenden Bereiche. Beispielsweise kannst du damit manuell kein Copy und Paste-Special machen (gibt explizite Meldung bei Paste, dass es nicht geht). In VBA gibt es die Warnung nicht, dafür setzt Excel ein #NV (no value), wenn sich Array und Tabellenbereich nicht decken. Ein zusammenhängendes Array wird auf einen nicht zusammenhängenden Bereich geklatscht.
Mit 12 x .End(xlDown) hüpfst du schnell die Blöcke durch, Anfang und Ende identifizieren. ScreenUpdating = False und ich schätze der Performance Unterschied ist gering.
Eigentlich kennst du anhand der Monate die Anzahl Zeilen bereits. Mit etwas rechnen kannst du ohne Zugriff auf Zellen den Bereich ermitteln.
Zur allgemeinen Entschlackung hilft vielleicht noch (Feiertage):
https://support.office.com/de-de/article/arbeitstag-funktion-f764a5b7-05fc-4494-9486-60d494efbf33
https://msdn.microsoft.com/en-us/vba/excel-vba/articles/worksheetfunction-workday-method-excel
cu
Chris
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige