22. marts 2006 - 23:44Der er
39 kommentarer og 1 løsning
sammenlægning af kolonner
Jeg har to kolonner med navne og blanke celler ind i mellem. Jeg vil gerne have at der dannes en ny kolonne hvor navnene føres over uden blanke celler så navnene står under hinanden. Kolonnerne med navne er B og C og går fra række 6 til 200 og de skal flyttes over i A.
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
kan du ikke trykke på helt til venstre på det tal som står for rækken ? du har jo tallene til venstre og bogstaverne oppe . så hvis du kunne trykke på et tallene som du skulle flytte og højre klikke med musen og tryk på kopier og derefter gå hen til den række du vil sætte og trykke sæt ind
ærlig talt så ved jeg ikke hvor du skal kopier fra til hvor men det havde været rart hvis du kunne tage et billed af skærmen med print screen på tastauret og derefter sætte det herinde
start exel op og find den dokument du skulle flytte om på
tryk på tasterne sammetidig CTRL + ALT + PRINT SCREEN
print screen kan du finde på tasturet helt til højre øverst
derefter kan du åbne din paint program , tryk på CTRL + V så kan du se billedet af din skærm . gem det på din skivebord
brug internet siden http://www.imageshack.us/ til oploade billedet derefter kan du skrive linket til siden herinde efter du har oploadet det vil være til stor hjælp
Hvis jeg har forstået spørgsmålet rigtig, har du henholdsvis for- og efternavn i kolonnerne B og C. F.eks. "Hans" i B6 og "Hansen" i C6 Hvis dette er rigtig, kan du gøre følgende, for at få A6 til at vise "Hans Hansen":
Markér kolonnerne B og C Tryk ctrl+G Tryk på "Special" Brug funktionen tomme celler Brug derefter crtl+minus for at slette de tomme rækker
Sub join() 'Lister B6 derefter C6, så B7,C7,B8,C8 osv. Dim i, j Dim join(500) Application.ScreenUpdating = False [b6].Activate For i = 1 To 500 Step 2 join(i) = ActiveCell.Value join(i + 1) = ActiveCell.Offset(0, 1).Value ActiveCell.Offset(1, 0).Activate Next
[a6].Activate For j = 1 To 500 If join(j) = "" Then GoTo om ActiveCell.Value = join(j) ActiveCell.Offset(1, 0).Activate om: Next Application.ScreenUpdating = True [a1].Activate End Sub
Synes godt om
Slettet bruger
23. marts 2006 - 07:35#5
For at få indholdet i eks B3 og C3 sat sammen i A3 skriver du i A3 =SAMMENKÆDNING(B3;C3)
Fra menuen kan du vælge "Indsæt / Funktion" derefter finder du sammenkædning (Concatinate vis det er en Engelsk version)
Indsættes i A6, tryk ctrl+shift+enter og kopier ned. =HVIS(TÆLV(A$5:A5)>=TÆLV($B$6:$C$200);"";HVIS(TÆLV(A$5:A5)>=TÆLV($B$6:$B$200);INDIREKTE("c"&MINDSTE(HVIS($C$6:$C$200<>"";RÆKKE($C$6:$C$200));RÆKKE(A1)-TÆLV($B$6:$B$200)));INDIREKTE("b"&MINDSTE(HVIS($B$6:$B$200<>"";RÆKKE($B$6:$B$200));RÆKKE()-RÆKKE($A$5)))))
Jeg tror mrjh har fat i noget af det rigtige. Har dog ikke tid pt til at tjekke. Det er ikke navne som skal sættes sammen. Det kan fx være at kolonne B indeholder: Peter, Jens, "BLANK", HANS og C indeholder Kurt, "BLANK", Emil. Jeg vil derfor gerne have dem sat sammen i én kolonne uden blanke celler, så den hedder: PETER, JENS, HANS, KURT og EMIL - rækkefølgen ændres senere. Jeg havde før en formel der satte én kolonne sammen uden blanke og den ligner mrjh's forslag, men kigger lige på det senere.
Det ser også ud til at excelent har fat i noget af det rigtige, men jeg har intet kendskab til VBA så jeg skal lige bruge en guide i hvordan jeg kan prøve formlen af. Jeg kan lige finde ud af at komme ind i VBA og der stopper det. ;)
Det virker excelent. Men jeg forstår ikke helt din sidste kommentar? Jeg vil gerne have sådan at hvis der automatisk kommer et nyt navn i kolonne B eller C så føres det over til A. Det gør det ikke nu. Skal jeg gemme VBA på nogen bestemt måde?
Du har også i et af de gamle indlæg beskrevet følgende formler: =CELLE("indhold";INDIREKTE(ADRESSE(SAMMENLIGN(H1;F1:F100;0)-1;6))) =CELLE("indhold";INDIREKTE(ADRESSE(SAMMENLIGN(H1;F1:F100;0)+1;6)))
Jeg kan ikke helt få det til at virke når F er i et andet ark, så den fx hedder =CELLE("indhold";INDIREKTE(ADRESSE(SAMMENLIGN(A13;engagement!F7:F300;0)+1;6))) kan du se hvad der er galt? I A13 står der 2004 og det gør der også i række 14 under engagement hvor der så står tal ovenoven og nedenunder...
skal navnene sorteres stigende, og kolonne B og C slettes kan du anvende denne kode :
Sub join() 'Lister B6 derefter C6, så B7,C7,B8,C8 osv. Dim i, j Dim join(500) Application.ScreenUpdating = False [b6].Activate For i = 1 To 500 Step 2 join(i) = ActiveCell.Value join(i + 1) = ActiveCell.Offset(0, 1).Value ActiveCell.Offset(1, 0).Activate Next
[a6].Activate For j = 1 To 500 If join(j) = "" Then GoTo om ActiveCell.Value = join(j) ActiveCell.Offset(1, 0).Activate om: Next Range("B6:C200").Select Selection.ClearContents Range("A6:A200").Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal
Application.ScreenUpdating = True [a1].Activate End Sub
Havde ikke lige forstået at der kunne tilkomme nye navne, så her er en tilrettet makro til det.
Sub joinABC() 'Lister B6+C6 i A6 osv. Dim i, j Dim join(600) Application.ScreenUpdating = False [A6].Activate For i = 1 To 400 Step 3 join(i) = ActiveCell.Value join(i + 1) = ActiveCell.Offset(0, 1) join(i + 2) = ActiveCell.Offset(0, 2) ActiveCell.Offset(1, 0).Activate Next Range("A6:C200").Select Selection.ClearContents
[A6].Activate For j = 1 To 400 If join(j) = "" Then GoTo om2 ActiveCell.Value = join(j) ActiveCell.Offset(1, 0).Activate om2: Next
Første gang jeg indtaster formlen virker den, men indtaster jeg et nyt navn i Kolonne B eller C sker der intet. Trykker jeg så afspil makro bliver alle de gamle navne talt med to gange og det nye én gang. Hvad gør jeg galt?
Ja det andet spørgsmål var også til dig. Det var et svar til mig i en gammel tråd. Kan ikke forstå hvorfor jeg ikke kan få formlen til at virke.
ps svarer nok først tirsdag da jeg skal til London.
Sub sammenlign() Dim a As Integer, b As Integer, c As Long Range("a:a").ClearContents Range("b6:b200").Select b = 6 For a = 1 To 200 Step 1 If ActiveCell.Value <> "" Then Cells(b, 1).Value = ActiveCell.Value ActiveCell.Offset(1, 0).Activate b = b + 1 Else ActiveCell.Offset(1, 0).Activate End If Next
Range("a6:a200").End(xlUp).Select ActiveCell.Rows = b Range("c6:c200").Select
For a = 1 To 200 Step 1 If ActiveCell.Value <> "" Then Cells(b, 1).Value = ActiveCell.Value ActiveCell.Offset(1, 0).Activate b = b + 1 Else ActiveCell.Offset(1, 0).Activate End If Next
[a1].ClearContents [a6].Activate
End Sub
Ja den er sikkert ikke ligeså elegant som excelents løsning, da det er min første makro jeg nogensinde har lavet fra bunden af (hurraaa) Men den virker knagme :-)
Jo tak excelent. Ja det er sgu rart når noget lykkes, så jeg hoppede rundt som en fjeder da den gjorde det som jeg bad om. Men guru bliver jeg nok aldrig på dette felt. Jeg roder stadig rundt i det med objecter, proterties og methods. Men hva...mindre kan vel også gøre det, når bare man har det sjovt :-) Jeg kan se du sætter 600 direkte ind i den variabel join. Hvad er det lige det betyder og hvorfor sætter du screen.updating til og fra ? (sætter da gerne lidt P. på højkant for at udvide min horisont lidt)
Dim join(600) er for at join variablen kan indeholde værdierne i A6:A200 + vædierne i B6:B200 + C6:C200 = knap 600 værdier ialt
Application.ScreenUpdating = False : sætter skærmopdatering ud af drift Application.ScreenUpdating = True : sætter skærmopdateringen til igen
når du kører din makro, flimrer skærmen en smule - det kan ovenstående forhindre
ja det kom jo bag på mig, at der kunne komme nye navne til, så den skulle jo omskrives lidt for at tage højde for det, så det gik vist lidt hurtigt men den virker dog efter hensigten, (altså den i linket). Iøvrigt virker din formel udmærket, men jeg fik problemer da jeg ville sortere navnene bagefter. ved ikke om spørgeren også skal det.!
Nej du siger noget. Den kan ikke sortere, men liner dem bare op i indtastnings- rækkefølge. Jamen så er der jo lidt at arbejde med. Jeg vidste ikke at man kunne bruge GOTO i VBA. Det er jo ligesom i gamle dage i procedure orienteret kode på en ZX spectrum :-). Tak for hints'ene
Att: excelent Har jeg mulighed for at maile til dig? Jeg kunne måske godt tænke mig version 4 hvis det kan lade sig gøre. Der skal så bare henvises til andre ark i stedet for. Det vil måske kunne spare mig for en del. Havde du en løsning til det andet spørgsmål?
Sub join() 'Fra Aktier!C6:C? og Udl Aktier!C6:C? til Afkast på aktier!A6:A?, sorteret og uden dubletter Dim i, j Dim join(400) Dim cRow, aRow cRow = 100: aRow = 200 'cRow er antal rækker som undersøges i Aktier og Udl Aktier, aRow er antal rækker i Afkast på aktier. 'kan evt sættes lavere, for at speede farten op, når der skal sorteres for dubletter husk aRow det dobbelte af cRow Application.ScreenUpdating = False
Worksheets("Aktier").Activate Range("C6").Select For i = 1 To cRow join(i) = ActiveCell.Value ActiveCell.Offset(1, 0).Activate Next
Worksheets("Udl Aktier").Activate Range("C6").Activate For i = cRow To aRow join(i) = ActiveCell.Value ActiveCell.Offset(1, 0).Activate Next
Worksheets("Afkast på aktier").Activate Range("A6:A250").Select Selection.ClearContents
[A6].Activate For j = 1 To aRow If join(j) = "" Then GoTo om2 ActiveCell.Value = join(j) ActiveCell.Offset(1, 0).Activate om2: Next
Range("A6:A" & aRow & "").Select For i = 1 To aRow If Cells(i, 1) <> "" Then For j = i + 1 To aRow If Cells(i, 1) = Cells(j, 1) Then Cells(i, 1).ClearContents i = i - 1 End If Next End If Next
følgende linie indsættes lige efter: Application.ScreenUpdating = False Application.Calculation = xlCalculationManual
følgende linie indsættes lige før: Application.ScreenUpdating = True Application.Calculation = xlAutomatic
Synes godt om
Ny brugerNybegynder
Din løsning...
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.