TXT Bestand naar Excel met berekening

Georgyboy

Terugkerende gebruiker
Lid geworden
6 jan 2007
Berichten
1.010
Besturingssysteem
Windows 11
Office versie
365
Dag Ieder,

Heb een TXT bestand die ik graag wil naar Excel omzetten om extra simulaties te doen.

In het 1° deel zijn de inkoop + de kosten
In het 2° deel zijn de opbrengsten

Finaal De opbrengsten - de kosten = de opbrengst.

Daar het vandaag hard rekenen is en de opbrengsten hopelijk te kunnen valideren is het interessant om telkens van de calculaties
een nacalculatie te maken (wat wel gebeurd) maar VBA zou ons hier werk kunnen besparen?

Sorry dat het TXT bestand sterk vervormd is om veiligheidsredenen.

Zou dit kunnen lukken?
Het TXT bestand kunnen we wel naar Excel laden naar Vb "Blad1" of misschien kan het ook anders?

Alvast bedankt!
 

Bijlagen

Denk dat deze code met dank aan Cow18 Zou kunnen?
Wellicht kleine aanpassing(en)

Loop hier vast
aOut(iOut, 6) = IIf(aOut(iOut, 1) = "IN", -1, 1) * CDbl(Trim(Mid(sn(i), 68, 10))) 'gewicht


' .TextFileFixedColumnWidths = Array(9, 25, 11, 12, 10, 10, 13)
Const MyDir = "C:\Users\Geo\OneDrive - mXXX\Bureaublad\Desktop\Geo\Calculaties" 'dit is de directory waar normaal mijn TXT-bestanden staan


Sub Versnijden()

Dim sFilter, vaFile, aOut(), iOut As Long, bLocatie, bBegin, sCur, iArtNr

MsgBox "deze macro is voor txt-file zoals Varken 2 In.txt"

cur = CurDir
ChDir MyDir
sFilter = "Mijn Tekstfiles (*.TXT) ,*.txt," 'filteren op sn(i)files
vaFile = Application.GetOpenFilename(FileFilter:=sFilter, FilterIndex:=1, Title:="Kies je sn(i)file", MultiSelect:=False)
t = Timer
ChDir CurDir
If vaFile = False Then Exit Sub 'je hebt een geldige keuze gemaakt
sn = Split(CreateObject("scripting.filesystemobject").OpenTextFile(vaFile).ReadAll, vbCrLf) 'lees die sn(i)file in 1 keer en splits in aparte lijnen op dat vbCrLf-karakter

ReDim aOut(1 To UBound(sn), 1 To 9) 'maak een uitvoer-array klaar met ruim teveel rijen en 8 kolommen
For i = 1 To UBound(sn) 'loop alle lijnen af
If Trim(sn(i)) <> "" Then 'geen lege regel
iArtNr = iArtNr - (Trim(Left(sn(i), 9)) = "Art.Nr.") 'tel het aantal keer dat je Art.Nr. tegenkomt, om onderscheid te maken tussen grondstof en eindprodukt
If iArtNr > 0 Then
If IsNumeric(Trim(Left(sn(i), 9))) Then
Debug.Print sn(i) 'in je "direct"-venster (CTRL+G) kan je hier meevolgen wat je doet
Debug.Print Left(sn(i), 19) 'in je "direct"-venster (CTRL+G) kan je hier meevolgen wat je doet
Debug.Print Replace(Trim(Mid(sn(i), 68, 10)), ",", ".")
iOut = iOut + 1 'volgende regel in je array
aOut(iOut, 1) = IIf(iArtNr = 1, "IN", "OUT") 'grondstof of eindproduct
aOut(iOut, 2) = Trim(Mid(sn(i), 10, 25)) 'omschrijving
aOut(iOut, 3) = "'" & Trim(Mid(sn(i), 35, 11)) 'datum
aOut(iOut, 4) = "'" & Trim(Mid(sn(i), 46, 12)) 'tijdstip
aOut(iOut, 5) = Replace(Trim(Mid(sn(i), 58, 10)), ",", ".") 'partij
aOut(iOut, 6) = IIf(aOut(iOut, 1) = "IN", -1, 1) * CDbl(Trim(Mid(sn(i), 68, 10))) 'gewicht
aOut(iOut, 7) = Replace(Trim(Mid(sn(i), 78, 13)), ",", ".") 'percent
aOut(iOut, 8) = Replace(Trim(Mid(sn(i), 91, 13)), ",", ".") 'stuks
End If
End If
End If
Next

With Sheets("tabel3").ListObjects(1) 'je tabel waar je je gegevens wegschrijft
If .ListRows.Count Then .DataBodyRange.Delete ''leegmaken
'.ListColumns(3).Range.EntireColumn.ColumnWidth = 100
If iOut > 0 Then
With .ListRows.Add.Range.Range("A1").Resize(iOut, UBound(aOut, 2))
.Value = aOut 'als je zaken verzamelt hebt, schrijf ze dan in 1 keer weg
.EntireRow.AutoFit
.EntireColumn.AutoFit 'kolombreedte aanpassen
End With
End If
End With

ThisWorkbook.RefreshAll

MsgBox Format(Timer - t, "0.00\s") & vbLf & UBound(sn) & " lijnen in tekstbestand " & vbLf & vaFile & vbLf & vbLf & "Resultaat : " & iOut & " lijnen"
End Sub
 
Misschien handig om er ook bij te vertellen wat je met "loopt vast" bedoelt.
 
Dag Edmoor,

Hier stopt de lopende code bij uitvoeren;

aOut(iOut, 6) = IIf(aOut(iOut, 1) = "IN", -1, 1) * CDbl(Trim(Mid(sn(i), 68, 10))) 'gewicht
 
Dan heb je daar ook een melding bij gekregen.
 
1746549559130.png

Dank Edmoor voor me daarop te wijzen!
zie aOut (iOut, 6) = leeg
 
Zie nu dat ik volkomen mis ben, sorry,
Dank Edmoor zie nu mijn fout.

Het is van een totaal ander TXT document,
Denk dat mijn vraag ook op te lossen met VBA.
 
Terug
Bovenaan Onderaan