Avatar billede HanneYsted Juniormester
06. maj 2018 - 15:38 Der er 9 kommentarer og
1 løsning

Hjælp til VBA

Hej,

Jeg skal konvetere nogle datoer f.eks. 15/03/2004 til en "Enroll period" på formen "Spring 2004", og disse skal så skrives i en ny kolonne. Jeg har datoerne i kolonne D og det konverterede skal ende i kolonne M.

Jeg skal lave det med VBA og har følgende sub:

Sub Convert_Enroll()

Dim EnrollDate As String
EnrollDate = Range("D2")
Range("M2") = EnrollDate

Dim season As String
    Dim year As String
   
    year = Right(EnrollDate, 4)
   
    If Mid(EnrollDate, 4, 2) = "12" Or Mid(EnrollDate, 4, 2) = "01" Or Mid(EnrollDate, 4, 2) = "02" Then
        season = "Winter"
   
    Else
        If Mid(EnrollDate, 4, 2) = "03" Or Mid(EnrollDate, 4, 2) = "04" Or Mid(EnrollDate, 4, 2) = "05" Then
            season = "Spring"
       
        Else
            If Mid(EnrollDate, 4, 2) = "06" Or Mid(EnrollDate, 4, 2) = "07" Or Mid(EnrollDate, 4, 2) = "08" Then
                season = "Summer"
           
            Else
                season = "Fall"
               
            End If
        End If
    End If

End Sub

Men jeg får blot datoen og ikke det konverterede. Nogen som kan hjælpe?
Avatar billede claes57 Ekspert
06. maj 2018 - 16:20 #1
du har
Range("M2") = EnrollDate
i starten - og den gentager bare datoen - slet den linje
Efter alle End If'er (lige før End Sub), så tilføj
Range("M2") = season

så skulle den være der
Avatar billede claes57 Ekspert
06. maj 2018 - 16:22 #2
obs - årstal skal med, så
Range("M2") = season & " " & Mid(EnrollDate, 7, 4)
Avatar billede claes57 Ekspert
06. maj 2018 - 16:24 #3
du havde selv defineret år, så
Range("M2") = season & " " & year
Avatar billede HanneYsted Juniormester
06. maj 2018 - 16:37 #4
Tusinde tak for svar. Det ser bedre ud nu, jeg har dog stadig lidt problemer. Den kommer rigtigt ud med "Summer 1996" i den første kolonne M, men de resterende data i kolonnen bliver blot "Summer 1997, 1998, 1999" osv.

Hvordan får jeg den til at opgive den specifikke sæson samt årstal?
Altså ved 15-03-2005, skal jeg f.eks have den til at skrive "spring 2004".

Er det noget du kan hjælpe med? :-)
Avatar billede HanneYsted Juniormester
06. maj 2018 - 16:43 #5
Jeg kan se, at det er her:

EnrollDate = Range("D2")

At det er galt. Når jeg ændre værdien til f.eks. D3, så kommer der et nyt årstal og sæson. Hvordan kan jeg gøre, så den ved, at dem alle og ikke kun en enkelt kolonne? Jeg har prøvet både med "D2:D18288" og "D2:D", og det vil den ikke.
Avatar billede claes57 Ekspert
06. maj 2018 - 17:14 #6
se på https://www.excel-easy.com/vba/examples/loop-through-defined-range.html
du skal have et ydre loop, og så er der noget mht læse fra Dx og skrive i Mx som jeg ikke har styr på, men som du skal bruge i stedet for D2 og M2
Avatar billede store-morten Ekspert
06. maj 2018 - 19:46 #7
Prøv:
Sub Convert_Enroll()
Dim EnrollDate As String
    Dim season As String
        Dim year As String
            Dim Month As String
Rk = 2
For Each c In Range("D2:D18288").Cells
   
    EnrollDate = c
    year = Right(EnrollDate, 4)
    Month = Mid(EnrollDate, 4, 2)
   
Select Case Month
    Case "12", "01", "02"
        season = "Winter"
    Case "03", "04", "05"
        season = "Spring"
    Case "06", "07", "08"
        season = "Summer"
    Case "09", "10", "11"
        season = "Fall"
    Case Else
End Select

Range("M" & Rk) = season & " " & year
Rk = Rk + 1
Next c

End Sub
Avatar billede HanneYsted Juniormester
07. maj 2018 - 13:04 #8
Tak for hjælpen, nu har jeg fået den løst!
Avatar billede store-morten Ekspert
07. maj 2018 - 13:15 #9
Velbekomme.
Har du prøvet mit forslag, i det andet spørgsmål?
Avatar billede HanneYsted Juniormester
07. maj 2018 - 13:21 #10
Ja, det har jeg. Det virker fint :-)
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

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