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

Fehler mit Match

Fehler mit Match
18.01.2017 08:41:39
Gregor
Hallo
Ich suche mit folgendem Code nach einer Zeile und Spalte:
With Worksheets("Test")
For Start = 1 To 8
Zug = .Cells(2 + Start, 1)
For x = 1 To AnzTage
Datum = .Cells(1, 5 + x)
With Worksheets("Muster")
.Select
Zeile_Source = .Application.Match(Zug, .Columns(5), 0)
If Not IsNumeric(Zeile_Source) Then GoTo weiter
Spalte_Source = .Application.Match(Datum, Rows(1), 0)
End With
x = x + 1
Next x
weiter:
Next Start
End With
1)Bei der Suche nach Datum (Spalte_Source) erhalte ich immer den Fehler 2042, obwohl im Blatt Test wie auch im Blatt Muster die Zellen dasselbe Datum-Format aufweisen und das gesuchte Datum in Zeile 1 vorhanden ist. Woran liegt das?
2)Bei der Suche nach Zug kann es einen Fehler geben, weil nicht vorhanden. Ich versuchte den Fehler mit On Error GoTo weiter abzufangen, läuft aber bei Fehler dennoch zum nächsten Code. Deshalb neu mit If not IsNumeric.
3) Muss ich bei .Application.Match vorher das Blatt selektieren (erhielt sonst Fehler)
Danke für die Hilfe und Gruss
Gregor

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler mit Match
18.01.2017 08:52:14
hary
Moin
Ohne Mappe wird es schwer.
Wenn du mit with arbeitest mus ein Punkt vor Rows/Columns.
Datum bei Match ist eine Umwandlung in Long besser.
Application.Match(Clng(Datum), .Rows(1), 0)

Der Punkt vor Rows weist Der Row das Blatt der With Anweisung zu.
gruss hary
AW: Fehler mit Match
18.01.2017 08:53:13
ChrisL
Hi Gregor
Ich denke der Punkt vor Application muss weg, dafür braucht es evtl. einen Punkt vor Rows. Wenn du richtig referenzierst brauchst du die Tabelle zu selektieren.
Um zu prüfen, ob ein Wert vorhanden ist (weil sonst Fehler), würde ich ZÄHLENWENN d.h. WorksheetFunction.CountIf() verwenden.
Solltest du Anschlussfragen haben, bitte ich dich eine Beispieldatei ins Forum zu laden.
cu
Chris
Anzeige
AW: Fehler mit Match
18.01.2017 09:23:17
Gregor
Hallo
Danke einmal für die rasche Antwort.
Das mit Application.Match(Zug, .Columns(5), 0)funktioniert somit natürlich, ohne zu selektieren.
Hingegen erhalte ich bei Application.Match(CLng(Datum), .Rows(1), 0) den Fehler Typen unverträglich. Evt. muss ich schon bei Datum = .Cells(1, 5 + x) ein Format setzen. Wie kann ich das lösen?
Die Datei ist zu gross, ich müsste einen Auszug generieren.
Danke und Gruss
Gregor
AW: Mach 'nen Auszug gruss owT
18.01.2017 09:29:36
hary
.
AW: Fehler mit Match
18.01.2017 09:30:09
ChrisL
Hi Gregor
Ja dann musst du halt einen Auszug generieren. Das Leben ist kein Ponyhof :P
Formatierung und Datentyp sind zwei paar Schuhe. Entscheidend ist der Datentyp.
cu
Chris
Anzeige
AW: Fehler mit Match
18.01.2017 12:44:38
Gregor
Hallo zusammen
Ich habe nun einen Auszug generiert und hochgeladen.
https://www.herber.de/bbs/user/110669.xlsm
Das Makro weist leider noch einige Fehler auf.
Folgendes möchte ich machen:
In der Zieldatei je "Zug" die Spalten F bis BK bzw. BQ (Datum, je nach Monat) aus der Quelldatei übertragen. In der Quelldatei befindet sich "Zug" in Spalte E. "Zug" kann in der Quelldatei auch nicht vorkommen, dann weiter.
Mit arrDaten will ich jeweils die Daten aus der Quelldatei Zeile_Zug von Spalte_Monat bis Spalte_Monat + AnzTage einlesen und dann in die Zieldatei beim entsprechenden Zug mit WorksheetFunction.Transpose(arrDaten) einfügen.
Und das ganze sollte möglichst variabel aufgebaut sein, weil das Jahr (rückwirkende Auswertung) ändert.
Über eure Unterstützung wäre ich sehr dankbar.
Danke und Gruss
Gregor
Anzeige
AW: Fehler mit Match
18.01.2017 13:52:48
ChrisL
Hi Gregor
Problem 1 (Wert nicht vorhanden) würde ich wie folgt lösen:
If WorksheetFunction.CountIf(.Columns(5), Zug) = 0 Then Exit For
Der Goto-Befehl ist dann hinfällig. Allerdings solltest du vermutlich die Redimensionierung vom Array nach unten schieben, so dass nur dimensioniert wird, wenn auch tatsächlich ein Wert vorhanden ist.
Problem 2 Fehlende Deklarationen
Dim Datum As Long
Ja, ausnahmsweise nicht als Date sondern Long
Problem 3 Schreibfehler
Zeile_Monat
ZeileMonat
(lässt sich mit "Option Explicit" vermeiden!)
Problem 4 Match
VERGLEICH ist perfekt für eindeutige Treffer. In deinem Fall gibt es aber Mehrfachtreffer (1-3 Treffer pro Zug). Im Ziel hast du aber nur 2 Felder je Zug.
cu
Chris
Anzeige
AW: Fehler mit Match
18.01.2017 15:38:10
Gregor
Hoi Chris
Vielen Dank für deine Vorschläge, ich habe diese in der neuen Musterdatei nun umgesetzt.
Mein arrDaten stimmt aber noch nicht, ich erhalte einen Typen Fehler. Kannst du das auch noch anschauen.
https://www.herber.de/bbs/user/110674.xlsm
Vielen Dank und Gruss
Gregor
AW: Fehler mit Match
18.01.2017 16:09:13
ChrisL
Hi Gregor
Mir ist das konkrete Endresultat unklar. Wie findest du mit Match den richtigen Zug, wenn es 1-3 mögliche Treffer gibt. Warum ein mehrdimensionales Array, warum überhaupt ein Array und nicht einfach kopieren...
Ohne den Sinn vom Array zu verstehen, ich glaube das Problem beginnt hier:
arrDaten(1, 1) = .Range(.Cells(Zeile_Zug, Spalte_Datum), .Cells(Zeile_Zug, Spalte_Datum + AnzTage))
Innerhalb des Array weist du einem einzigen Feld (1,1) einen ganzen Bereich zu.
cu
Chris
Anzeige
AW: Fehler mit Match
18.01.2017 17:08:29
Gregor
Hallo Chris
Jeder Zug kommt nur einmal oder nie vor, es gibt also ein oder keinen Treffer.
Das Endresultat ist tatsächlich dass die Einträge der Zellen (Zug, von/bis Datum) kopiert werden und in der Zieldatei beim Zug eingefügt werden. Ich dachte, das geht mit einem Array am schnellsten (Originaldatei viele Zeilen). Ich werde es nun mit copy/paste machen, eine gute Idee. Zu meinem Verständnis wäre es noch gut, wenn ich wüsste, weshalb mein Array nicht funktioniert.
Vielen Dank für die Hilfe
Gregor
AW: Fehler mit Match
18.01.2017 18:10:52
ChrisL
Hi Gregor
Ein Array/Datenfeld musst du dir wie eine Tabelle vorstellen. arrDaten(1, 1) entspricht quasi der Zelle A1. z.B.
Zelle A1 = Bereich X1:Y1
...ergibt keinen Sinn. Die Anzahl "Zellen" im Array sollen mit der Anzahl im Bereich übereinstimmen. Oder aber du sprichst das ganze Array (nicht eine bestimmte "Zelle) an.
arrDaten = Range(...).Value
.Value weil du die Werte aus dem Bereich und nicht die Range selber übergibst. Und transponieren müsstest du auch noch, weil Tabellen-Zeile horizontal und Array (eindimensional) vertikal.
Array können sehr sinnvoll sein, wenn du mit dem Array etwas anstellst (insbesondere Berechnungen laufen schnell). In deinem Fall müsstest du einen Tabellen-Bereich in ein Array transponieren, nur damit du es gleich wieder zurück transponierst und in die andere Tabelle überträgst. Schneller wird das Makro m.E. nicht (langsamer auch nicht), nur komplizierter :)
Falls du im Original Tabellenformeln verwendest, schalte nebst bereits vorhandener EnableEvents und ScreenUpdating noch die automatische Neuberechnung (Application.Calculation) auf manuell und am Ende wieder auf automatisch.
Übrigens "Preserve" braucht es vermutlich auch nicht. Damit bleiben die Werte bei einer Neudimensionierung erhalten, aber du schreibst immer wieder neue Werte in das Array. Ich denke Redim ohne Preserve müsste reichen.
cu
Chris
Anzeige
AW: Fehler mit Match
19.01.2017 13:35:51
Gregor
Hallo Chris
Vielen Dank für die Erläuterungen zum Array.
Gruss Gregor

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige