Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: data inlezen uit ander Excel bestand  (gelezen 4015 keer)

0 leden en 1 gast bekijken dit topic.

Offline Montagnard

  • Ambassadeur
  • *****
  • Berichten: 2.385
  • Geslacht: Man
data inlezen uit ander Excel bestand
« Gepost op: 22 augustus 2023, 16:32:42 »
Dag,
ben er weeral paar dagen mee bezig (dit is code die ik heb gekregen van Molly om mijn energieverbruik data in te lezen).
hoe verander ik bijgevoegde code om
1) gewoon de lijn(en) in te lezen zonder dat opsplitsen ?
2) "RIJ" moet starten op de plaats na de laatste niet lege cel in kolom A ( ik dacht dus aan "rij = Sheets("werkbladnaam").Cells(Rows.Count, 1).End(xlUp).Row + 1

With Sheets("Records")
Open download_map & bestand For Input As #1
            While Not EOF(1)
                Line Input #1, regel
                spl_regel = Split(regel, ";")
                If IsDate(spl_regel(0)) And spl_regel(9) = "kWh" And spl_regel(8) <> "" Then
                    datum = --Format(spl_regel(0), 0)
                    RIJ = WorksheetFunction.Match(datum, .Columns(1), 0)
                    .Cells(RIJ, 2) = Replace(spl_regel(8), ",", ".")
                End If
            Wend
            Close #1
       end with

dit is de code die ik heb veranderd maar ik krijg slecht één lijn met rare tekens  :(

RIJ = Sheets("Werkbladnaam").Cells(Rows.Count, 1).End(xlUp).Row + 1
            With Sheets("Records")
                Open download_map & bestand For Input As #1
                    While Not EOF(1)
                    Line Input #1, regel
                    .Cells(RIJ, 1) = regel
                    Wend
                Close #1
            End With

ik geraak er maar niet uit  :-[

Mvg,
Arnold.


Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: data inlezen uit ander Excel bestand
« Reactie #1 Gepost op: 22 augustus 2023, 17:39:52 »
Hallo Arnold,

Voor het feit dat je slechts één lijn krijgt is er een simpele reden: je geeft eerst 'rij' een waarde, en daarna zet je elke gevonden regel in Cells(rij, 1). Je ganse inleesbestand zal dus wel worden verwerkt maar bij het wegschrijven wordt telkens het vorige overschreven.
Over wat je als resultaat ziet, en daarbij horend wat je wil zien, kan ik me moeilijk uitspreken zonder het in een bestand te kunnen bekijken. Ik veronderstel zomaar dat je iets totaal anders wil gaan doen, want in de bestaande werkwijze was dat splitsen een absolute noodzaak, dus ik kijk graag uit naar wat verduidelijking...

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline Montagnard

  • Ambassadeur
  • *****
  • Berichten: 2.385
  • Geslacht: Man
Re: data inlezen uit ander Excel bestand
« Reactie #2 Gepost op: 22 augustus 2023, 18:03:22 »
Dag Molly , het is idd voor een ander doel , ik laat een boom structuur van TV-series op mijn harde schijf via "Directory Lister" wegschrijven , en daarna kan ik dat inlezen in mijn Excel "progje" aka bestand.
dit dient als doel om te onthouden welke series en indien meer dan één seizoen in een serie welke daarvan zijn bekeken.
zo kan ik de geziene bestanden wissen op de harde schijf MAAR kan ik altijd via mijn Excel "progje" opzoeken welke wel/niet bekeken zijn (aan deze module is er ook nog werk maar stap voor stap  ;D)
door gewoon in "Directory Lister" de boomstructuur te laten opslaan als een CSV bestand i.p.v. een XLSX bestand kan ik ondertussen wél de data inlezen.

dit is de code :


download_map = "C:\xxxxxxxxxxxxxxxxxxxxxx\"
Application.ScreenUpdating = False
bestand = Dir(download_map & "TV-series.csv")
teller = Sheets("Records").Cells(Rows.Count, 1).End(xlUp).Row + 1: If teller = 2 Then teller = 1
            With Sheets("Records")
                Open download_map & bestand For Input As #1
                    While Not EOF(1)
                    Line Input #1, regel
                    .Cells(teller, 1) = regel
                    teller = teller + 1
                    Wend
                Close #1
            End With

deze werkt nu perfect , échter zouden de 4 1ste rijen van het bestand NIET moeten geimporteerd worden omdat dit geen relevante info is (en ik kan deze niet via Directory Lister automatisch uitschakelen.
dit zijn de 4 1ste rijen :

Directory Lister listing
Gemaakt op 22-08-2023 17:49 door Directory Lister v2.41
Mappen: 77, Bestanden: 569, Grootte: 1.287.571.444.945 B
Naam""Telling"


Misschien kan je me hierbij helpen zodat er maar vanaf het 5de record worden ingelezen ?
Mvg,
Arnold.

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: data inlezen uit ander Excel bestand
« Reactie #3 Gepost op: 22 augustus 2023, 18:17:23 »
Hoi Arnold,

Ja hoor, dat kan er nog even tussen (druk druk druk :D)
Je kan niet zomaar beslissen om vanaf regel 5 te beginnen inlezen, dus is de oplossing: lees ze wel in maar schrijf ze niet weg ;)
En dan krijg je:
While Not EOF(1)
  For i = 1 To 4
    Line Input #1, regel
  Next i
  Line Input #1, regel
  .Cells(teller, 1) = regel
  teller = teller + 1
Wend

Nog veel kijkplezier !
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline Montagnard

  • Ambassadeur
  • *****
  • Berichten: 2.385
  • Geslacht: Man
Re: data inlezen uit ander Excel bestand
« Reactie #4 Gepost op: 22 augustus 2023, 18:25:57 »
wééral ne dikke merci Molly !
ik lees dat je een heel drukke rest van de week tegemoet gaat , ik ga dat dan ook in gedachten houden en mijn eventuele volgende probleempjes groeperen  ;D.
Nog een fijne avond.
grtjs,
Arnold.

Offline Montagnard

  • Ambassadeur
  • *****
  • Berichten: 2.385
  • Geslacht: Man
Re: data inlezen uit ander Excel bestand
« Reactie #5 Gepost op: 22 augustus 2023, 18:31:02 »
oeps , te vroeg geroepen  :(....
Grtjs,

Offline Montagnard

  • Ambassadeur
  • *****
  • Berichten: 2.385
  • Geslacht: Man
Re: data inlezen uit ander Excel bestand
« Reactie #6 Gepost op: 22 augustus 2023, 18:35:32 »
opgelost , die foutmelding "invoer na einde bestand" deed belletje rinkelen , ik moet dat kleine for next lusje VOOR "While Not EOF(1)" zetten....
werkt nu prima.
Grtjs,

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: data inlezen uit ander Excel bestand
« Reactie #7 Gepost op: 22 augustus 2023, 18:52:11 »
Oeps, een complete beginnersfout van mijnentwege :-[
Zie je wel dat ik al 2 dagen te veel werk aan het verzetten ben geweest...
Gelukkig ben jij zelf wél nog alert genoeg :thumbsup:

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline Montagnard

  • Ambassadeur
  • *****
  • Berichten: 2.385
  • Geslacht: Man
Re: data inlezen uit ander Excel bestand
« Reactie #8 Gepost op: 24 augustus 2023, 11:51:35 »
Goeiedag,
ik loop weeral vast in mijn bestand , kan maar geen oplossing vinden voor volgende :
als ik in het zoekveld laat zoeken naar een serie ( nemen we als voorbeeld "The Gift" ) dan worden de eventueel gevonden matches getoond , deze komen uit de kolom A.
echter , in kolom B vul ik naast de geziene seizoenen een "x" (een x) in...
nu zou ik graag hebben dat bij het zoeken en gevonden matches OOK de inhoud van kolom B getoond wordt , zo zie ik direct of een serie al dan niet is gezien.
dit is de huidige code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
    Application.EnableEvents = False
    Range("B5:B24").ClearContents
    If Target <> "" Then
        tezoekentitel = Cells(2, 2)
        With Sheets("Records")
            nummers = Filter(Application.Transpose(.Range("a1:a" & .Cells(Rows.Count, 1).End(xlUp).Row)), tezoekentitel, True, vbTextCompare)
            Select Case UBound(nummers)
                Case -1
                    MsgBox "er zijn geen titels met deze tekst", vbInformation, "Belangrijke info"
                    Case Is > 15
                    MsgBox "er zijn teveel titels , verfijn Uw zoekopdracht", vbInformation, "Belangrijke info"
                Case Else
                    Cells(5, 2).Resize(UBound(nummers) + 1) = Application.Transpose(nummers)
                End Select
            End With
                End If
    Application.EnableEvents = True
    End If
Cells(2, 2).Select
End Sub

mocht een voorbeeld bestand toch nodig zijn dan hoor ik het graag.
Mvg,
Montagnard.

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: data inlezen uit ander Excel bestand
« Reactie #9 Gepost op: 24 augustus 2023, 12:54:15 »
Zonder in je bestand te kunnen kijken, lijkt het alsof je beter kunt filteren in je bestaande database met de ingebouwde autofilter.
Bij een match kun je direct een "x" plaatsen naast reeds bekeken series.



Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.191
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: data inlezen uit ander Excel bestand
« Reactie #10 Gepost op: 24 augustus 2023, 13:33:39 »
Montagnard,

zonder opdringerig te zijn, maar ik lees al 2 maal in die enkele reacties "Zonder in je bestand te kunnen kijken", en met die van mij erbij zijn dat al 3 vragen om een voorbeeldbestand  ;D

Maak een kopie, gooi 99% in de vuilbak, zo kan men beter helpen en behoud jij je privacy.

Groeten,

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline Montagnard

  • Ambassadeur
  • *****
  • Berichten: 2.385
  • Geslacht: Man
Re: data inlezen uit ander Excel bestand
« Reactie #11 Gepost op: 24 augustus 2023, 13:53:56 »
sry hoor , was zeker niet mij bedoeling , mijn bestand mag zeker gezien worden , mét alle data...
dus :
op het werkblad "records" komen alle ingelezen records te staan uit het CSV bestand "TV-series" dat ik laat aanmaken met het programma "Directory Lister" omdat ik via dit programma énkel de boom structuur van een aantal of 1 map met onderliggende mappen (per seizoen) kan laten exporteren naar dat CSV bestand.
op het werkblad "records" zet ik naast de bekeken seizoenen een X

ik geef in cel B2 een zoekopdracht in b.v. gift (je hoeft geen volledig woord , nog titel of hoofdletters in te geven , het voorbeeld is eigenlijk "The gift") + enter
is er geen match = msgbox
zijn er méér dan 15 matches = msgbox (dit kan ik naar willekeur aanpassen)
is er een match dan wordt het venster B5 : B24 gevuld met de overeenkomende matches .
nu zou ik graag hebben dat indien op het werkblad"records" in kolom B een X staat deze wordt weergegeven naast de gevonden matches in het venster D5 : D24
en dat kan ik maar niet aanpassen in de code die ik heb gepost , deze code staat in de vba editor onder "Blad1 (Start)....

ik heb 2 afbeeldingen ook bijgesloten , 1 zoals het nu is indien ik "gift" ingeef in cel B2 en 1 zoals ik het zou willen....

ik hoop dat het duidelijk genoeg is zo  :) , het is zo dat als er een nieuw seizoen uitkomt ik gewoon kan checken of het al gezien is geweest of niet.....

Mvg,
Montagnard.


Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: data inlezen uit ander Excel bestand
« Reactie #12 Gepost op: 24 augustus 2023, 14:51:31 »
Je maakt nu als het ware een kopie van de ingebouwde autofilter functie van Excel. Filteren op tabblad "Records" zou exact het zelfde opleveren

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: data inlezen uit ander Excel bestand
« Reactie #13 Gepost op: 24 augustus 2023, 15:04:46 »
Hallo Arnold,

Wat JEC zegt klopt uiteraard, maar ik kan er tevens inkomen dat je het liever op je eigen manier doet, daarom maar even gekeken.
Ik heb het wel een beetje anders gedaan dan gevraagd, en wel omdat naar mijn gevoel die x-en nogal ver van de titels staan (louter een visuele kwestie dus), daarom heb ik ze vooraan in kolom B toegevoegd.
Mocht je hier geen meerwaarde in zien, dan is de x in kolom D zetten uiteraard even eenvoudig op te lossen.
De meeste van je code kan ongewijzigd blijven, enkel in het change-event mag het onder 'Case else' dit worden:
For i = 0 To UBound(nummers)
  rij = .Columns(1).Find(nummers(i), LookAt:=xlWhole).Row
  If LCase(.Cells(rij, 2)) = "x" Then sp = 4 Else sp = 6
  nummers(i) = .Cells(rij, 2) & Space(sp) & nummers(i)
Next i
Cells(5, 2).Resize(UBound(nummers) + 1) = Application.Transpose(nummers)

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: data inlezen uit ander Excel bestand
« Reactie #14 Gepost op: 24 augustus 2023, 15:12:45 »
Hier een andere variant.

Sub jec()
 Dim a
 Sheets("Records").Cells(1).CurrentRegion.Name = "ar"
 a = Filter([transpose(index(ar,,1) & "^^" & index(ar,,2))], Cells(2, 2), 1, 1)
 If UBound(a) = -1 Or UBound(a) > 15 Then MsgBox ("Te veel of geen titels gevonden"): Exit Sub
 Application.DisplayAlerts = False
 With Range("B5").Resize(UBound(a) + 1)
    .Value = Application.Transpose(a)
    .TextToColumns .Offset, 1, , , , , , , 1, "^"
 End With
 Application.DisplayAlerts = True
End Sub

 


www.combell.com