5.6k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

ich habe ein Problem mit dem Zusammenfügen von Excel-Tabellen. Ein HPLC-Analysegerät gibt mir für jede Probe eine Excel-Tabelle aus.
Je nachdem wieviele Komponenten in der Probe sind, steht z.B. in Zelle D2 der Name des Analyten (z.B. Essigsäure) und entsprechend in E2 der Messwert. Bei mehr Komponenten kann aber schon in der nächsten Excel-Datei der Messwert in G2 stehen, weil mehr Komponenten in der Probe sind.
Ich möchte jetzt eine Excel-Tabelle generieren, wo ich z.B. in Spalte D alle Messwerte für "Essigsäure" untereinander ausgebe. Dabei sollte das Ganze natürlich nach der Probennummer, die sich aus der Excel-Dateibezeichnung ergibt (lv2_1, lv2_2, ...), untereinander soritert werden.

Kann mir da jemand helfen?

Viele Grüße,
David

16 Antworten

0 Punkte
Beantwortet von
Hallo David!

Nachtrag:

In K2 ist einzugeben: =C21

nochmals schönen Gruß

Paul1
0 Punkte
Beantwortet von exceldavid Einsteiger_in (21 Punkte)
Die Aufgabe nähert sich hoffentlich einem Ende. Paul, das klappt wunderbar mit der "WENN"-Formel. Da ich das Ergebnis in genau einer Zelle haben will, habe ich die Formel noch ein bisschen modifiziert:
=WENN(C12="Laktat";D12)+WENN(C13="Laktat";D13)+...

Zu den Nachfragen von Helmut: Allerdings bleibt das Problem mit dem Makro zur ASCII-Dateiauswertung. Da es schon sein kann, dass ich mal mehrere Datien gleichzeitig auswerten möchte, wäre es gut, wenn das Makro auf alle Dateien eines Ordners angewendet wird. Grundsätzlich klappt das mit folgendem Code von excel2007tips.blogspot.com/2007/05/no-applicationfilesearch-in-2007.html:
Option Explicit
Sub Open_All_Files()
Dim oWbk As Workbook
Dim sFil As String
Dim sPath As String

sPath = "C:\Documents and Settings\Roy Cox\My Documents\" 'location of files
ChDir sPath
sFil = Dir("*.xlsx") 'change or add formats
Do While sFil <> "" 'will start LOOP until all files in folder sPath have been looped through Set oWbk = Workbooks.Open(sPath & "\" & sFil) 'opens the file

'do something

oWbk.Close True 'close the workbook, saving changes
sFil = Dir
Loop ' End of LOOP
End Sub


Sehr einfach umgesetzt sieht es dann so aus bei mir:
Sub Open_All_Files()
Dim oWbk As Workbook
Dim sFil As String
Dim sPath As String

sPath = "C:\Test\" 'location of files
ChDir sPath
sFil = Dir("*.*") 'change or add formats
Do While sFil <> "" 'will start LOOP until all files in folder sPath have been looped through
Workbooks.OpenText (sPath & "\" & sFil), Origin:=xlMSDOS, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(22 _
, 1), Array(37, 1), Array(57, 1), Array(69, 1)), TrailingMinusNumbers:=True
oWbk.Close True 'close the workbook, saving changes
sFil = Dir
Loop ' End of LOOP
End Sub

Nur klappt das nicht so ganz, da nach der ersten Datei abgebrochen wird und ein Laufzeitfehler angegeben wird. Fehlerhaft ist die Zeile
oWbk.Close True
womit vermutlich zwar
Workbooks.Open
aber nicht
Workbooks.OpenText
verarbeitet werden kann.
Hat jemand Ahnung von der Programmierung und kann sagen, wo der Fehler liegt?
Viele Grüße,
David
0 Punkte
Beantwortet von
Hi,

Du hast den ObjectVerweis beim Öffnen vergessen. Eine Änderung, wie folgt, sollte das zum laufen bringen. ( siehe Kommentar im org. CodeTeil)

.
.
.
Do While sFil <> "" 'will start LOOP until all files in folder sPath have been looped through
Set oWbk = Workbooks.OpenText (sPath & "\" & sFil), Origin:=xlMSDOS, _
.
.
.


bye
malSchauen
0 Punkte
Beantwortet von
Hi,

Ups, ungetestet posten rächt sich halt...
Das passt so einfac doch nicht.


bye
malSchauen
0 Punkte
Beantwortet von
Hi,

Die Workbooks.OpenText-Methode hat wohl kein WorkBook-Object als Rückgabewert (Im Gegensatz zur Workbooks.Open-Methode). Da aber das mit der OpenText-Methode geöffnete Workbook in diesem Ablauf das aktive Workbook ist, sollte folgende Änderung passen:
.
.
.
, 1), Array(37, 1), Array(57, 1), Array(69, 1)), TrailingMinusNumbers:=True
ActiveWorkbook.Close True 'close the workbook, saving changes
sFil = Dir
Loop ' End of LOOP
End Sub

Sollte es innerhalb der Schleife einmal notwendig werden (warum auch immer) zwischen verschiedenen WBs zu wechseln, könnte man auch direkt nach dem Öffnen einen ObjectVerweis auf das WB setzen. Dies sähe bei mir dann aus wie folgt:

.
.
Do While sFil <> "" 'will start LOOP until all files in folder sPath have been looped through
Workbooks.OpenText Filename:=sPath & "\" & sFil, Origin:=xlMSDOS, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(22 _
, 1), Array(37, 1), Array(57, 1), Array(69, 1)), TrailingMinusNumbers:=True
Set oWbk = ActiveWorkbook
'weiterer Code
'in dem auch andere
'offene WBs aktive
'werden können
oWbk.Close False 'close the workbook, saving changes
sFil = Dir
Loop ' End of LOOP
End Sub


bye
malSchauen
... der es nun aber auch getestet hat... ;-)
0 Punkte
Beantwortet von
Hi,

... und dabei beim Code-Einfügen ins Forum leider übersehen hat, dass er zu Testzwecken beim Schliessen den SaveChanges-Parameter auf False gesetzt hat. Den dann also, wenn gewünscht, bitte wieder auf True setzen.

bye
malSchauen
... der sich wohl besser wieder schlafen legt...
...