Avatar billede Schultz Novice
09. december 2003 - 15:52 Der er 16 kommentarer og
1 løsning

Udbygning af Public Sub CopyVerySpecial()

Kan macroen:

Public Sub CopyVerySpecial()
    Dim rCell As Range
 
    For Each rCell In ActiveSheet.Range("K1:K65536").Cells
        If rCell.Value = "" Then
            rCell.Value = ActiveSheet.Range("A1").Value
            Exit For
        End If
    Next rCell
 
    Set rCell = Nothing
End Sub

http://www.eksperten.dk/spm/437461 udbygges således:

Hvis der står 1 i celle B1 skrives der i K1, hvis der står 2 i B1 skriver den til L1, hvis der står 3 i B1 skrives til M1.
eller er der en anden smartere måde at gøre dette på.
Svaret må ikke være for indviklet, da jeg er en novice på området ;-)
Avatar billede bak Forsker
09. december 2003 - 16:34 #1
Jeg kan ikke rigtigt få de to spm. til at hænge sammen, men her er et skud.
Drejer det sig kun om B1 eller er det alle celler i kolonne B, du vil have flyttet ?

hvis det er alle celle i kol b så prøv den her
Public Sub CopyVerySpecial()
    Dim rKolB As Range
    Dim rCell As Range
   
    Set rKolB = Range("B1", Cells(65536, 2).End(xlUp))
    For Each rCell In rKolB
      rCell.Offset(0, 8 + rCell.Value) = rCell.Value
    Next rCell
   
    Set rCell = Nothing
End Sub

hvis det kun er B1 så prøv den her
Public Sub CopyVerySpecial2()
    Range("B1").Offset(0, 8 + Range("B1").Value) = Range("B1").Value
End Sub
Avatar billede janvogt Praktikant
09. december 2003 - 16:49 #2
Måske kan denne gøre det:

Public Sub CopyVerySpecial()
    Dim rCell As Range
    Dim iColNo As Integer
   
    iColNo = 10 + ActiveSheet.Range("b1").Value
 
    For Each rCell In Range(Cells(1, iColNo), Cells(25, iColNo))
        If rCell.Value = "" Then
            rCell.Value = ActiveSheet.Range("A1").Value
            Exit For
        End If
    Next rCell
 
    Set rCell = Nothing
End Sub
Avatar billede bak Forsker
09. december 2003 - 16:51 #3
Ja, ja jan, ser godt ud :-)
Avatar billede janvogt Praktikant
09. december 2003 - 16:51 #4
Hov
For Each rCell In Range(Cells(1, iColNo), Cells(25, iColNo))
skal være
For Each rCell In Range(Cells(1, iColNo), Cells(65536, iColNo))

Jeg forstår heller ikke helt .....
Skal den ikke indsætte værdier i hele området?
Så skal du fjerne "Exit For".
Avatar billede janvogt Praktikant
09. december 2003 - 16:52 #5
Tak bak :-)
Avatar billede Schultz Novice
09. december 2003 - 16:53 #6
Det første spørgsmål lød:
Jeg mangler en macro der flytter eller kopierer et tal fra f.eks. A1 til K1 således at hvis K1 er optaget skrives tallet i K2, hvis der står noget i K2 skrives tallet i K3 o.s.v.
Ps. Det skal være en macro.
Til dette fik jeg ovenstående macro der virker perfekt.

Nu skulle der så indbygges en lille feature der læser værdien i B1 f.eks. 1,2,3 og ud fra denne værdi skrives til cellerne 1= K1, 2= L1 3= M1 o.sv. men samtidig bibeholdes funktionen fra den første macro.

Håber det er forståeligt nu.
Avatar billede bak Forsker
09. december 2003 - 16:55 #7
lige knap, hvis nu k1 er optaget, men b1 = 2, skal tallet fra A1 så skrives i L1 eller L2 ?
Avatar billede janvogt Praktikant
09. december 2003 - 16:56 #8
Ok, så skulle min også være ok :-)
Avatar billede janvogt Praktikant
09. december 2003 - 17:02 #9
..... eller med andre ord: Den finder den første ledige celle i kolonne K,L el. M (afhængig af B1) og indsætter værdien fra A1.
Avatar billede Schultz Novice
09. december 2003 - 17:03 #10
Hvis der skrives 5 i A1 og der står 1 i B1, skal der skrives 5 i K1 hvis der står noget i forvejen skal der skrives i K2, hvis der også står noget der skrives i K3 o.s.v.
Hvis der står 2 i B1 skal der skrives 5 i L1 hvis der står noget skal der skrives i L2 o.s.v.
Hvis der står 3 i B1 skal der skrives 5 i M1 hvis der står noget skal der skrives i M2 o.s.v.
Avatar billede janvogt Praktikant
09. december 2003 - 17:06 #11
Fint, prøv så min kode :-)
Avatar billede janvogt Praktikant
09. december 2003 - 17:07 #12
Public Sub CopyVerySpecial()
    Dim rCell As Range
    Dim iColNo As Integer
   
    iColNo = 10 + ActiveSheet.Range("b1").Value
 
    For Each rCell In Range(Cells(1, iColNo), Cells(65536, iColNo))
        If rCell.Value = "" Then
            rCell.Value = ActiveSheet.Range("A1").Value
            Exit For
        End If
    Next rCell
 
    Set rCell = Nothing
End Sub
Avatar billede Schultz Novice
09. december 2003 - 17:07 #13
Jeg glemte lige at værdien i kolonne B er et tal mellem 1 og 30
således at vi starter ved K og går 30 felter til højre.
Avatar billede janvogt Praktikant
09. december 2003 - 17:13 #14
Tager koden også højde for .......
Kolonne J er default og så lægges værdien fra B1 til.
Er værdien i B4 = 6 ender vi i kolonne P.
Avatar billede Schultz Novice
09. december 2003 - 17:13 #15
Det er bare eminent, det virker perfekt, mange tak
Venlig hilsen Ejvind
http://www.verdensnavle.dk/
Avatar billede janvogt Praktikant
09. december 2003 - 17:14 #16
Undskyld
Er værdien i B1 = 6 ender vi i kolonne P.
Avatar billede janvogt Praktikant
09. december 2003 - 17:15 #17
Velbekomme :-)
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