Avatar billede janvogt Praktikant
10. november 2005 - 17:06 Der er 18 kommentarer og
1 løsning

VBA Gennemløbe celleområde og flytte resultat til andet område

JEg har følgende kode:

Sub CheckCelle()
    Dim Gentaget As String
    X = 0
    Y = 0
    Z = 0
       
    Xcol = ActiveCell.Column
    Xrow = 12
    Ycol = 12
    Yrow = ActiveCell.Row
    Zcol = 15
    If ActiveCell.Column > 4 Then Zcol = 16
    If ActiveCell.Column > 7 Then Zcol = 17
    Zrow = 2
    If ActiveCell.Row > 4 Then Zrow = 3
    If ActiveCell.Row > 7 Then Zrow = 4
   
    X = Cells(Xrow, Xcol).Value
    Y = Cells(Yrow, Ycol).Value
    Z = Cells(Zrow, Zcol).Value
   
    For I = 1 To 9
    If InStr(X, I) > 0 And InStr(Y, I) > 0 And InStr(Z, I) > 0 Then
    Gentaget = Gentaget & I
    End If
    Next
       
End Sub

Jeg ønsker nu at gennemløbe hele området B2:J10 med ovenstående kode og placere resultatet(Gentaget) i en tilsvarende matrix U2:AC10.
Hvordan vil koden nu se ud?
Det må jo være noget med: For Each cell in .... Next. Men hvordan?
Avatar billede janvogt Praktikant
10. november 2005 - 17:08 #1
Spørgsmålet er en udløber af
http://www.eksperten.dk/spm/663336
Avatar billede kabbak Professor
10. november 2005 - 19:13 #2
Dim Gentaget As String
    For Each c In Range("B2:J10").Cells
    X = 0
    Y = 0
    Z = 0
 
            Xcol = c.Column
            Xrow = 12
            Ycol = 12
            Yrow = c.Row
            Zcol = 15
            If c.Column > 4 Then Zcol = 16
            If c.Column > 7 Then Zcol = 17
            Zrow = 2
            If c.Row > 4 Then Zrow = 3
            If c.Row > 7 Then Zrow = 4
           
            X = Cells(Xrow, Xcol).Value
            Y = Cells(Yrow, Ycol).Value
            Z = Cells(Zrow, Zcol).Value
           
            For I = 1 To 9
            If InStr(X, I) > 0 And InStr(Y, I) > 0 And InStr(Z, I) > 0 Then
            Gentaget = Gentaget & I
            End If
         
            Next
    Cells(c.Row, (c.Column) + 19) = Gentaget
  Next
End Sub

jeg kan ikke teste, da jeg ikke har værdier
Avatar billede kabbak Professor
10. november 2005 - 19:14 #3
Gentaget skulle lige nulstilles

Sub CheckCelle()
    Dim Gentaget As String
    For Each c In Range("B2:J10").Cells
    Gentaget = ""
    X = 0
    Y = 0
    Z = 0
 
            Xcol = c.Column
            Xrow = 12
            Ycol = 12
            Yrow = c.Row
            Zcol = 15
            If c.Column > 4 Then Zcol = 16
            If c.Column > 7 Then Zcol = 17
            Zrow = 2
            If c.Row > 4 Then Zrow = 3
            If c.Row > 7 Then Zrow = 4
           
            X = Cells(Xrow, Xcol).Value
            Y = Cells(Yrow, Ycol).Value
            Z = Cells(Zrow, Zcol).Value
           
            For I = 1 To 9
            If InStr(X, I) > 0 And InStr(Y, I) > 0 And InStr(Z, I) > 0 Then
            Gentaget = Gentaget & I
            End If
         
            Next
    Cells(c.Row, (c.Column) + 19) = Gentaget
  Next
End Sub
10. november 2005 - 19:20 #4
Sub CheckCelle()
    Dim rCell As Range
    Dim Gentaget As String
    X = 0
    Y = 0
    Z = 0
       
    For Each rCell In ActiveSheet.Range("B2:J10").Cells
        Gentaget = ""
       
        Xcol = rCell.Column
        Xrow = 12
       
        Ycol = 12
        Yrow = rCell.Row
       
        Zcol = 15
        If rCell.Column > 4 Then Zcol = 16
        If rCell.Column > 7 Then Zcol = 17
       
        Zrow = 2
        If rCell.Row > 4 Then Zrow = 3
        If rCell.Row > 7 Then Zrow = 4
       
        X = Cells(Xrow, Xcol).Value
        Y = Cells(Yrow, Ycol).Value
        Z = Cells(Zrow, Zcol).Value
       
        For I = 1 To 9
            If InStr(X, I) > 0 And InStr(Y, I) > 0 And InStr(Z, I) > 0 Then
                Gentaget = Gentaget & I
            End If
        Next I
       
        rCell.Offset(0, 19).Value = Gentaget
    Next rCell
End Sub
Avatar billede janvogt Praktikant
10. november 2005 - 19:28 #5
Jep, den er der.

Mangler dog lige et enkelt check.
Hvis cellen i området indeholder en værdi i forvejen skal "Gentaget" sættes til denne værdi og overføres til den anden matrix.
Derefter skal den hoppe videre til næste i løkken.
Avatar billede kabbak Professor
10. november 2005 - 19:32 #6
Hvis cellen i området indeholder en værdi i forvejen skal "Gentaget" sættes til denne værdi og overføres til den anden matrix.

Hvilken celle ?
den aktive celle ?
10. november 2005 - 19:33 #7
eller offset cellen?

iøvrigt til lykke med sportsjobbet
Avatar billede janvogt Praktikant
10. november 2005 - 19:34 #8
Fik selv løst den:

Sub CheckCelle()
    Dim Gentaget As String
    For Each c In Range("B2:J10").Cells
    Gentaget = ""
   
    X = 0
    Y = 0
    Z = 0
 
            Xcol = c.Column
            Xrow = 12
            Ycol = 12
            Yrow = c.Row
            Zcol = 15
            If c.Column > 4 Then Zcol = 16
            If c.Column > 7 Then Zcol = 17
            Zrow = 2
            If c.Row > 4 Then Zrow = 3
            If c.Row > 7 Then Zrow = 4
           
            X = Cells(Xrow, Xcol).Value
            Y = Cells(Yrow, Ycol).Value
            Z = Cells(Zrow, Zcol).Value
           
            For I = 1 To 9
            If InStr(X, I) > 0 And InStr(Y, I) > 0 And InStr(Z, I) > 0 Then
            Gentaget = Gentaget & I
            End If
         
            Next
   
    If c <> "" Then
    Gentaget = c
    End If
           
    Cells(c.Row, (c.Column) + 19) = Gentaget
  Next
End Sub

Mange tak for hjælpen.
Der er 60 mere på vej .....
Avatar billede kabbak Professor
10. november 2005 - 19:35 #9
et svar ;-))
Avatar billede kabbak Professor
10. november 2005 - 19:36 #10
hvad er det du laver, SODUKU ?
Avatar billede kabbak Professor
10. november 2005 - 19:37 #11
hvis det er det, vil jeg godt have en kopi
10. november 2005 - 19:37 #12
jan - det hedder    If c.Value <> "" Then  (og den hurtigste hedder  If Not c.Value = "" Then)
Avatar billede janvogt Praktikant
10. november 2005 - 19:49 #13
Hvordan er det lige jeg sætter baggrundsfarven i matrix 2 hvis udtrykket
If c <> "" Then
Gentaget = c
End If

er opfyldt.
10. november 2005 - 19:53 #14
If c <> "" Then
Gentaget = c
Cells(c.Row, (c.Column) + 19).interior.colorindex=2
End If
Avatar billede kabbak Professor
10. november 2005 - 19:53 #15
If c <> "" Then
          Gentaget = c
          c.Offset(0, 19).Interior .ColorIndex = 6
          Else
          c.Offset(0, 19).Interior.ColorIndex = xlNone
          End If
Avatar billede janvogt Praktikant
10. november 2005 - 19:53 #16
Tak Flemming. Min virkede nu fint med min primitiv-VBA :-)

Jep, det er SUDOKU - godt set kabbak :-)
Jeg har sat mig for at lægge alle de løsningsstrategier jeg kender ind i et regneark.
Forhåbentlig er det så nok til at kunne løse en hvilken som helst opgave.
10. november 2005 - 19:56 #17
jaja - det virker, men flot er det ikke *s*
Du er også velkommen til at smide din model forbi fvd@smartoffice.dk når den er færdig
Avatar billede janvogt Praktikant
10. november 2005 - 20:00 #18
Det vil jeg gøre, men jeg ved ikke, om den nogensinde bliver færdig.
Det er noget af et ambitiøst projekt :-) - men meget sjovt.
Avatar billede sjap Praktikant
13. november 2005 - 00:11 #19
Hvis det ikke betragtes som snyd, kan der jo også hentes lidt inspiration her:

http://www.di-mgt.com.au/sudoku.html
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

IT-JOB