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

Hoe kopieer ik een tabel en laat de lege cellen weg?

Status
Niet open voor verdere reacties.

supervinnie40

Gebruiker
Lid geworden
28 apr 2016
Berichten
28
Hallo forumleden,

Ik heb een Excel lijst gemaakt waarin iemand kan aanvinken welke gerechten hij/zij wil bestellen. Dit is een lijst van 95 items.
Eigenlijk is het de bedoeling dat op tabblad 2 een tabel komt te staan met de artikelen die geselecteerd zijn.

Ik had al zoiets geprobeerd als =ALS(ISLEEG(Blad1!D21);"";D21), maar als een cel op Blad1 niet geselecteerd is, blijft de cel op Blad2 gewoon leeg.

Wanneer op Blad1 dit geselecteerd zou zijn:
BorrelbuffetX
Borrelbuffet 1
Borrelbuffet 2X
Borrelbuffet 3X
Borrelbuffet 4
Borrelbuffet 5
Borrelbuffet TapasX
Dan is dit het resultaat
Borrelbuffet

Borrelbuffet 2
Borrelbuffet 3


Borrelbuffet Tapas

Ik zou willen dat het er zo uit komt te zien:
Borrelbuffet
Borrelbuffet 2
Borrelbuffet 3
Borrelbuffet Tapas

De lege (niet-geselecteerde) velden moeten dus geen lege cellen achterlaten.

Kan iemand mij vertellen hoe dit mogelijk is? En/of welke Excel formule/functie ik hier voor moet leren/bestuderen? Want 95 cellen moeten straks op 1 of 2 A4tjes passen. Het is namelijk de bedoeling dat er op Blad2 een verzameling tekst verschijnt die direct uitgeprint kan worden als een offerte.

Bekijk bijlage Offerte-partycentrum.xlsx
 
Misschien is het handig dat je wat invult in het bestandje. Waar ga je de 'x-en' neerzetten en waar moet de verwachte uitkomst komen?
 
Ik heb het Excel bestand gevuld met de items voor de Catering. Ik heb ook op het 2de blad aan proberen te geven wat pagina1, pagina2 etc. moet zijn.
Op dit moment vult de lijst van catering zo'n 3 pagina's, wat helemaal niet nodig is. Het gebeurt eigenlijk nooit dat er zoveel afgenomen wordt dat er meer dan 1 pagina mee gevuld kan worden.Bekijk bijlage Offerte-partycentrum.xlsx
 
kun je hier iets mee?
met behulp van http://www.snb-vba.eu/VBA_Arrays.html
Code:
Sub lijst()
sn = Sheets("Invul formulier").Range("A1:E145")
For i = 1 To UBound(sn)
 If sn(i, 4) <> "" Then c00 = c00 & "_" & i
Next i
a_sp = Application.Index(sn, Application.Transpose(Split(Mid(c00, 2), "_")), Array(1, 2, 3, 4, 5))

Sheets("Offerte").Cells(63, 1).CurrentRegion.ClearContents
Sheets("Offerte").Cells(63, 1).Resize(UBound(a_sp, 1), UBound(a_sp, 2)) = a_sp
End Sub
 
Ziet er heel interessant uit, ik moet alleen nog even Googlen hoe ik dit toepas in Excel.
 
Of zonder lus.
Code:
Sub hsv()
Dim sn, a_sp, c00 As String
With Sheets("invul formulier")
 .Range("a1:a" & .Cells(Rows.Count, 1).End(xlUp).Row).Name = "Bereik"
End With
sn = Range("bereik").Resize(, 5)
   c00 = Join(Filter([transpose(if(offset(bereik,,3)<>"",row(bereik),"~"))], "~", False), "|") & "|"
     a_sp = Application.Index(sn, Application.Transpose(Split(c00, "|")), Array(1, 2, 3, 4, 5))
      
       Sheets("Offerte").Cells(63, 1).CurrentRegion.ClearContents
       Sheets("Offerte").Cells(63, 1).Resize(UBound(a_sp, 1) - 1, UBound(a_sp, 2)) = a_sp
    Application.Names("bereik").Delete
End Sub
 
Dat script werkt vrij goed. Het enige dat ik jammer vind is dat het niet blijft draaien. Als ik in Visual Basic op F5 druk, en terug ga naar mijn Excel, dan zie ik de verandering. MAar als ik daarna iets aanpas op Blad1, dan is dat niet zichtbaar op Blad2. Ik moet dan eerst weer in Visual Basic op F5 drukken.

Of moet ik een instelling aanpassen hiervoor?
 
Ik zal eens wat dieper in Google duiken wat betreft die VBA. Op zich is het script hierboven best prima, ik moet alleen even kijken hoe ik ervoor zorg dat het gewoon blijft lopen en ik niet steeds op F5 hoef te drukken.
 
Dat zou niet mijn eerste keus zijn.
 
In de bijlage een oplossing zonder VBA. Dit zal vast mooier/makkelijker kunnen maar werkt wel.

Bekijk bijlage Offerte-partycentrum.xlsx

De eerder aangedragen oplossing in VBA kun je onder een knop hangen zodat je dit direct kunt starten vanaf je werkblad.

@snb: Ik heb al vele prachtige oplossingen van u gezien op dit forum, maar voor deze vraag ben ik wel van mening dat het wel heel makkelijk is de vraagsteller een VBA oplossing aan te dragen en dan te zeggen dat hij/zij de werking maar moet uitzoeken.
 
Ik zal eens wat dieper in Google duiken wat betreft die VBA. Op zich is het script hierboven best prima, ik moet alleen even kijken hoe ik ervoor zorg dat het gewoon blijft lopen en ik niet steeds op F5 hoef te drukken.

Je kan beter de macro koppelen aan een knop op je werkblad
 
@Hans 123,

Ik heb zo 123 geen oplossing aangedragen in deze draad.
 
Laatst bewerkt:
Dat zou niet mijn eerste keus zijn.
Aangezien ik niet de enige ben die hiermee werkt, moet het simpel en gemakkelijk zijn. Als ik het zo kan maken dat ik niets hoef uit te leggen over werking, dan is dat veel handiger voor de anderen (en bespaard op termijn juist weer tijd). Maar wat niet kan, dat kan niet. Eerst nog even leren.
In de bijlage een oplossing zonder VBA. Dit zal vast mooier/makkelijker kunnen maar werkt wel.

Bekijk bijlage 278291

De eerder aangedragen oplossing in VBA kun je onder een knop hangen zodat je dit direct kunt starten vanaf je werkblad.

@snb: Ik heb al vele prachtige oplossingen van u gezien op dit forum, maar voor deze vraag ben ik wel van mening dat het wel heel makkelijk is de vraagsteller een VBA oplossing aan te dragen en dan te zeggen dat hij/zij de werking maar moet uitzoeken.
Bedankt voor die oplossing, ik moet nu alleen nog een klein beetje bekijken hoe dit precies werkt. Als ik weet hoe het precies werkt kan ik het in de toekomst misschien zelf gebruiken. Ik wil er ook graag een beetje van leren.
Je kan beter de macro koppelen aan een knop op je werkblad
Zodra ik gelezen heb hoe dit werkt hoe ik zoiets in mijn achterhoofd. Ik ben niet de enige die hierin werkt, dus het moet wel een beetje gebruiksvriendelijk zijn.
 
Google zou niet mijn eerste keus zijn.
 
Voor de oplossing zonder VBA moet je er wel rekening mee houden dat de formules op je offerte blad in kolom A matrix formules zijn. Invoer moet afgesloten met ctrl+shift+enter anders zal het niet werken.

De essentie is dat er met "vergelijken" gezocht wordt in een bereik dat wordt aangepast op basis van de eerder gevonden waarden. vergelijken geeft namelijk alleen de eerst gevonden waarde terug. Hierbij geeft de formule in kolom A het regelnummer terug van de ingevulde cellen in het blad "invul formulier". Met dit regelnummer worden dan de overige cellen gevuld.
 
Geheel tussen neus en lippen door: Ik heb even een kleine ingeving, misschien totaal nutteloos maar het kwam ineens in me op. Ik zit nu in de trein en kan het dus niet uitproberen.

Stel dat ik met =ALS(ISLEEG(Blad1!A19);"";"A19") ervoor zorg dat de geselcteerde items gekopieerd worden naar een extra werkblad (dat verder niet gebruikt wordt).
Vervolgens gebruik ik in die formule "=TEKST.SAMENVOEGEN(A19;",")" om een komma aan het einde van elk item te zetten.
Daarna gebruik in in een cell ernaast "=TEKST.SAMENVOEGEN(A19;A20;A21;A22 etc. ) om alles achter elkaar te zetten.
In dat laatste resultaat zitten geen gaten, omdat lege velden gewoon niet tonen in die grote opsomming.

Dan zou ik alleen nog een formule nodig hebben die de eerste komma zoekt en de tekst ervoor in een cell plaats. Dan daaronder een formule die de 2de komma zoekt en de tekst tussen de 1ste komma en de 2de komma in een cell plaatst. Enz enz.

Ik snap dat dit omslachtig is (en lang niet zo technisch als vele het kunnen maken hier). Maar wel makkelijker voor mij om te maken, te onderhouden en eventueel te bewerken.

Als dit echt kletspraat is, dan negeer dit bericht maar. Ik kwam op dit idee na het lezen van een blog over hoe je veel data op veel verschillende manieren kunt bewerken.
 
Zet onderstaande eens in werkbladmodule "invulformulier" en verander dan eens wat in dat werkblad; zie daarna het resultaat op het ander blad.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sn, a_sp, c00 As String
If Not Intersect(Target, Columns("a:e")) Is Nothing Then
 Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).Row).Name = "Bereik"
sn = Range("bereik").Resize(, 5)
   c00 = Join(Filter([transpose(if(offset(bereik,,3)<>"",row(bereik),"~"))], "~", False), "|") & "|"
     a_sp = Application.Index(sn, Application.Transpose(Split(c00, "|")), Array(1, 2, 3, 4, 5))
       Sheets("Offerte").Cells(63, 1).CurrentRegion.ClearContents
       Sheets("Offerte").Cells(63, 1).Resize(UBound(a_sp, 1) - 1, UBound(a_sp, 2)) = a_sp
    Application.Names("bereik").Delete
End If
End Sub
 
Dat werkt perfect. Ik was zelf al een beetje aan het rommelen met jouw eerste script, met het idee dat ik al-doende wel zou uitvogelen wat precies wat doet, maar daar kwam ik niet heel ver weg.
Ik heb jouw nieuwe script toegepast en het werkt precies zoals ik dat wil. Helemaal goed :D :D

Bedankt voor de hulp (iedereen). Ik heb in ieder geval wel heel wat nuttige blogs en tutorials gelezen in de hoop dat ik zelf het antwoord kon vinden. Maar ik denk dat ik nog een lange weg te gaan heb voor ik dat soort scripts kan maken.


Edit: *Ik bleek zelf een foutje te hebben gemaakt, mijn edit klopte niet*
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan