[Macro] Excel Sheet > Array > sheet

Pagina: 1
Acties:

  • n3ck
  • Registratie: Mei 2002
  • Laatst online: 24-06 14:26
Ik ben bezig om een eigen "copy and paste"-transposespecial te maken in excel; daarvoor heb ik in een macro ongeveer het volgende gemaakt:

Inlezen selectie naar array
Wat arrayzaken (oa. dus tranpose)

Wat ik nu wil is dat ik niet een selectie inlees, maar een gekopieerd deel en dat ik vervolgens de nieuwe array (die dus niet dezelfde lengte en breedte heeft als het gekopieerde deel) "plak" op de plaats waar de cursor staat.

Het lijkt mij toch dat dit niet erg lastig zou moeten zijn, maar ik heb het nog niet kunnen vinden.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 16-07 12:26

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

wel, je kan het jezelf moeilijk maken en rechtstreeks de gegevens van het klembord inlezen.
maar het eenvoudigste lijkt me het geheel eerst naar een (onzichtbare) tijdelijke sheet te plakken en van daaruit verder te werken.

  • n3ck
  • Registratie: Mei 2002
  • Laatst online: 24-06 14:26
Ik snap niet goed wat er meer in mijn topic moet.. voor de volledigheid zal ik de code posten; ik heb het geheel nog niet op correctheid getest; daar gaat het me hier in eerste instantie ook nog niet om. In vet heb ik aangegeven waar ik wil dat ie doet.

Set Rng = Selection

Nu wordt de selectie ingelezen; ik wil graag dat een gekopieerd stuk ingelezen wordt.

Rw = Selection.Rows.Count - 1
Cl = Selection.Columns.Count - 1
ReDim Arr(Cl, Rw)

i = 0
j = 0
For Each C In Rng
If i > Cl Then
i = 0
j = j + 1
End If

Arr(i, j) = C.Formula
i = i + 1
Next C

Dim trans() As Variant
ReDim trans(Rw, Cl)
a = ""
For i = 0 To Rw
For j = 0 To Cl
trans(i, j) = Arr(j, i)
Next
Next

Hier wil ik graag dat de array trans() in een werkboek geplakt wordt.

Verwijderd

de procedure die ik hoger aangegeven heb werkt toch?

-je kopieert een bereik en selecteert daarna eventueel een doelcel of -bereik binnen of buiten dat bereik
-het gekopieerd bereik plak je in een tijdelijke onzichtbare sheet en op dat bereik laat je de transpose functie los. het resultaat plak je op de plaats van het doelbereik, daarna delete je de tijdelijke sheet.

ik veronderstel dat je op de hoogte bent van de ingebouwde transpose plakken (transponeren) functie in excel.

  • n3ck
  • Registratie: Mei 2002
  • Laatst online: 24-06 14:26
Het probleem is dat ik iets met functies wil doen en dat ie dus niet relatieve dingen moet transponeren. Even een simpel voorbeeldje:

a1='=sheet1!a1'
a2='=sheet1!a2'

Stel nou ik kopieer dat en ik transponeer dat middels de excel methode naar de cel c4 maakt excel daar:

c4='sheet1!c4'
d4='sheet1!d4'

van.

Dat moet dus niet. Dan denk je dus: ach: geen probleem.. dan maak ik er sheet1!$a$1 van.. dat maakt niet uit.
Daarom ben ik dus op het idee gekomen om er maar een macro voor te maken.

Verwijderd

als je de referenties in de formules uit het bronbereik absoluut maakt, dan worden deze bij het transponeren bewaard. als het bereik gekopieerd wordt naar een ander blad, moet de verwijzing naar het bronblad in de formules opgenomen zijn.

  • n3ck
  • Registratie: Mei 2002
  • Laatst online: 24-06 14:26
Verwijderd schreef op donderdag 02 augustus 2007 @ 12:15:
als je de referenties in de formules uit het bronbereik absoluut maakt, dan worden deze bij het transponeren bewaard. als het bereik gekopieerd wordt naar een ander blad, moet de verwijzing naar het bronblad in de formules opgenomen zijn.
Hoe bedoel je dat precies? Als je gewoon kopieert en plakt is het inderdaad met absolute referenties (dus a1='=sheet1!$a$1') dan blijft die referentie behouden inderdaad, maar als je dus gaat transponeren komt Excel op het briljante idee dat ie die $'s maar weg gaat halen. Ik heb hier geen mogelijkheid om even een sheet te uploaden om te laten zien wat ik bedoel, maar als het mogelijk is om te transponeren zodanig dat de formules an sich behouden blijven ben ik al heel erg blij.

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 09-07 19:01
Als ik cellen A4:C5 kopieer en Special Paste, Transponeer op cel A7, krijg ik wel wat jij wilt.

ABC
1123
2456
3
4=$A$1=$B$1=$C$1
5=$A$2=$B$2=$C$2
6
7=$A$1=$A$2
8=$B$1=$B$2
9=$C$1=$C$2

  • n3ck
  • Registratie: Mei 2002
  • Laatst online: 24-06 14:26
Hmm.. dat gaat bij mij ook goed inderdaad; alleen met die referenties naar een andere sheet gaat niet goed. Dan ga ik het gewoon op deze manier doen. Scheelt een hoop uitgezoek!

Thanks!
Pagina: 1