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

rijen verplaatsen naar boven en lege rij verwijderen

Status
Niet open voor verdere reacties.

pat007

Gebruiker
Lid geworden
10 feb 2008
Berichten
51
Goeie avond,

Kan hier iemand mij helpen om rijen van bv a2 en b2 te verplaatsen naar b1 en b2. Daarna de lege rij verwijderen. Volgend is dan a2 laten staan en met a3 de zelfde cellen terug te verschuiven.
In het voorbeeld heb ik er 2 manueel gedaan, maar het gaat eigenlijk over enkele duizenden rijen. Die manueel doen is zeer tijdrovend.

Al vast bedankt om mee te denken aan mijn probleem.

Mvg,

Pat007
 

Bijlagen

Neem z'n handeling eens op met de macrorecorder.

Om in je voorbeeld verder te gaan, bedoel je A6 naar B5 en B6 naar C5 en dan rij 6 verwijderen?
Wat moet er dan op dat moment met de waarde in D5 gebeuren?
 
Laatst bewerkt:
Het resultaat komt op Blad2.
Code:
Sub hsv()
Dim sn, arr, i As Long
sn = Cells(1).CurrentRegion
ReDim arr(2, 0)
    For i = 2 To UBound(sn) Step 2
      arr(0, UBound(arr, 2)) = sn(i, 1)
      arr(1, UBound(arr, 2)) = sn(i + 1, 1)
      arr(2, UBound(arr, 2)) = sn(i + 1, 2)
      ReDim Preserve arr(2, UBound(arr, 2) + 1)
     Next i
 Blad2.Cells(1).Resize(UBound(arr, 2), 3) = Application.Transpose(arr)
End Sub

Natuurlijk in je voorbeeldbestand de rijen 2 t/m 4 zoals zo horen te staan (zie bijlage).
 

Bijlagen

Laatst bewerkt:
Of iets anders geschreven.

Code:
Sub VenA()
ar = Sheets("Page 1").Cells(1).CurrentRegion
ReDim ar1((UBound(ar) - 1) / 2, 2)
For j = 2 To UBound(ar) Step 2
    ar1(t, 0) = ar(j, 1)
    ar1(t, 1) = ar(j + 1, 1)
    ar1(t, 2) = ar(j + 1, 2)
    t = t + 1
Next j
Sheets("Page 2").Cells(1).Resize(UBound(ar1) + 1, 3) = ar1
End Sub
 

Bijlagen

of

Code:
Sub M_snb()
  sn = [if(mod(row(2:201),2)=0,A2:A201&"_"&A3:A201&"_"&B3:B201,"")]

  Cells(1, 10).Resize(UBound(sn)) = sn
  Columns(10).SpecialCells(4).EntireRow.Delete
  Columns(10).TextToColumns , , , , 0, 0, 0, 0, -1, "_"
End Sub
 
@HSV,

Ik volg dit topic met belangsteling.

Zou je kunnen uitleggen waarom? Je geeft een bereik een bepaalde grootte? De eerste 2 is een totaal van 3 kolommen? De 0 is de eerste rij?

Code:
ReDim arr(2, 0)

En zou je kunnen uitleggen wat Preserve doet?

Code:
ReDim Preserve arr(2, UBound(arr, 2) + 1)

Greetz/Excelbat
 
Altijd prima natuurlijk.

Een array is een container (opslag), maar stel maar even voor dat het rijen en kolommen zijn.
Ik heb de rollen omgedraaid in de array doordat je de laatste matrixdimensie in de array alleen maar kan verhogen.
Ik verhoog de 0 telkens met 1 wat in dit geval de rijen gaan voorstellen i.p.v. de kolommen.

Ik weet op voorhand dat het maar drie kolommen worden (de 2 in de array; 0, 1, 2 = 3 kolommen).
In dit geval was het gemakkelijk om de array grootte vast te stellen van de rijen (immers het aantal rijen delen door 2).
In sommige gevallen weet je het niet en is dit een prachtige manier om de grootte gewoon op te hogen.
Aan het einde van de code gebruik ik transpose om de rijen de kolommen te laten worden en andersom.
 
Een Redim zonder Preserve maakt bij het wijzigen van de dimensies de array leeg.
Preserve zorgt ervoor dat de waarden behouden blijven.
 
Thanx HSV en Edmoor,

Dank voor jullie uitleg. Ik ben erg geïnteresseerd in berekeningen in het geheugen (in de cloud, zoals ik het noem).
Iedere keer leer ik hierdoor weer een beetje bij.
Ook de code van VenA #4 is begrijpelijk voor mij en toepasbaar op mijn eigen bestanden.
Beetje bij beetje kom ik zo verder met VBA.

Greetz/Excelbat
 
"In de cloud" is wel heel iets anders dan werken in het geheugen ;)
 
@edm

Hangt van de kwaliteit van je eigen geheugen af.... (zie Bernlef) ;)
 
Het blijft een grijs gebied :D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan