• 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.

Lay-out van bestand wijzigen

Status
Niet open voor verdere reacties.

test1000

Gebruiker
Lid geworden
7 jul 2017
Berichten
258
Hoi,



Zie bijlage.
Ik heb een Excel in dit formaat.
Maar de lay-out moet gewijzigd worden omdat het bestand moet ingelezen worden in een ander programma.
En dat programma vraagt de lay-out zoals je ziet bij tab "RESULTAAT"

Zolang de kolommen "name" en/of "setname" dezelfde blijven moet je de kolommen "Code" en "volume" rechts van elkaar plaatsen.
Als kolom "name" verandert dan nieuwe regel maken.
Als kolom "setname" verandert maar kolom "name" blijft hetzelfde dan ook nieuwe regel.
Totdat code en/of codenaam verschillend zijn. Enz ..........

In bijlage twee tabs.
Tab [Data] met de gegevens waarvan een andere lay-out moet komen.
Tab [Resultaat] wat het resultaat moet worden.
 

Bijlagen

  • test10012019.xlsx
    10,7 KB · Weergaven: 35
Mod edit: Bericht verplaatst naar Excel
 
Klopt jouw beschrijving wel met het verwachte resultaat?

Probeer anders deze macro eens.

Code:
Sub VenA()
  ar = Sheets("Data").Cells(1).CurrentRegion
  Set d = CreateObject("Scripting.Dictionary")
    For j = 2 To UBound(ar)
      c00 = ar(j, 1) & "|" & ar(j, 2)
      If d.exists(c00) Then d(c00) = d(c00) & "|" & ar(j, 3) & "|" & ar(j, 4) Else d(c00) = c00 & "|" & ar(j, 3) & "|" & ar(j, 4)
    Next j
    With Sheets("Resultaat").Cells(1).Resize(d.Count)
      .Value = Application.Transpose(d.items)
      .TextToColumns , 1, , , , , , , True, "|"
      .Parent.Columns.AutoFit
    End With
End Sub
 
Top.
Code werkt perfect.
Hartelijk dank.

Heb ook code toegevoegd om tab "Resultaat" automatisch aan te maken.

Code:
    Dim Newname As String
    Newname = "Resultaat"
    Sheets.Add Type:=xlWorksheet
    ActiveSheet.Name = Newname

Of

Code:
    Sheets.Add Type:=xlWorksheet
    ActiveSheet.Name = "Resultaat"
 
Laatst bewerkt:
@test1000

Zet je svp de VBA-code nog even tussen code tags ?
 
Dankjewel.

Gaat ook zo:

Code:
   Sheets.Add.Name = "resultaat"
 
Zie bijlage.
De lay-out van tabblad "Resultaat" is in orde.
Maw de macro om van tabblad "Data" tot het resultaat van tabblad "Resultaat" te komen werkt perfect. De code is ok.

Maar nu vraagt men een lay-out zoals je ziet onder tabblad "Resultaat_samenvatting".

Werkwijze :

- Je vertrekt van het tabblad "Resultaat".
- De bedoeling is dat de inhoud van de kolommen C, E, G, I, ...... (totdat de cell leeg is) om deze inhoud te plaatsen in de eerste regel startend in kolom C. Enkel als de inhoud nog niet voorkomt (regel 1 mag enkel unieke waarde bevatten). Maw komt een inhoud al voor in de eerste regel dat moet je deze inhoud niet toevoegen. Enkel de waarde van de bijhorende cel D, F, H, ... onder, op dezelfde regel, te plaatsen als van kolom A en B waarvan je de inhoud hebt genomen.

Werkwijze in bijlage :

- De inhoud van kolom A1 en B1 kopieren in een nieuw tabblad in cell A3 en B3
- Inhoud C1 (omdat dit het eerste veld is een waarde altijd uniek is) kopieren in cell C1
- Waarde van D1 kopieren naar cell C3 (omdat C1 uniek is)
- Inhoud E1 vergelijken met waarde in regel 1. Bestaat nog niet dus kopieren in D1
- Waarde van F1, hoort bij D1, kopieren in D3
- Inhoud G1 vergelijken met regel 1. Bestaat nog niet dus kopieren in E1
- Waarde van H1, hoort bij G1, kopieren in E3
- Totdat alle velden van regel 1, tabblad resultaat, zijn gekopieerd.
- Dan regel 2 van tabblad resultaat. Dus A2 en B2 kopieren naar A4 en B4
- Inhoud C2 controleren op die al bestaat in regel 1 van tab resultaat_samenvatting
Indien niet dan waarde D2 in cell C4. Anders rechts bijplaatsen in regel 1
Tot alle regels van resultaat zijn verwerkt.

Hopelijk is het duidelijk :)
 

Bijlagen

  • test10012019.xlsx
    12,1 KB · Weergaven: 25
Laatst bewerkt:
Lijkt mij iets voor een draaitabel.
 

Bijlagen

  • test10012019.xlsx
    17,7 KB · Weergaven: 25
Perfect.
Idd, het was zo simpel.
Draaitabel werkt.

Maar nu vraagt men mij alweer een andere lay-out :evil:

Zie bijlage.

Vertrekkend van tabblad "Data".
Wanneer de naam wijzigt in kolom "Name" moet je het volume herberekenen van alle codes die dezelfde "name" hebben.
Per "name" eindigt altijd op ABC ABC ABC of ABC ABD DEF.
Eindigt het op ABC ABC ABC moet je het volume delen door =waarde veld ABC ABC ABC/0,9. Is het ABC ABC DEF volume delen door = waarde veld ABC ABC DEF/0,8.
Vb =D2/(D5/0,9) en =D3/(D5/0,9)
En de volumes van de bijhorende records hiermee verrekenen. Zie formules in kolom J.
Dan weet ik niet wat het gemakkelijkste is : ofwel een extra record gebruiken of wel het record gebruiken van ABC ABC ABC (of ABC ABC DEF).
De waarde van dit nieuwe veld moet dan worden : =1-(J2+J3+J4) (zie bijlage)
Dwz dat de som per "Name" altijd +1 is.

Hopelijk is dit duidelijk of bekijk de formules in kolom J.
Als het niet realiseerbaar is laat het dan ook weten.

Thx.
 

Bijlagen

  • test10012019.xlsx
    14,2 KB · Weergaven: 26
Laatst bewerkt:
Ik begrijp er niet veel van wat je nu uiteindelijk wilt bereiken. Volgens mij is jouw initiële vraag opgelost. Ga eerst maar eens bedenken wat het worden moet en stel dan een concrete hulpvraag.
 
Dat kan ik heel goed begrijpen dat het verwarrend overkomt.
Hetgeen ik kan zeggen is dat de data worden geëxporteerd vanuit een ander programma.
En volume moet omgezet worden daarom de herberekening ivm 0,9 en 0,8.
Want de som van eenzelfde artikel moet als som = 1.
En deze nieuwe data worden dan weer geïmporteerd in een ander programma.
Sorry meer uitleg kan ik niet geven.
De berekening kan je vinden in de Excel in bijlage.
Dus ik hoop dat er een oplossing voor is.
 
Zorg er dan voor dat het ene programma direct de juiste export genereert, dan hoef je niet te knutselen in Excel en kan je het direct inlezen in het andere programma. En ja dat kan, maar zal wat munten kosten. Geeft 'men'gelijk de mogelijkheid om over het juiste ontwerp na te denken. Anders kost het waarschijnlijk nog wat meer:)
 
Het zijn idd zeer veel munten.
En in tijden van crisis wil men besparen. :-(
Maar zullen bekijken wat mogelijk is met de tegenpartij.
Ik wil je toch zeer hard bedanken voor de andere oplossingen.
Heeft toch ook al heel veel geholpen hoor. :)
 
zoals in kolommen G en volgende ?
Maar eigenlijk zou dat eenvoudiger en in 1 dictionary moeten lukken.
 

Bijlagen

  • test10012019 (3).xlsb
    28,9 KB · Weergaven: 24
Laatst bewerkt:
zo dus
en draaitabel in samenvatting
 

Bijlagen

  • test10012019 (4).xlsb
    33,2 KB · Weergaven: 33
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan