Avatar billede cazstar Nybegynder
30. marts 2004 - 12:58 Der er 14 kommentarer

brug af right, left og mid funktionen

Nu er problemet så, at tallene 8020 - 802145 skal ændres til 9000 - 9145.

Jeg vil derfor fjerne de tre første cifre i "8020", således at der kommer til at stå "0", hvorefter jeg vil lægge 9000 til sådan at den kommer til at hedde "9000" og så fremdeles.

8020 skal blive til 9000
802145 skal blive til 9145....

derfor, hvis man fjerner de tre første cifre og derefter adderer med 9000, så burde det virke -men hvordan skriver man en kode der kan det?

evt. ved brug af "case is" eller "right, left og mid"

Jeg har en pokkers masse tal i en kolonne, som skal omdøbes på den måde...


mit range er
For Each cell In Worksheets("old_database").Range("B1065:B2392")


På forhånd tak...
Avatar billede lasseo Nybegynder
30. marts 2004 - 13:10 #1
=HØJRE(A1;LÆNGDE(A1)-3)+9000
Avatar billede lasseo Nybegynder
30. marts 2004 - 13:12 #2
Eller måske rettere:

=HØJRE(B1065;LÆNGDE(B1065)-3)+9000

Som du så kan starte med i første række af ny kolonne, der hvor du ønsker det nye tal og kopiere ned i hele range.
Avatar billede cazstar Nybegynder
30. marts 2004 - 13:15 #3
Får en syntax error, det kan heller ikke passe at det er så simpelt....

her er hvad jeg selv har skrevet, men jeg kan ikke få den til at køre for 9000 og 10000....

------------
Dim i As Integer, TredjeTal As Integer, Nummer As Integer
Dim KolonneB As Range, cell As Range
Range("B6:B4248").Name = "KolonneB"
Worksheets("old_database").Range("KolonneB").Activate
For Each cell In Range("KolonneB")
'Starter fra 1. plads i cellen, og vælger derefter 2 karakterer, hvis de = 80 så...
    If Mid(cell.Value, 1, 2) = 80 Then
'Definerer TredjeTal som 3. karakter i cellen
    TredjeTal = Mid(cell, 3, 1)
'Definerer Nummer som strengen i cellen, og cil så have at den skal vælge...???
    Nummer = Mid(cell.Value, (Len(cell) - 3))
   
        Select Case TredjeTal
            Case Is = 1
                cell.Value = cell.Value - 10
                'når 3. karakter er et 1-tal, skal den trække 10 fra
            Case Is = 2
                For i = 0 To 145
                    If Nummer = i Then
                        cell.Value = 9000 + i
                        'når 3. karakter er et 2-tal, skal den skrive 9000+i
                    End If
                Next
            Case Is = 3
                For i = 0 To 24
                    If Nummer = i Then
                        cell.Value = 10000 + i
                        'når 3. karakter er et 3-tal, skal den skrive 10000+i
                    End If
                Next
        End Select
    End If
Next
------------------------------------
Avatar billede janvogt Praktikant
30. marts 2004 - 14:07 #4
Lasseo's løsning er en almindelig regnearksformel, som blot skal skrives i en celle.
Skriv den f.eks. i celle C1065 og kopier den ned så længe der er data i B-kolonnen.
Avatar billede cazstar Nybegynder
30. marts 2004 - 14:11 #5
Nu skal det ikke være en regnearksformel... det SKAL skrives som en makro i VBA.

en kode ala det jeg har skrevet ovenfor.
Avatar billede bak Forsker
30. marts 2004 - 14:48 #6
Der er nok en del der skal aflevere samme opgave,:-)

Sub test()
Dim ws As Worksheet
Dim rKat As Range
Dim lLastRow As Long
Dim rCell As Range
Set ws = Sheets("old_database")
lLastRow = ws.Range("B" & Rows.Count).End(xlUp).Row
Set rKat = ws.Range("B2:B" & lLastRow)
For Each rCell In rKat
    Select Case Left(rCell, 3)
        Case "801": rCell.Offset(0, 10) = 8000 + CLng(Mid(rCell, 4))
        Case "802": rCell.Offset(0, 10) = 9000 + CLng(Mid(rCell, 4))
        Case "803": rCell.Offset(0, 10) = 10000 + CLng(Mid(rCell, 4))
        Case Else
    End Select
Next
End Sub
Avatar billede bak Forsker
30. marts 2004 - 14:49 #7
Bemærk lige at alle
rCell.offset(0,10)= skal ændres til
rCell=

Det andet er til testformål.
Avatar billede cazstar Nybegynder
30. marts 2004 - 15:07 #8
He he, ja. Vi er en hel årgang der skal lave en opgave i VBA -sådan ca. en 100 stykker :-)

Nu er problemet bare, at vores forelæser antager at vi er nogle hardcore vba-koderer alle sammen, hvilket vi langt fra er!

Anyway, er det muligt at omskrive ovenstående således at det kommer ned på et lidt mere menneskeligt plan? Husk på, at jeg er en regnskabsmand -ikke edbmand :P

Jeg forstår ikke syntaksen i det du har skrevet (bak)...
Avatar billede bak Forsker
30. marts 2004 - 15:27 #9
Her er så din egen, lettere modificeret :-)

Sub test6()

Dim i As Integer, TredjeTal As Integer, Nummer As Integer
Dim KolonneB As Range, cell As Range
Range("B6:B4248").Name = "KolonneB"
Worksheets("old_database").Range("KolonneB").Activate

For Each cell In Range("KolonneB")
'Starter fra 1. plads i cellen, og vælger derefter 2 karakterer, hvis de = 80 så...
    If Mid(cell.Value, 1, 2) = 80 Then
'Definerer TredjeTal som 3. karakter i cellen
    TredjeTal = Mid(cell, 3, 1)
'Definerer Nummer som strengen i cellen, og cil så have at den skal vælge...???
    Nummer = CLng(Mid(cell.Value, 4))
   
        Select Case CLng(TredjeTal)
            Case 1
                cell.Offset(0, 9) = 8000 + Nummer
                'når 3. karakter er et 1-tal, skal den trække 10 fra
            Case 2
                cell.Offset(0, 9) = 9000 + Nummer
                        'når 3. karakter er et 2-tal, skal den skrive 9000+i
            Case 3
                cell.Offset(0, 9) = 10000 + Nummer
                        'når 3. karakter er et 3-tal, skal den skrive 10000+i
        End Select
    End If
Next

End Sub
Avatar billede cazstar Nybegynder
30. marts 2004 - 16:00 #10
Jeg kan ikke få den til at køre :-/

Den skulle gerne virke i det her regneark --> http://www.sam.sdu.dk/undervis/85435.F04/obli1_2004/Danmarks_Museum_for_Lystsejlads.xls

hvis du har tid/lyst så ville jeg blive MEGET glad hvis du gad at teste den så den virker. Har siddet og kogt over den opgave i 7 timer :-(


man skal som sagt ændre:
8011 - 8016 til 8001 - 8006
8020 - 802145 til 9000 - 9145
803000 - 803024 til 10000 - 10024

På forhånd tak!
Avatar billede bak Forsker
30. marts 2004 - 16:30 #11
Prøv lige igen. Begge modeller kører fint på opgaven.
jeg har lige ændret linierne med cell.Offset(0, 9) til cell så den skrive i de aktuelle celler

Sub test6()

Dim i As Integer, TredjeTal As Integer, Nummer As Integer
Dim KolonneB As Range, cell As Range
Range("B6:B4248").Name = "KolonneB"
Worksheets("old_database").Range("KolonneB").Activate

For Each cell In Range("KolonneB")
'Starter fra 1. plads i cellen, og vælger derefter 2 karakterer, hvis de = 80 så...
    If Mid(cell.Value, 1, 2) = 80 Then
'Definerer TredjeTal som 3. karakter i cellen
    TredjeTal = Mid(cell, 3, 1)
'Definerer Nummer som strengen i cellen, og cil så have at den skal vælge...???
    Nummer = CLng(Mid(cell.Value, 4))
   
        Select Case CLng(TredjeTal)
            Case 1
                cell= 8000 + Nummer
                'når 3. karakter er et 1-tal, skal den trække 10 fra
            Case 2
                cell= 9000 + Nummer
                        'når 3. karakter er et 2-tal, skal den skrive 9000+i
            Case 3
                cell = 10000 + Nummer
                        'når 3. karakter er et 3-tal, skal den skrive 10000+i
        End Select
    End If
Next

End Sub
Avatar billede cazstar Nybegynder
31. marts 2004 - 11:50 #12
Du er sgu en skat bak, jeg takker mange gange.

Giv mig din adresse og jeg sender en stor buket blomster :-)
Avatar billede cazstar Nybegynder
31. marts 2004 - 11:52 #13
Hvordan giver jeg dig pointene? Jeg kan kun se "lasseo" til venstre for "accepter"....
Avatar billede bak Forsker
31. marts 2004 - 16:41 #14
Jeg skal lige svare først :-)
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

Rambøll Management Consulting

Senior AI Engineer

Politiets Efterretningstjeneste

Fullstack softwareudvikler i PET

Netcompany A/S

IT Consultant

Netcompany A/S

Network Engineer