16. oktober 2002 - 00:41Der er
22 kommentarer og 1 løsning
VBA-kode på at splitte en tabel til flere.
Jeg håber en kan hjælpe mig - jeg har et tabel med fondskode, papir og papirtype. Jeg skal have lavet 3 nye tabeller separeret på papirtyper. Det hele skal programmeres i VBA. Har nogle et godt forslag
EKS. på tabel 991996 6Stat11 Stat 974072 6Nyk32 Realkredit 926205 4RD04 Flex 991783 7Stat04 Stat 925799 6RD29 Realkredit 926140 4RD05 Flex Disse skal ud i tre nye tabeller fordelt på Stat,Real, Flex. Jdg skal have det programmeret i VBA - da tabellen er væsentligt større end beskrevet.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Slettet bruger
16. oktober 2002 - 01:11#1
1. Er der kun 3 kolonner i arket ? 2. Må de separerede tabellerne gerne ligge i hver deres faneblad ? 3. Ligger værdierne altid i samme kolonne ?
Nej der er flere kolonner men de er mere eksemplet i det! Det ville være en fordel med kun et faneblad (er stort i forvejen) men ingen betingelse. Og ja værdierne ligger altid i samme kolonne og skal altid flyttes til samme kolonne.
Eller funktionen Sorter? Sortering kan tage visse dele af en matrix og lægge ud et andet sted, baseret på kriterier...
Der findes mange muligheder, og med mindre dette er en gentagende hændelse, så kan det måske være overkill at begynder at programmere sig ud af problemerne. Men ellers kunne dit program se ud som følger :
Sub SplitUpTable()
dim STAT as range dim REAL as range dim FLEX as range dim DATA as range
set STAT =SHEET("STAT").Cells(1,1) set REAL =SHEET("REAL").Cells(1,1) set FLEX =SHEET("FLEX").Cells(1,1)
cells(1,1).select set DATA = range(selection,selection.end(xlDown))
for each cell in DATA if cell.offset(0,3)="Stat" then for x=0 to data.columns.count-1 STAT.end(xldown).offset(1,x)= cell.offset(0,x) next end if
if cell.offset(0,3)="REAL" then for x=0 to data.columns.count-1 REAL.end(xldown).offset(1,x)= cell.offset(0,x) next end if if cell.offset(0,3)="FLEX" then for x=0 to data.columns.count-1 FLEX.end(xldown).offset(1,x)= cell.offset(0,x) next end if next cell
End sub
Jeg skal starte med at sige, at dette ikke er testet, det var bare en ide til, hvordan dette kunne gøres.
Umiddelbart ville jeg bruge funktion Sorter - Kopier til nyt område, men det er selvfølgelig bare mig.
hoineg>> Hvis du sætter din makro-båndoptager igang og laver sorteringen som du gerne hvil have den, så får du en stump kode, som næsten ingen tilretning kræver, for at du kan bruge den i din makro. Vil gætte på at det er den hurtigste løsning i run-time.
Tak for input omkring sortering men det er ikke problemet - eksemplet er dog kraftigt simplificeret og kun en del af et større regneark. Sortering er derfor først aktuelt når uddeling er sket. Men "Xelor" har givet mig lidt input jeg arbejder med - selv om der skal udbygges en del. Tak foreløbig for alle input.
Denne splitter forudsætter følgende: Du har oprettet 3 ark, som er navngivet "STAT", "REAL og "FLEX". Den kolonne som skal evalueres for Stat,Real og Flex er den sidste kolonne i den tabel du evaluerer på.
Sub SplitUpTable() Dim rCell As Range Dim rCurReg As Range Dim sWks As String Dim lRow As Long Dim X As Long
Set rCurReg = ActiveSheet.Range("A1").CurrentRegion
For Each rCell In rCurReg.Columns(1).Cells With rCell sWks = UCase$(Left(.Offset(0, rCurReg.Columns.Count).Value, 4)) lRow = Sheets(sWks).Range("A65536").End(xlUp).Row + 1 For X = 1 To rCurReg.Columns.Count Sheets(sWks).Cells(lRow, X).Value = .Offset(0, X).Value Next X End With Next rCell
Nej - har du celler, hvor der står andet end Stat,Flex eller Real ? Findes disse ark ? hvilken linie stopper makro'en i når du trykker Debug ? Sker der overhovedet noget ? Har du data i celle A1 ? Send mig arket.
Intet sker - jeg får ikke mulighed for en debug. Der er tre kolonner i eksemplet (se spgm.) sidste kolonne indeholder fordelingsnøgle. De tre ark er oprettet. og der er header i A1,B1 og C1.Data er i efterfølgende rækker - med fordelingsnøgle i kolonne C. Jeg kan desværre ikke sende dig andet end eksempelarket, da oprindeligt ark desværre indeholder interne oplysninger, som ikke må videreformidles.
*ss* det er oz den forkerte version af makro'en du har fået LOL - prøv denne her :-)
Sub SplitUpTable() Dim rCell As Range Dim rCurReg As Range Dim sWks As String Dim lRow As Long Dim X As Long
Set rCurReg = ActiveSheet.Range("A1").CurrentRegion Set rCurReg = rCurReg.Offset(1, 0).Resize(rCurReg.Rows.Count - 1, rCurReg.Columns.Count)
For Each rCell In rCurReg.Columns(1).Cells With rCell sWks = UCase$(Left(.Offset(0, rCurReg.Columns.Count - 1).Value, 4)) lRow = Sheets(sWks).Range("A65536").End(xlUp).Row + 1 For X = 0 To rCurReg.Columns.Count - 1 Sheets(sWks).Cells(lRow, X + 1).Value = .Offset(0, X).Value Next X End With Next rCell
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.