Avatar billede Butterfly Ekspert
15. december 2019 - 11:41 Der er 12 kommentarer og
1 løsning

Kopier række og sæt ind under række med bestemt værdi

Hej
Jeg vil gerne sætte række 2 ind under den række hvor en bestemt værdi optræder.
I A1 har jeg den værdi jeg gerne vil finde. Den skal findes i kolonne B, når værdien er fundet skal der sættes en række ind under værdien og række 2 skal kopiers ned i den nye række, makroen skal kører 20 gange.
Er det muligt?
Avatar billede kim1a Ekspert
15. december 2019 - 12:14 #1
Hvor står dine originale linje - måske det blot er mig der ikke forstår, men det lyder som om at række to forsvinder, og hvilken række skal så tages?
Hvis det hele kører fra samme ark så kan du jo risikere at din række to bliver sat in som række tre, og derfor bliver til række to når den gamle forsvinder.
Avatar billede Butterfly Ekspert
15. december 2019 - 15:47 #2
Hej Kim1a
Du har misforstået det.
De rækker jeg skal sætte ind er fra linje 6 og ned efter. Så række 2 vil hele tiden være den samme.
Avatar billede kim1a Ekspert
16. december 2019 - 08:12 #3
Okay, så linjerne står fra række 6 til række 26?

Du vil flytte række 6 op til række 2, hvis der står en bestemt værdi? Hvor skal den hen hvis ikke værdien optræder? Er der kun 5 værdier (række 1-5)?
Avatar billede Butterfly Ekspert
16. december 2019 - 13:44 #4
Hej Kim1a
Nej jeg har ca. 1.000 rækker.
Jeg ønsker at flytte værdien i række 2 til rækken under, hvor en bestemt værdi optræder.
Den samme værdi, f.eks. 5010 optræder 20 gange. Så alle de steder hvor værdien 5009 optræder skal der sættes en linje ind under den og værdien i række 2 skal sættes ind i den nye linje.
Avatar billede kim1a Ekspert
16. december 2019 - 14:15 #5
Ah, så vi skal "bare" finde de steder hvor 5010 står, indsætte en ny linje og kopiere række 2 ned til denne nye linje.

Det kan vi klare ja. Jeg forestiller mig følgende:

Opsnap variabel der skal søges efter fra A1

Start ved B3 og kig hver værdi i B igennem en efter en, hvis den findes så indsæt en linje med dataen fra række 2.
Gå videre til næste B

Giver det mening?

Noget a la (ej testet):

Sub kopier()

Dim strA1Value As String
Dim intLastRow As Integer

intLastRow = ActiveSheet.Cells(2, 1).SpecialCells(xlCellTypeLastCell).Row
strA1Value = Range("A1").Value

For x = 3 To intLastRow
    If Range(2, x).Value = strA!Value Then
    Range("2:2").Copy
    Range(x + 1).Insert
    intLastRow = intLastRow + 1
    End If

Next

End Sub

Jeg var lidt i tvivl om det altid ville være tal i A1, så jeg lod variablen være en tekststreng. Derudover håber jeg at jeg løste hvor langt den skal køre ned, det bør du overveje, fordi du hver gang du indsætter en linje jo laver hele datasættet en linje længere end oprindelig.
Avatar billede Butterfly Ekspert
16. december 2019 - 17:05 #6
Mange tak, men den går desværre i stå ved denne linje
If Range(2, x).Value = strA1Value Then
og jeg kan ikke gennemskue hvad der er galt.
Avatar billede store-morten Ekspert
16. december 2019 - 18:39 #7
strA1!Value prøv at ændre til strA1.Value
Avatar billede kim1a Ekspert
16. december 2019 - 21:01 #8
#7 Nej strengens variabel er her navngivet "strA1Value", ikke noget punktum (og forvirring om udråbstegn).

Det må være fordi vi sætter en værdi (value) = en string tænker jeg? Er det altid tal i din A1 celle? Er det heltal så vi kan lave det om til en integer? Måske er dine værdier i B forskellige fra A1, selvom det er tal?
Avatar billede store-morten Ekspert
16. december 2019 - 22:50 #9
Prøv i en kopi:
Sub Test()
Dim SidsteRække As Integer
SidsteRække = Range("B" & Rows.Count).End(xlUp).Row
    For Rk = SidsteRække To 6 Step -1
        If Range("B" & Rk) = Range("A1") Then
            Rows(Rk + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Rows(Rk + 1).Value = Rows(2).Value
        End If
        Next i
End Sub
Avatar billede Butterfly Ekspert
17. december 2019 - 09:44 #10
Hej Kim1a
Det virker desværre ikke. Det er samme talformat i A1 og kolonne B, det er hel tal.

Mange tak store-morten, det virker perfekt, dog vil jeg gerne have at den indsætter den formel der er i linje 2 og ikke indsætter det som værdi (tekst) er det muligt?
Avatar billede store-morten Ekspert
17. december 2019 - 09:45 #11
Ups.... lille fejl.
        Next i <-- rettes til: Next Rk
End Sub
Avatar billede store-morten Ekspert
17. december 2019 - 09:55 #12
Prøv:
Sub Test2()
Dim SidsteRække As Integer
SidsteRække = Range("B" & Rows.Count).End(xlUp).Row
    For Rk = SidsteRække To 6 Step -1
        If Range("B" & Rk) = Range("A1") Then
            Rows(Rk + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Rows(2).Copy _
            Destination:=Rows(Rk + 1)
        End If
    Next Rk
End Sub
Avatar billede Butterfly Ekspert
17. december 2019 - 10:39 #13
TUSIND TAK store-morten, det var præcist hvad jeg ønsker mig. Nu kan det kun blive en god jul.
Rigtig glædelig jul og godt nytår
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester