Avatar billede jakor Nybegynder
29. marts 2004 - 14:45 Der er 9 kommentarer og
1 løsning

Opgave i VBA

Jeg er ved at lave en opgave I VBA, men jeg kan simpelthen ikke finde ud af opgave 1.
her er et hyperlink til Excel filen
http://www.sam.sdu.dk/undervis/85435.F04/obli1_2004/obli_2004.html
Jeg håber du kan hjælpe mig,enten ved at give mig nogle stikord men helst ved at vise mig hvordan koderne skal se ud.
Mvh. Jakor
Avatar billede martin_moth Mester
29. marts 2004 - 15:15 #1
Er det ikke bare at gøre hvad der står... Tjek linie for linie, og

er de første 3 cifre i nummeret = 801 ændres det til 8000,8001,8002,...,8006
er de første 3 cifre i nummeret = 802 ændres det til 9000,9001,9002,...,9045
er de første 3 cifre i nummeret = 803 ændres det til 10000,10001,10002,...,10024

Nu har jeg ikke set regnearket, men lav en løkke der looper over alle rækkerne, tjekker på de første 3 cifre og ændrer som vist...

Pseudokode:

Dim i as Long
Dim j as Long
Dim k as Long
Dim l as Long

For i = 1 to AntalRækker
  if førsteTreTegn = 801 then
    Nummer ændres til 8000+j
    j=j+1
  end if
  if førsteTreTegn = 802 then
    Nummer ændres til 9000+k
    k=k+1
  end if
  if førsteTreTegn = 803 then
    Nummer ændres til 10000+l
    l=l+1
  end if
Next i

Det kan gøres med lidt færre variabler, hvis du tænker dig om. Det gode ved koden er, at den virker, selvom der fx. nu skulle være flere - eller færre - end lige præcis 46 "Plancher og tekster - Sejlsport"
Avatar billede jakor Nybegynder
29. marts 2004 - 15:25 #2
Tak for svaret martin_moth, jeg vil prøve af.
Avatar billede bak Forsker
29. marts 2004 - 16:46 #3
et alternativ

Sub test2()
Dim ws As Worksheet
Dim rKat As Range
Dim lLastRow As Long
Dim rCell As Range
Set ws = Sheets("old_database")
'find sidste række med data
lLastRow = ws.Range("B" & Rows.Count).End(xlUp).Row
'sæt søgeområde = B2 til sidste række i kolonne B
Set rKat = ws.Range("B2:B" & lLastRow)
'for hver celle i området
For Each rCell In rKat
    'hvis kategorien er 80, så læg 7 til 3. ciffer, gang med 1000
    'og læg cifrene fra og med 4 karakter til
    If Left(rCell, 2) = "80" Then _
        rCell.Offset(0, 11) = ((CLng(Mid(rCell, 3, 1)) + 7) * 1000) + CLng(Mid(rCell, 4))
Next
End Sub
Avatar billede bak Forsker
29. marts 2004 - 16:48 #4
Dette er en test, derfor skriver den i kolonne M.
Hvis du virkelig vil udskifte skal If sætningen se sådan ud.

If Left(rCell, 2) = "80" Then _
        rCell = ((CLng(Mid(rCell, 3, 1)) + 7) * 1000) + CLng(Mid(rCell, 4))
Avatar billede jakor Nybegynder
30. marts 2004 - 08:35 #5
Tusind tak det virker som det skal.
Avatar billede martin_moth Mester
30. marts 2004 - 09:49 #6
Det er nok bak der skal have poientene...
Avatar billede jakor Nybegynder
30. marts 2004 - 12:05 #7
Jeg vil meget gerne give bak pointene, men jeg ved ikke lige hvordan systemet virker.
jeg har afvist dit svar i håb om at det så automatisk er bak der får pointene.
Avatar billede martin_moth Mester
30. marts 2004 - 13:06 #8
Bed bak om at smide et svar... Før du accepterer et svar gives der ikke points
Avatar billede jakor Nybegynder
30. marts 2004 - 13:13 #9
Bak hvis du gerne vil have point, kan du så ikke sende det samme svar igen så jeg kan acceptere det og give dig points.

Bak eller Martin_moth kan i ikke lige kigge på det andet spørgsmål jeg har lagt ud?
Vi sidder en masse studerende og kan ikke løse opgaven.
Avatar billede bak Forsker
30. marts 2004 - 15:57 #10
her er et svar :-)
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