Avatar billede cazstar Nybegynder
30. marts 2004 - 10:55 Der er 12 kommentarer og
1 løsning

Ændring af en celles værdi i excel vha. vba

VBA i Excel med makroer

Jeg ønsker at ændre lønenumrene i en kollonne som indeholder tallene fra 8011 til 8016 således at de i stedet kommer til at hedde 8001 til 8006.

Jeg har gjort et forsøg, men kan ikke få den til at køre hele vejen ned gennem kollonnen.

----------------

Sub Change_database()

Dim pte As String, i As Integer, prodnr As Object, j As Integer

With Worksheets("old_database")
    Range("B1015:B1052").Name = "pte" 'det range jeg vil ændre i
        Range("B1015").Value = 8001 'ændre cellens værdi
        Range("B1015").Name = "j"
   
    For i = 8011 To 8016
          If .Offset(i, 0).End(xlDown) = i Then
              j = j + 1
              Exit For
          End If
    Next
    'hver gang den møder en værdi på 8011 skal den omdøbe denne til 8001, og så fremdeles...
End With


End Sub

--------------------------


selve opgaveformuleringen ser du her (opgave 1): http://www.sam.sdu.dk/undervis/85435.F04/obli1_2004/Obligatorisk_opgave_2004.pdf

og excel-filen er her: http://www.sam.sdu.dk/undervis/85435.F04/obli1_2004/Danmarks_Museum_for_Lystsejlads.xls
Avatar billede flashit Nybegynder
30. marts 2004 - 11:06 #1
Private Sub btnGo_Click()
    Dim oHyp As Hyperlink
    Dim Resultat As String
    Dim strFind As String
    Dim strReplace As String
   
    strFind = txtFind.Value
    strReplace = txtReplace.Value
   
    lbxResultat.Clear
    lbxResultat2.Clear
   
    For Each oHyp In ActiveWorkbook.ActiveSheet.Hyperlinks
        Resultat = oHyp.Address
        lbxResultat.AddItem (oHyp.Address)
        Resultat = Replace(Resultat, strFind, strReplace)
        oHyp.Address = Resultat
        lbxResultat2.AddItem (oHyp.Address)
    Next oHyp
End Sub
Avatar billede flashit Nybegynder
30. marts 2004 - 11:07 #2
Hvis du skal have hjælp til at rette det til, så siger du bare til.
Avatar billede cazstar Nybegynder
30. marts 2004 - 11:20 #3
Øhmm... det fatter jeg nada af.

kan man ikke bruge noget med .offset og nogle if-sætninger? Det du skriven ovenfor er lige hardcore nok :-)

Sidder og er ved at lave en obligatorisk edb-opgave -læser HA, er derfor ikke den vilde koder... Så hvis du kunne gøre koden lidt mere simpel ville det være super!
30. marts 2004 - 11:32 #4
Her er to eksempler på måder at angribe det på.


Eksempel 1

Public Sub RenameRegistrationNumber()
    Dim rCell As Range
   
    For Each rCell In Worksheets("old_database").UsedRange.Columns(2).Cells
   
        rCell.Value = GetNewValue(rCell.Value)
   
    Next rCell
   
    Set rCell = Nothing
End Sub

Public Function GetNewValue(ByVal sValue As String) As Long
    Dim lRetVal As Long
    Dim iTemp As Integer
    Dim vntCode(1 To 1, 1 To 6) As Variant
   
    vntCode(0, 1) = 8011
    vntCode(1, 1) = 8001
    vntCode(0, 2) = 8012
    vntCode(1, 2) = 8002
    vntCode(0, 3) = 8013
    vntCode(1, 3) = 8003
    vntCode(0, 4) = 8014
    vntCode(1, 4) = 8004
    vntCode(0, 5) = 8015
    vntCode(1, 5) = 8005
    vntCode(0, 6) = 8016
    vntCode(1, 6) = 8006
   
    For iTemp = LBound(vntCode, 2) To UBound(vntCode, 2)
        If vntCode(0, iTemp) = sValue Then
            lRetVal = vntCode(1, iTemp)
            Exit For
        End If
    Next iTemp
   
    GetNewValue = lRetVal
End Function


Eksempel 2

Public Sub ReplaceNumbers()
    PleaseReplace 8011, 8001
    PleaseReplace 8012, 8002
    PleaseReplace 8013, 8003
    PleaseReplace 8014, 8004
    PleaseReplace 8015, 8005
    PleaseReplace 8016, 8006
End Sub

Public Sub PleaseReplace(ByVal vValueOld As Variant, ByVal vValueNew As Variant)
    Worksheets("old_database").UsedRange.Cells.Replace What:=vValueOld, _
        Replacement:=vValueNew, LookAt:=xlPart, SearchOrder:=xlByRows, _
        MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
Avatar billede flashit Nybegynder
30. marts 2004 - 11:41 #5
OK..

Her er en simpel en:
Bare glem den første :-)

Sub expTest()
For Each c In Worksheets("old_database").Range("B1015:B1052")
If c.Value = "8011" Then
c.Value = "8016"
End If
Next

End Sub
Avatar billede kabbak Professor
30. marts 2004 - 12:02 #6
For Each c In Worksheets("old_database").Range("B1015:B1052")
c.Value = c.Value -10
next
Avatar billede kabbak Professor
30. marts 2004 - 12:03 #7
Husk kør den kun 1 gang, den trækker 10 fra celleværdien
Avatar billede flashit Nybegynder
30. marts 2004 - 12:14 #8
DOH...kabbak
Det var da meget næmmere :-)
Avatar billede cazstar Nybegynder
30. marts 2004 - 12:29 #9
Det er jo klart den nemmeste måde at gøre det på! Her "vinder" Kabbak helt klart, kan jeg evt. stoppe "for each", sådan at den kun trækker 10 fra én gang?

(hvordan tildeler jeg pointene til kabbak?)
Avatar billede kabbak Professor
30. marts 2004 - 12:30 #10
Ved at jeg giver et svar. ;-))
Avatar billede kabbak Professor
30. marts 2004 - 12:32 #11
sub ret()
For Each c In Worksheets("old_database").Range("B1015:B1052")
c.Value = c.Value -10
next
end sub

du skal bare køre subben en gang, så kan du slette den
Avatar billede cazstar Nybegynder
30. marts 2004 - 12:36 #12
jeg takker mange gange for jeres hjælp! jeg opretter nok lige en ny tråd inden så længe med endnu et spørgsmål :-)

take care...
Avatar billede kabbak Professor
30. marts 2004 - 13:55 #13
Tak for point. ;o))
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