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

Automatisch een x aantal kolommen invoegen afhankelijk van een waarde.

Status
Niet open voor verdere reacties.

BastS

Gebruiker
Lid geworden
12 mrt 2015
Berichten
52
Hallo,

Momenteel ben ik bezig met energieverbruiken van een willekeurige pand. Nu wil ik op mijn invoerblad de verbruik data van mijn energiemeters in kunnen vullen. Echter is het mogelijk dat ik meerdere elektra en/of gasmeters heb. Dus heb ik op mijn invoerblad een mogelijk gecreëerd om aan te geven hoeveel meters ik heb,maximaal 5 per soort meter.

Mijn vraag: is het mogelijk om automatisch (misschien met een macro) de hoeveelheid kolommen te krijgen die ik aangegeven heb in het veld waarin ik aangeef hoeveel meters ik heb. Dus om de ene keer 4 kolommen te hebben, en als ik het aantal meters terugbreng dat dan automatisch het aantal kolommen mee teruggaat. Hierbij zou als optionele wens zijn dat de kolommen genummerd worden.

Zonder een voorbeeld is de vraag hierboven niet duidelijk dus vandaar heb ik een voorbeeld meegestuurd.

Alvast dank.
Bekijk bijlage 231861
 
Hallo mvw64,

Allereest bedankt voor je inzet. Dit is al een verbetering. Echter nu is het geval dat elke keer dat een nummer geselecteerd wordt er een hoeveelheid kolommen ingevoegd wordt gelijk aan dat nummer. Het is de bedoeling dat het nummer het totale aantal kolommen aangeeft. Is dit mogelijk?

Groeten.
 
Deze vraag is opgelost, echter momenteel heb ik een soort gelijk probleem.
Ik wil op een volgend tablad 6 kolommen invoegen aan de hand van de hierboven benoemde waarden.
Deze 6 kolommen hebben een naam die vermeld staat in de tweede rij. En in de rijen eronder komt een formule te staan.

Het is niet nodig om rijen in te voegen, de rijen kunnen ook gewoon benoemd worden. Zoals in de code van zapatr.
 
BastS,
probeer dat nu eerst eens zelf !
Aan de hand van mijn eerdere oplossing zou je dat nu toch zelf moeten kunnen. En stuit je nog op een probleem, dan kan er hier alsnog worden geholpen. Zoals HSV gisteren op dit forum nog schreef: zan zelf puzzelen leer je het meest.
 
Ik had zelf al het een en ander geprobeerd maar kom er niet uit. Als ik onderstaande code gebruik krijg ik het gewenste resultaat bij een elektrameter echter bij meerdere gaat het mis. Hij schuift een kolom op en ik wil dus dat hij 7 kolommen opschuift. Omdat er anders kolommen met waarden overschreven worden.

Ik had verwacht dat ik met een offset functie en een relatieve verwijzing er zou zijn, echter deze oplossing krijg ik dus ook niet werkend.


Code:
Dim x As Integer, estr As String, estr1 As String, estr2 As String, estr3 As String, estr4 As String, estr5 As String, estr6 As String

estr = "Verbruik elektrameter "
estr1 = "U "
estr2 = "D"
estr3 = "W"
estr4 = "I"
estr5 = "B"
estr6 = "S"

Application.ScreenUpdating = False

Range("I2:BU" & Range("A" & Rows.Count).End(xlUp).Row).ClearContents
Range("I2:BU2").Borders(xlEdgeBottom).LineStyle = xlNone

For x = 9 To Worksheets("Invoerblad").Range("b9").Value + 8
    With Cells(2, x)
    .ColumnWidth = 30
    .Value = estr & (x - 8)
    .Borders(xlEdgeBottom).Weight = xlThin
    End With
    With Cells(2, x + 1)
    .ColumnWidth = 30
    .Value = estr1 & (x - 8)
    .Borders(xlEdgeBottom).Weight = xlThin
    End With
    With Cells(2, x + 2)
    .ColumnWidth = 30
    .Value = estr2 & (x - 8)
    .Borders(xlEdgeBottom).Weight = xlThin
    End With
    With Cells(2, x + 3)
    .ColumnWidth = 30
    .Value = estr3 & (x - 8)
    .Borders(xlEdgeBottom).Weight = xlThin
    End With
    With Cells(2, x + 4)
    .ColumnWidth = 30
    .Value = estr4 & (x - 8)
    .Borders(xlEdgeBottom).Weight = xlThin
    End With
    With Cells(2, x + 5)
    .ColumnWidth = 30
    .Value = estr5 & (x - 8)
    .Borders(xlEdgeBottom).Weight = xlThin
    End With
    With Cells(2, x + 6)
    .ColumnWidth = 30
    .Value = estr6 & (x - 8)
    .Borders(xlEdgeBottom).Weight = xlThin
    End With
Next x
 
Ik heb pas vanavond tijd om er naar te kijken en zal je dan antwoorden (als anderen dat dan nog niet gedaan hebben). Wat meteen opvalt is dat je in de macro niet aangeeft op welk blad de macro moet worden uitgevoerd, dan loopt het zonder meer al fout. En verder: in het bestand dat ik bij bericht 4 plaatste, moet de macro in module 1 (of de gehele module) worden verwijderd.
 
@ zapatr jouw macro staat bij mij onder het invoerblad, niet onder een module. En ik had gedacht deze macro op te roepen aan het eind van jouw vorige macro.
Uiteraard snap ik dat er een verwijzing naar het blad bij moet komen. Maar ik voerde de macro nu telkens handmatig uit om de code te controleren of het gewenste resultaat werd bereikt.
 
Je macro roept een aantal vragen op, want ik begrijp het nog niet helemaal.

1. Je wil op een nieuw blad (dat ik hier Blad2 noem) 7 kolomkoppen maken met de volgende tekst:
Verbruik elektrameter - U - D - W - I - B - S.
Achter die kolomkoppen komt steeds een getal; in jouw voorbeeld is dat een 1, maar kan dat ook 2 of hoger zijn? Zo ja, wanneer dan?

2. Is er een verband tussen de kolomkoppen op "Blad2" en de kolomkoppen op het "Invoerblad"? Zo ja, welk?

3. Moeten de kolomkoppen op Blad2 gelijktijdig gemaakt worden met die op het Invoerblad?
 
Op het invoerblad kan ik dankzij jouw 5 verschillende elektra en gas meters aangeven. Op blad 2, het rekenblad wil ik per elektra meter een aantal berekeningen doen(de 7 kolommen). Om uiteindelijk de interessante gegevens uit te zetten in grafieken.

Dus antwoord op jouw vragen:
1. Ja, het getal kan oplopen tot 5, afhankelijk van hoeveel elektra meters er zijn.
2. Ja, per elektra meter gebruik ik 7 koppen om dingen te berekenen.
3. De kolomkoppen zijn afhankelijk van die op het invoerblad, dus in de code moet het sowieso na de tijd.
Omdat anders niet bekend is hoeveel elektra meters er zijn.

De vraag is nu gesteld op de elektra meters, maar straks geld hetzelfde voor de gas meters echter dit wil ik zelf doen aan de hand van de eventuele oplossing.
 
Als op het invoerblad is gekozen voor 1 elektrameter, moeten dan in blad2 zeven kolomkoppen komen (zoals hierboven genoemd) met allemaal het getal 1 er achter?
En als gekozen is voor 2 of meer elektrameters, waar moeten dan diezelfde 7 kolomkoppen komen met het getal 2 (of 3, 4, 5) er achter? Op volgende bladen?
 
Met deze vraag roep jij bij mij ook vragen op. In eerste instantie had ik het zo bedacht:
- Gekozen voor 1 elektra meter, in blad 2 zeven kolomkoppen koppen zoals benoemd.
- Gekozen voor 2 elektra meters, in blad 2 14 kolomkoppen. Eerst 7 kolomkoppen zoals benoemd. Dan 7 kolomkoppen met dezelfde tekst en het nummer 2.
enz.

Het uiteindelijke doel is om deze gegevens in grafieken te zetten. Ik ben bang dat als er meerdere bladen gebruikt gaan worden dat de macro te traag wordt.
Het zou dan kunnen resulteren in 10 werkbladen (5 elektra & 5 gas).
 
Die 14 kolomkoppen dan allemaal NAAST elkaar neem ik aan, vanaf kolom I?
 
Laatst bewerkt:
In het geval van twee elektra meters wel ja. Jep, allemaal naast elkaar vanaf kolom I.
 
zie bijlage.
Enkele opmerkingen:
Herhalingen van dezelfde code (zoals in bericht 8) moet je zoveel mogelijk voorkomen. En als je randen wil maken of kolombreedtes in wil stellen, dan moet je dat niet per cel doen maar voor alle cellen tegelijk. Opmaak van cellen en randen via vba instellen werkt ook nogal vertagend. Als opmaak en kolombreedte onveranderlijk blijven, dan kun je die beter eenmalig handmatig instellen dan steeds met een macro.
 

Bijlagen

@ zapatr Bedankt voor de opmerkingen en de code het is gelukt. Aan de hand van jouw code was het vrij makkelijk om het toepasbaar voor de gasmeters te maken. Maar door dit de doen snap ik nu je gehele code, bedankt.
:thumb:
 
Je hebt hopelijk voor de gasmeters niet het gehele tweede deel van de macro gekopieerd, want dat is niet nodig. Alleen het gedeelte tussen 'Do until... - Loop' moet daarvoor aangepast worden. Dan is het even puzzelen om te bepalen met welke kolommen je precies bezig bent maar dat heeft niet zoveel met programmeren te maken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan