Clever-Excel-Forum

Normale Version: Tabellenblatt auswerten Werte kopieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Geschätztes Forum,

ich benötige Hilfe bei der Auswertung einer Tabelle.

Die datei Rohdaten erstelle ich aus einer pdf-Datei. Nach kopieren der benötigten Daten, Umwandlung in .txt und öffnen
mit Excel, bekomme ich die Daten so aufbereitet hin.
Meine Absicht ist, die Rohdaten in Analyse neu zu überführen. Für Analyse neu habe ich ein Auswertemakro.
Bisher muss ich die Daten händisch eintragen.

In Rohdaten stehen die Flugziele mit Code und Land (Beispiel: Zeile 1, 11 etc.)
In Spalte A, jeweils unter den Flugziel stehen die jeweiligen Flugtage in verschiedenen Formaten.
Beispiele 1xx45xx: die Zahlen stehen für die Wochentage 1= Montag, 2=Dienstag etc.
In der Spalten F steht das Anfangsdatum des Zeitraumes in dem am jeweiligen Flugtag ein Flug stattfindet.
In Spalte G das Enddatum des Zeitraumes.

Der Code müsste folgendes tun:
In "Rohdaten" die Flugziele herausfiltern und in "Analyse neu" kopieren. Ich habe ich der "Analyse neu" händisch eingetragen
wie das aussehen soll.
Dann soll "Rohdaten" Spalte A nach den Flugtagen in Abhängigkeit vom Zeitraum aus den Spalten F und G ausgewertet werden. In "Analyse neu" soll
dann am jeweiligen Tag zum jeweiligen Flugziel der Inhalt von "Rohdaten" Spalte B eingetragen werden.

Wer weiß Rat?

Gruß

tmessers
Hallo,

der folgende Code liest die Namen der Flughäfen aus der Datei "Rohdaten":


Code:
Sub Fen()
F0 = Application.Transpose(Range("A1:A100"))
For i = 1 To UBound(F0)
   If IsEmpty(F0(i)) Then F0(i) = "xx"
Next i
F1 = Filter(F0, "xx", False)
Debug.Print Join(F1, ", ")
End Sub


Zu Testzwecken wird ins Direktfenster geschrieben.

mfg
@Fennek

Danke, das passt. Im Direktfenster werden die Namen ausgeworfen.
Wie bekomme ich die Namen nun einzeln in Spalten geschrieben?
Hallöchen,

im Code von Fennek hast DU schon eine Schleife, wo er die Einträge einzeln abarbeitet
Code:
For i = 1 To UBound(F0)
   If IsEmpty(F0(i)) Then F0(i) = "xx"
Next i

Ausgeben im Direktfenster tut er die Daten mit
Code:
F1 = Filter(F0, "xx", False)
Debug.Print Join(F1, ", ")

In eine Zelle schreibt man Daten so:
Cells(1,1).Value = "irgendwas"

Du könntest jetzt in einer Schleife die Einträge einzeln eintragen
Code:
For i = 1 To UBound(F1)
   Cells(i,1).Value = F0(i) 'Eintraege in Spalte A ab Zeile 1
Next i
Hallo zusammen,

ich wage nochmal einen neuen Versuch.

Ich habe die Rohdaten angepasst und gleich in das Worksheet integriert. Mit Eurer Hilfe habe ich einige Probleme
bereits lösen können und weitere Probleme durch eigenen Code lösen können.

Leider ist mein Code noch problembehaftet.
Zwei Probleme bestehen noch:

1) Im Code an der Stelle 'XXXXX scheint der Fehler zu liegen. Der Code vergleicht nicht die betreffende Zeile in Spalte A aus Rohdaten
    mit der Spalten aus Ankunft. Es scheint so als übernimmt er die Daten aus Ankunft/Spalte E für die ganze Tabelle

2) Für die Abhängigkeit vom Datum, also den Spalten Rohdaten/G und I ist mich noch keine Lösung eingefallen

Gruß

tmessers
Hallöchen,

erst mal ein paar grundsätzliche Hinweise.

Im Code weist Du die Blätter Variablen zu, z.B.
Set wsZ = Worksheets("Ankunft")

An anderen, nachfolgenden Stellen programmierst Du
Sheets("Ankunft"). ...

Das brauchst Du nicht. Hier reicht stattdessen
wsZ. ...

Ich habe da nicht analysiert, welches Blatt bei der codeausführung aktiv ist. In der Regel programmiert man bei häufigen wechselseitigen Zugriffen das Blatt dazu. So eine Zeile
For Each Zelle In Range(Cells(1, 2), Cells(Rows.Count, 2).End(xlUp))
ist entsprechend risikobehaftet und man weiß auch nicht gleich, um welches Blatt es eigentlich geht. Ich vermute, dass es dabei um das Blatt Rohdaten geht.
Weiter oben steht
Set wsQ = Worksheets("Rohdaten")
Ich würde die Schleifa also so programmieren:
For Each Zelle In wsq.Range(wsq.Cells(1, 2), wsq.Cells(Rows.Count, 2).End(xlUp))
Du siehst, ich habe das wsq auch innerhalb der Range-Klammer zu den Cells geschrieben...

Später hast Du
          Sheets("Ankunft").Select
               For Each Spalte In Sheets("Ankunft").Range(Cells(17, 5), Cells(17, _
               Columns.Count).End(xlToLeft))

Wenn Du genau weist. dass das Blatt Ankunft aktiv ist, brauchst Du das in der For-Zeile nicht dazu zu schreiben. Ich würde aber die andere Variante mit wsZ und ohne Selectieren bevorzugen. Würde dann so aussehen:
               For Each Spalte In wsZ.Range(wsZ.Cells(17, 5), wsZ.Cells(17, _
               Columns.Count).End(xlToLeft))

Du musst dann in den folgenden Zeilen aufpassen, dass ggf. wsZ vor den Zellenangaben steht .
Flugziele:

Code:
Sub M_snb()
    MsgBox Join(Filter([transpose(if(left(B1:B200,1)="(",A1:A200))], "False", 0), vbLf)
End Sub

Ins Arbeitsblatt:
Code:
sub M_snb()
   Filter([transpose(if(left(Rohdaten!B1:B200,1)="(",Rohdaten!A1:A200))], "False", 0)
   sheets("Ankunft").cells(17,5).resize(,ubound(sn)+1)=sn
End Sub
Hallo snb,

das war zu schnell aus der Hüfte geschossen :88:

so sollte es sei, denke ich.
 

Code:
Sub M_snb()
  sn = Filter([transpose(if(left(Rohdaten!B1:B200,1)="(",Rohdaten!A1:A200))], "False", 0)
  Sheets("Ankunft").Cells(16, 5).Resize(, UBound(sn) + 1) = sn
End Sub



Aber das "False" wird mit in die Tabelle geschrieben.
Hier ein Ausschnitt:

Arbeitsblatt mit dem Namen 'Ankunft'
 EFGHIJKLMNO
16AntFalschFalschFalschFalschFalschFalschFalschBarFalschBel
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
@Att

Verstehst du kein Englisch ?


Code:
sub M_snb()
   Filter([transpose(if(left(Rohdaten!B1:B200,1)="(",Rohdaten!A1:A200))], "Falsch", 0)
   sheets("Ankunft").cells(17,5).resize(,ubound(sn)+1)=sn
End Sub

Wer war zu schnell ?? :D
(08.02.2017, 10:03)snb: schrieb: [ -> ]Wer war zu schnell ?? :D

 hmm, ich denke immer noch Du. :19:

Was steht in "sn"?
Seiten: 1 2