• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

TXT naar excel spliten met een opgegeven waarde

  • Onderwerp starter Onderwerp starter HWV
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.
Hij draait

Beste,

Bedankt voor het script , hij doet als het goed is nu zijn werk.
Hij vraag veel van mijn PC want in taakbeheer geef hij aan dat excel niet meer reageert.
( ik laat het even zo want in de CPU zie ik wel dat er iets gebeurd )
Ik draai zelf op een 2,8 GHZ intel pentium 4 1536 MB.

De controleteller zie ik ook niet lopen, maar dat komt waarschijnklijk omdat mijn beeld vast staat, ik ben erg benieuwd wat hij nu doet.

Groet HWV en je hoor nog hoe het afloopt.
 
De teller loopt ook niet meer mee, ik heb die regels gedisabled in de macro.

Laat maar lekker even lopen. Je kunt trouwens in de VBA Editor met CTRL + Break de macro wel stoppen.

Ben benieuwd
 
Fout melding

Beste,

Na het proberen van de code krijg ik de melding
Code:
While Not EOF(1)
Line Input #1, regel
    If Not Left$(regel, 1) = "" Then
        If Not Left$(regel, 1) = Chr$(34) Then                            ' Als de regel niet leeg is
            If Not Left$(regel, 12) = "Naam bedrijf.b.v." Then
                If Not Left$(regel, 5) = "-----" Then                   ' Als er geen streepje staat
                    If Not Left$(regel, 1) = Chr$(9) Then               ' Als er geen tab staat
                        If Not Left$(regel, 1) = Chr$(12) Then          ' Als er geen Linefeed staat
                            If Not Left$(regel, 7) = "Vervolg" Then     ' Als er geen vervolg staat
                                ActiveCell.Value = regel
                                ActiveCell.Offset(1, 0).Range("A1").Select
                                For InlezenRestRecord = 1 To 24
                                  [COLOR="Red"][U][B][I]  Line Input #1, regel[/I][/B][/U][/COLOR]
                                    If Not Left$(regel, 1) = "" Then
                                        If Not Left$(regel, 1) = Chr$(9) Then
                                            ActiveCell.Value = regel
                                            ActiveCell.Offset(1, 0).Range("A1").Select
                                        End If
                                    End If
                                Next
In bijgevoegd bestand zie je wat hij heeft neer gezet, hopelijk kunt u hiermee de fout oplossen.


Groey HWV
 

Bijlagen

Laatst bewerkt:
Heb je het tabblad "Tabel" leeg gemaakt? Hoeveel records waren er ingelezen?
Was dat aantal ongeveer in de buurt van wat je ook verwachte?
 
Tablad

Tablad niet leeg gemaakt dit was het geen wat hij heeft gegeven ( laat ik het maar zo zeggen ). enkel de "naam bedrijf" veranderd in de echte naam in karakters is het zo
AAA BBBBBBBBBBBB B.V

Groet HWV
 
Werk je met Excel 2007? Aan de bestandsnaam dag ik iets vreemds.

Ik zou het volgende doen:
  • de regel met Application.Screenupdating= False uitschakelen door er een ' (apostrof) voor te zetten.
  • daarna de macro met F8 stap voor stap laten werken en kijken wat hij doet.
  • als het goed is negeert de macro regels die niets met het record te maken hebben
  • de regels die met het record te maken hebben worden ingelezen
  • de waarden van de ingelezen regels worden gesplitst op basis van de Tab
  • de waardes van het record worden in 2 stappen gekopieerd naar het tabblad Tabel
  • het hulpwerkblad wordt leeggemaakt en de cyslus herhaalt zich

Eventueel eerst met het inputbestand wat je als laatste zelf hebt geplaatst (zie post #15) proberen!
 
Inlezen en probleem

Ik werk met excel 2003.

Ik heb het gedaan en het programma laten lopen met F8 ( mooie functie trouwens )
Hij haal het bestand op en begin met naam bedrijf gevolgt door streepjes.
Hij zet alles in kolom A en daardoor kan hij de gegevens van uit de code niet verwerken
Code:
Range("c1:c22").Select
                                                           
                                    Selection.TextToColumns Destination:=ActiveCell.Offset(0, 0).Range("A1"), DataType:=xlDelimited, _
                                        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
                                        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
                                        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
                                        TrailingMinusNumbers:=True
                                                
                                    Range("a1:a21").Copy
                                    Sheets("Tabel").Select
                                    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                                        False, Transpose:=True
                                    ActiveCell.Offset(0, 21).Range("A1").Select
                                    
                                    Sheets("Hulpwerkblad").Select
                                    Range("F1:F22").Copy

Hij plakt namelijk niks in het tabel

In de bijlage vind u het script zo als hij nu via F8 is gemaakt t/m dat hij moet gaan splitsen en kopieeeren.

Ik wil wel even kwijt dat ik waardeer de inspanning die u hiervoor doet.

Groet HWV
 

Bijlagen

Dit stukje code:

Selection.TextToColumns Destination:=ActiveCell.Offset(0, 0).Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
TrailingMinusNumbers:=True

moet de regel splitsen op basis van de Tab als separator. Dat lijkt-ie niet te doen. Er lijken geen Tabs in jouw inputfile te zitten. Er is overigens nog wel een andere manier, maar die moet ik even programmeren.

Ik ga er deze week wel even mee verder. Ik moet nu weg en ben pas donderdag weer terug.
 
Ok bedankt

Tot zover bedankt.

HWV
 
Nieuwe code

Hierbij een nieuw bestand met aangepaste code. Het Hulpwerkblad bevat nu in kolom B en C een aantal formules die de juiste waardes uit de inputfile halen.

De eerste regel die ingelezen wordt bevat de naam van je bedrijf (die heb je verandert in AAA BBB enz.) Daardoor klopte het aantal tekens niet meer in de test. Als je dit verandert, moet je ook de waarde in de test IF NOT LEFT$(REGEL; <aantal>) veranderen. Zie ook de opmerking in de macro!

Probleem is nog dat de regel met de "-----" ook wordt ingelezen. Ik heb een extra controle ingebouwd die zoekt op de tekenwaarde van "-"

Ik lees het resultaat wel.

Suc6,
Gert
 

Bijlagen

Ik ga het proberen

Beste,

Ik ga het proberen en zal het je zo spoedig mogelijk laten weten.

Groet HWV
 
Even voor de duidelijkheid

Beste,

Even voor de duidelijkheid als mijn bedrijfsnaam aaa aaaaaaaaaaaa B.V.
zijn dat dan incl punten en paties 21 karakter`s die ik moet opgeven.

Als hij aangeef dat excel niet meer reageer, gewoon door laten lopen ?.

groet HWV
 
Update stand van zaken en oproep voor hulp

Beste allemaal,

Samen met Gert Bouwmeester en voornamelijk Gert zijn we bezig geweest om de code voor elkaar te krijgen om mijn TXT van ruim 28 MB binnen te halen zonder te spiltsen ivm dat hij dan precies midden in de data de regel kan afbreken.

Om jullie hier op de hoogte te houden is dit het geen waar we aan zijn toegkomen.
In een bestand 1/10 van het grote bestand gaat het goed, geen probleem die haalt hij nu binnen. Als ik het grote bestand binnen gaat halen geef hij de melding dat er onvoldoende geheugen is, wat erg onwaarschijnlijk is omdat ik een nieuwe pc werkt met 4Gb geheugen.

Code:
Sub inlezentxt()
Dim regel As String, teller, MaxAantal
'Application.ScreenUpdating = False

Close #1
Open "G:\Automatisering\3.txt" For Input As #1

Sheets("Tabel").Select: Range("A2").Select
Sheets("Hulpwerkblad").Select: Range("A1").Select
teller = 0

While Not EOF(1)
Line Input #1, regel
    If Not Left$(regel, 1) = "" Then
        If Not Left$(regel, 1) = Chr$(34) Then                          ' Als de regel niet leeg is
            If Not Left$(regel, 3) = "AAA" Then                         ' Let op! Als je hier de echte naam van je bedrijf volledig invult, dan ook het AANTAL letters vervanderen in Left$(regel, <aantal>)
                If Not Left$(regel, 5) = "-----" Then                   ' Als er geen streepje staat
                If Not Left$(regel, 1) = Chr$(45) Then                  ' Als er geen streepje staat, maar nu met code proberen te vinden
                    If Not Left$(regel, 1) = Chr$(9) Then               ' Als er geen tab staat
                        If Not Left$(regel, 1) = Chr$(12) Then          ' Als er geen Linefeed staat
                            If Not Left$(regel, 7) = "Vervolg" Then     ' Als er geen vervolg staat
                                ActiveCell.Value = regel
                                ActiveCell.Offset(1, 0).Range("A1").Select
                                For InlezenRestRecord = 1 To 24
                                    Line Input #1, regel
                                    If Not Left$(regel, 1) = "" Then
                                        If Not Left$(regel, 1) = Chr$(9) Then
                                            ActiveCell.Value = regel
                                            ActiveCell.Offset(1, 0).Range("A1").Select
                                        End If
                                    End If
                                Next
                                
                                Calculate
                                Range("b1:b21").Copy
                                Sheets("Tabel").Select
                                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
                                    False, Transpose:=True
                                ActiveCell.Offset(0, 21).Range("A1").Select
                                    
                                Sheets("Hulpwerkblad").Select
                                Range("c1:c22").Copy
                                    
                                Sheets("Tabel").Select
                                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
                                    False, Transpose:=True
                                ActiveCell.Offset(1, -21).Range("A1").Select
                                    
                                Sheets("Hulpwerkblad").Select
                                Range("A1:A500").ClearContents
                                Range("A1").Select
                            End If
                        End If
                    End If
                End If
                End If
            End If
        End If
    End If
Wend
Close #1

Application.ScreenUpdating = True
End Sub

Is er hier iemand die nog een idee heeft om dit binnen te halen.
Misschien toch het bestand splitesen maar dan wel met een opgegeven waarde zodat hij niet halverwege de data gaat afbreken.


In afwachting...

Groet HWV
 
Over uw geheugen: Het is niet omdat je PC 4GB heeft dat Excel die allemaal kan aanspreken. Enorme grote files (en bewerkingen) kunnen dus wel een geheugenprobleem opleveren. Welke Excel versie gebruik je?
 
excel 2003

Hoi Finch,

Bedankt voor je reactie.
Ik werk met excel 2003

Groet
HWV
 
Laatst bewerkt:
Hint:

Kijk naar mijn oorspronkelijke oplossing.
Gebruik de methode voor het splitsen van bestand op 65000 regels analoog om het bestand op ongewenste regels te splitsen en uit te filteren.
Pas daarna de 65000 regels splitsmethode toe.
 
Een hoop vraag tekens

Beste SNB,

Ik was al blij dat ik dit een beetje ging snappen, maar nu ?
U komt met een HINT maar nu is het mij nog onduidelijker geworden.
Ik probeer het te snappen en te ontleden maar mmm.... gaat nog niet echt lukken.

- Eerst de troep verwijderen uit de txt bestand, me de oplossing van Bert.
- Als dit gebreurt is dan splitsen, maar hoe weet je dan waar je moet splitsen ?

Dit bestand bestaat uit 21 regels die elke keer terug komt dus als je zo gaat rekenen dan zal je moeten zorgen dat hij gaat splisten op regel 64995. Maar dan moet je zeker weten dat de troep er uit is.

Maar nu de vraag hoe ga ik dit verwerken in de formule.

Kunnen jullie mij hierin helpen.

groet HWV
 
Niet eerst de troep opruimen met je laatste code, maar volgens de methode die ik hintte.
Sla vervolgens het bestand op als csv-bestand met ; tussen de velden.
Als je het daarna opent staat alles op de goede plaats.

Wat je wil (selectie van relevante gegevens en aanpassing tot csv-bestand) kan in 1 regel VBA-code.
In totaal heb je voor deze macro 6 regels nodig.

Maak ook eens gebruik van de methode replace.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan