Avatar billede sylvia Nybegynder
05. juli 2006 - 16:00 Der er 7 kommentarer og
1 løsning

Hvordan bruke loop for å behandle flere celler i en kolonne?

Ut fra følgende kode;

inntjPrMeld = Worksheets(prisoversikt).Range("m8")
Do
i = i + 1

If prisAngitt = prisTabell Then
  Prisskjekk = inntjPrMeld
  Else
      inntjPrMeld = ????
End If

Loop Until prisAngitt = prisTabell Or i = 10

Hvordan får jeg til at inntjPrMeld = Worksheets(prisoversikt).Range("m9") på neste runde.

Jeg ønsker å kjøre en loop der jeg sammenligner verdiene i kolonne "m", med en annen variabel, helt frem til de to verdiene er like.

mvh
Sylvia
Avatar billede kabbak Professor
05. juli 2006 - 19:31 #1
inntjPrMeld = Worksheets(prisoversikt).Range("m8")
Do
i = i + 1

If prisAngitt = prisTabell Then
  Prisskjekk = inntjPrMeld
  Else
      inntjPrMeld = Worksheets(prisoversikt).Range("m8").Offset(i, 0)
End If

Loop Until prisAngitt = prisTabell Or i = 10
Avatar billede sylvia Nybegynder
05. juli 2006 - 19:55 #2
Takker for tips, men glemte i mitt spm å si at det vil variere hvilken kolonne det er snakk om også.  Alt fungerer frem til linjen;

  Else
      inntjPrMeld = Worksheets(prisoversikt).Range("m8").Offset(i, 0)

Legger inn hele koden her jeg, klarer du å se hva jeg har gjort feil?

Function Prisskjekk(meldingstype As String, operator As String)

Dim i As Integer

i = 0

prisTabell = Worksheets("prisoversikt").Range("a8")

'Finne riktig kolonne ut fra meldingstype
If meldingstype = "sms" Then
    prisAngitt = Range("b12")
   
    'Finne riktig kolonne ut fra operatør
    If operator = "tnm" Then
      inntjPrMeld = Worksheets("prisoversikt").Range("c8")
    End If
    If operator = "netcom" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("h8")
    End If
    If operator = "tele2" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("m8")
    End If
End If

  If meldingstype = "mms30" Then
    prisAngitt = Range("B13")

    'Finne riktig kolonne ut fra operatør
    If operator = "tnm" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("e8")
    End If
    If operator = "netcom" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("j8")
    End If
    If operator = "tele2" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("o8")
    End If

  End If

  If meldingstype = "mms100" Then
      prisAngitt = Range("B14")

      'Finne riktig kolonne ut fra operatør
      If operator = "tnm" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("f8")
      End If
      If operator = "netcom" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("k8")
      End If
      If operator = "tele2" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("o8")
    End If

  End If

  If meldingstype = "mms300" Then
    prisAngitt = Range("B15")

      'Finne riktig kolonne ut fra operatør
      If operator = "tnm" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("g8")
      End If
      If operator = "netcom" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("l8")
      End If
      If operator = "tele2" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("o8")
      End If

  End If

  If meldingstype = "wap" Then
    prisAngitt = Range("B16")

      'Finne riktig kolonne ut fra operatør
      If operator = "tnm" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("d8")
      End If
      If operator = "netcom" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("i8")
      End If
      If operator = "tele2" Then
        inntjPrMeld = Worksheets("prisoversikt").Range("m8")
      End If

  End If

  'Sammenligne angitt pris med pris i tabell, og angi riktig inntjening pr meld ut fra operatør og type melding
  Do
  i = i + 1

  If prisAngitt = prisTabell Then
    Prisskjekk = inntjPrMeld
  Else
    inntjPrMeld = Worksheets(prisoversikt).Range("m8").Offset(i, 0)
  End If

  Loop Until prisAngitt = prisTabell Or i = 10
 
End Function
Avatar billede sylvia Nybegynder
05. juli 2006 - 20:58 #3
Eller spurt på en enklere måte? Finnes det noen måte å hente den celleadressen som inntjPrMeld peker til før den tilegnes en ny referanse, og bruke den som utgangspunkt til offset..?
Avatar billede kabbak Professor
05. juli 2006 - 21:07 #4
Prøv denne


Function Prisskjekk(meldingstype As String, operator As String)

Dim i As Integer, PrisTabell, prisAngitt, inntjPrMeld As Range

i = 0

PrisTabell = Worksheets("prisoversikt").Range("a8")

'Finne riktig kolonne ut fra meldingstype
If meldingstype = "sms" Then
    prisAngitt = Range("b12")
   
    'Finne riktig kolonne ut fra operatør
    If operator = "tnm" Then
    Set inntjPrMeld = Worksheets("prisoversikt").Range("c8")
    End If
    If operator = "netcom" Then
    Set inntjPrMeld = Worksheets("prisoversikt").Range("h8")
    End If
    If operator = "tele2" Then
    Set inntjPrMeld = Worksheets("prisoversikt").Range("m8")
    End If
End If

  If meldingstype = "mms30" Then
    prisAngitt = Range("B13")

    'Finne riktig kolonne ut fra operatør
    If operator = "tnm" Then
      Set inntjPrMeld = Worksheets("prisoversikt").Range("e8")
    End If
    If operator = "netcom" Then
      Set inntjPrMeld = Worksheets("prisoversikt").Range("j8")
    End If
    If operator = "tele2" Then
    Set inntjPrMeld = Worksheets("prisoversikt").Range("o8")
    End If

  End If

  If meldingstype = "mms100" Then
      prisAngitt = Range("B14")

      'Finne riktig kolonne ut fra operatør
      If operator = "tnm" Then
      Set inntjPrMeld = Worksheets("prisoversikt").Range("f8")
      End If
      If operator = "netcom" Then
      Set inntjPrMeld = Worksheets("prisoversikt").Range("k8")
      End If
      If operator = "tele2" Then
      Set inntjPrMeld = Worksheets("prisoversikt").Range("o8")
    End If

  End If

  If meldingstype = "mms300" Then
    prisAngitt = Range("B15")

      'Finne riktig kolonne ut fra operatør
      If operator = "tnm" Then
      Set inntjPrMeld = Worksheets("prisoversikt").Range("g8")
      End If
      If operator = "netcom" Then
      Set inntjPrMeld = Worksheets("prisoversikt").Range("l8")
      End If
      If operator = "tele2" Then
      Set inntjPrMeld = Worksheets("prisoversikt").Range("o8")
      End If

  End If

  If meldingstype = "wap" Then
    prisAngitt = Range("B16")

      'Finne riktig kolonne ut fra operatør
      If operator = "tnm" Then
      Set inntjPrMeld = Worksheets("prisoversikt").Range("d8")
      End If
      If operator = "netcom" Then
        Set inntjPrMeld = Worksheets("prisoversikt").Range("i8")
      End If
      If operator = "tele2" Then
      Set inntjPrMeld = Worksheets("prisoversikt").Range("m8")
      End If

  End If

  'Sammenligne angitt pris med pris i tabell, og angi riktig inntjening pr meld ut fra operatør og type melding
  Do
  i = i + 1

  If prisAngitt = PrisTabell Then
    Prisskjekk = inntjPrMeld
  Else
  Set inntjPrMeld = inntjPrMeld.Offset(1, 0)
  End If

  Loop Until prisAngitt = PrisTabell Or i = 10
  Set inntjPrMeld = Nothing
 
 
End Function
Avatar billede sylvia Nybegynder
05. juli 2006 - 21:23 #5
Super bra, tusen tusen takk :)

Har aldri programmert i VB før sjø... så var ikke klar over at når jeg satt en varabel som Range så måtte jeg bruke Set inntjPrMeld =... :) Så fungerer alt supert her. Du reddet kvelden min her ;)
Avatar billede kabbak Professor
05. juli 2006 - 21:26 #6
ok, men du tog point selv ;-((
Avatar billede sylvia Nybegynder
05. juli 2006 - 21:40 #7
er nye her innpå eksperten jeg.. mener du den tildeling av 60 poeng for svar.. hvordan fungerer det egentlig? Beklager den.. eh..
Avatar billede kabbak Professor
05. juli 2006 - 21:46 #8
Lav et nyt spørgsmål i denne katogori

Titel : Point til kabbak
sæt et link til dette spørgsmål deri

Når jeg så har svaret på det, markerer du mit navn i feltet til venstre og så tryk accepter
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
Kurser inden for grundlæggende programmering

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