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

Tussenkopjes in tabel vanuit query

Status
Niet open voor verdere reacties.

ArjanVos

Gebruiker
Lid geworden
23 okt 2015
Berichten
82
Hallo,

Via een ODBC-query haal ik een tabel op met productgroep, productnummer, EAN-code, omschrijving, eenheid en prijs. Die prijslijst kan men dan als PDF mailen naar de klanten.

Op zich geen probleem, alleen Sales wil de productgroep als tussenkopje in de tabel hebben. Ik heb me suf gezocht, gekeken of ik iets kan met subtotalen (maar die werken niet op een tabel met query erachter en er komt voorde productgroep dan ook "Totaal" te staan). Heeft iemand een idee? Liefst zonder VBA, maar als dat niet gaat, dan ga ik het daarmee proberen op te lossen.
 
Misschien kan je er een draaitabel van maken, dan kan je subtotalen instellen op ieder gewenst niveau.
 
Ik heb niet voor ogen wat je wil; het aantal 'oplossingen' dat ik kan bedenken is daarom nog te groot.
 
makkelijkst lijkt me VBA, liefst ook de lijst al gesorteerd op product groep. Je kunt de query relatie natuurlijk ook weghalen door de informatie te kopiëren en te plakken.

Voordeel van de VBA route is dat je de tabellen eventueel volledig op kunt maken en zelfs reeds goed verdelen over pagina's, indien nodig. Het is beetje afhankelijk van hoe kritiek een en anders is en hoeveel werk er bespaard wordt en hoeveel werk er extra ingestoken mag worden.
 
Hierbij een voorbeeld van hoe het eruit moet zien. Maar in de query staat het lichtblauwe tussenkopje dus in een extra kolom "Productgroep".

Voor een draaitabel zijn het denk ik teveel kolommen? Knippen, plakken en opmaken middels VBA was ook de richting waaraan ik zat te denken, maar men heeft het hier niet zo op VBA. Vandaar dat ik liever eerst in een andere richting zoek. Maar nogmaals: liever een oplossing met VBA, dan geen oplossing zonder ;)

Bekijk bijlage voorbeeld prijslijst.xlsx
 
Laatst bewerkt:
Als je wil dat er een transformatie plaatvindt van de ontvangen gegevens naar het resultaat dat je geplaatst hebt lijkt het me handig de beginsituatie ook te plaatsen.
 
Uit deze gegevens blijkt ook niet op welke basis er gegroepeerd kan worden.
 
Stel dat je je brongegevens hebt als ik in de bijlage heb gedaan, dan kan je met een draaitabel (rechts in de bijlage) een snel overzicht maken.
 

Bijlagen

  • voorbeeld prijslijst JKP.xlsx
    16,9 KB · Weergaven: 29
Ehm ja, daar heb je natuurlijk gelijk in. In tab Begin staat de data zoals die uit de query komt; in Gewenst zoals het met worden. De werkelijke lijst is overigens veel langer; zo'n 600 rijen en groeiend. Sorteren: eerst op Productgroep nr., daarna op Productnummer (besef me dat dit in het voorbeeld niet helemaal het geval is).

Bekijk bijlage voorbeeld prijslijst.xlsx
 
Jan Karel,

Jouw oplossing ziet er goed uit. Kost wel meer breedte waardoor we naar liggend formaat moeten, maar dat is niet zo'n probleem. Productgroep nr. neem ik dan gewoon mee in de draaitabel t.b.v. de sortering en vervolgens verberg ik die kolom.

Paar puntjes op de i nog:

  • In sommige kolommen zijn de waarden vet. Celopmaak aanpassen naar normaal werkt niet. Is daar wat aan te doen?
  • De query voor de brondata laat ik automatisch verversen bij openen bestand. Kan ik nadat dit gereed is ook automatisch de draaitabel laten verversen?
 
VBA lijkt me onvermijdelijk:

Code:
Sub M_snb()
  Sheet1.Cells(1).CurrentRegion.Sort Sheet1.Cells(1), , Sheet1.Cells(1, 3), , , , , 1
  sn = Sheet1.Cells(1).CurrentRegion.Resize(Sheet1.Cells(1).CurrentRegion.Rows.Count + 1)
    
  c00 = "1"
  For j = 2 To UBound(sn) - 1
    If sn(j, 2) = sn(j - 1, 2) Then
      c00 = c00 & " " & j
    Else
      c00 = c00 & " " & UBound(sn) & " " & j
      c01 = c01 & "|" & sn(j, 2)
    End If
  Next
  st = Split(c01, "|")
    
  sp = Application.Index(sn, Application.Transpose(Split(c00)), Evaluate("transpose(row(3:" & UBound(sn, 2) & "))"))
  For j = 1 To UBound(sp)
    If sp(j, 1) = "" Then
      y = y + 1
      sp(j, 2) = st(y)
    End If
  Next
    
  Sheet2.Cells(30, 1).Resize(UBound(sp), UBound(sp, 2)) = sp
End Sub
 
Laatst bewerkt:
Je kunt rijkoppen uitvinken op het tabje ontwerpen om van de vette cellen af te komen.
Bovendien kan je je gegevens rechtstreeks als bron voor de draaitabel laten dienen in plaats van eerst op een tabblad te plaatsen en dan vernieuwen inschakelen.
 
Bedankt voor jullie bijdragen. Ik heb voor de optie zonder VBA gekozen. Het is helemaal naar wens van de collegae :thumb:
 
Dan zou ik in cel A2 zetten:

PHP:
=IF(COUNTIF($B$2:$B2;$B2)=1;$B2;"")
Doortrekken naar beneden.
Kolom B verbergen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan