Avatar billede Alex5358 Novice
10. april 2018 - 15:21 Der er 19 kommentarer

Konverter tal til tekst + årstal og sæt ind i ny kolonne

Hej. Jeg sidder med et problem. Jeg har en kolonne (F) med en masse tal, som skal konverteres og flyttes over i en ny kolonne (G). Tallene ligger mellem 94-138 og tallene vil stige med 1 hvert halve år.
For alle lige tal skal der stå "efterår + årstallet" og for alle ulige tal skal der stå "forår + årstal" i den nye kolonne (G). Nummer 138 og 137 er år 2018 og 136 og 135 år 2017 og så fremdeles ned til 94 og ligeledes den anden vej når der med tiden vil komme flere tal.
Jeg har nu prøvet på adskillige måder men har ikke kommet med noget brugbart indtilvidere... Please hjælp.

Vh Alex
Avatar billede kabbak Professor
10. april 2018 - 15:45 #1
Her er formlen for 94 og 95

= HVIS(REST(F94;2)=1;"Forår" &(F94+1881);"Efterår"&(F94+1880))
Avatar billede kabbak Professor
10. april 2018 - 15:46 #2
Bare træk formlen nedad
Avatar billede falster Ekspert
10. april 2018 - 15:56 #3
De ulige årstal?
Avatar billede Alex5358 Novice
10. april 2018 - 16:15 #4
Hej igen. Det hele skal laves i VBA. det er det der volder problemer
Avatar billede kabbak Professor
10. april 2018 - 18:38 #5
#3 du har ret, det havde jeg overset

#4 kikker på det
Avatar billede kabbak Professor
10. april 2018 - 18:56 #6
Prøv denne,
Jeg går ud fra at du har overskrifter i række 1 og data starter i række 2.
Den Oveskriver det der evt. står i kolonne G
Jeg har testet den fra 94 og til 165, og det ser fint ud

Public Sub test()
    Dim DataIND As Variant, DataUD As Variant, I As Long, RW As Long, K As Long
    RW = Range("F" & Application.Rows.Count).End(xlUp).Row    ' finder brugte rækker
    DataIND = Range("F1:F" & RW)    ' henter data fra F kolonnen
    DataUD = Range("G1:G" & RW)    ' kolonne som overskrives
K = 1902
    For I = 2 To RW
        If (DataIND(I, 1) Mod 2) = 1 Then  ' Tjekker om tallet er lige
            DataUD(I, 1) = "Forår  " & (DataIND(I, 1) + (K))
            K = K - 1
        Else
            DataUD(I, 1) = "Efterår " & (DataIND(I, 1) + (K))
        End If
    Next
    Range("G1:G" & RW) = DataUD

End Sub
Avatar billede Alex5358 Novice
10. april 2018 - 19:05 #7
Tak. Den virker næsten, mine datoer er virkelig høje som i 2030, 2028, 2036 osv. har du en løsning forklaring på det ?
Avatar billede Alex5358 Novice
10. april 2018 - 19:06 #8
138 skal svare til 2018
Avatar billede kabbak Professor
10. april 2018 - 19:19 #9
132    Efterår 2015
133    Forår  2016
134    Efterår 2016
135    Forår  2017
136    Efterår 2017
137    Forår  2018
138    Efterår 2018

sådan ser de ud i mit ark
Avatar billede Alex5358 Novice
10. april 2018 - 19:22 #10
109    Forår,  2011
124    Efterår, 2025
132    Efterår, 2033
133    Forår,  2034
136    Efterår, 2036
136    Efterår, 2036
135    Forår,  2035
134    Efterår, 2033
122    Efterår, 2021
136    Efterår, 2035

Sådan ser det ud her. hvad kan være galt ?
Avatar billede kabbak Professor
10. april 2018 - 19:24 #11
Du har måske ikke data i stigende orden, så får du problemer

Alle tal skal være der og kun en gang
Avatar billede kabbak Professor
10. april 2018 - 19:26 #12
Jeg kan se at det giver problemer, hvis data ikke starter med 94 og stigende

jeg kikker videre
Avatar billede kabbak Professor
10. april 2018 - 19:52 #13
Prøv igen

Public Sub test()
    Dim DataIND As Variant, DataUD As Variant, I As Long, RW As Long, K As Long
    RW = Range("F" & Application.Rows.Count).End(xlUp).Row    ' finder brugte rækker
    DataIND = Range("F1:F" & RW)    ' henter data fra F kolonnen
    DataUD = Range("G1:G" & RW)    ' kolonne som overskrives

    For I = 2 To RW
        If (DataIND(I, 1) Mod 2) = 1 Then  ' Tjekker om tallet er lige
        K = 1949 + (DataIND(I, 1) - Int(DataIND(I, 1) / 2))
          DataUD(I, 1) = "Forår  " & K

        Else
        K = 1949 + (DataIND(I, 1) - (DataIND(I, 1) / 2))
          DataUD(I, 1) = "Efterår " & K
        End If
       
    Next
    Range("G1:G" & RW) = DataUD

End Sub
Avatar billede Alex5358 Novice
10. april 2018 - 19:55 #14
Du er en stjerne! Mange tak for hjælpen :)
Avatar billede Alex5358 Novice
10. april 2018 - 20:12 #15
Har du mulighed for at sætte ord på hvordan datoen nu stemmer overens?
altså
K = 1949 + (DataIND(I, 1) - Int(DataIND(I, 1) / 2))
hvis dataIND = 138 så vil det give 2018?
Avatar billede Alex5358 Novice
10. april 2018 - 20:27 #16
Jeg forstår nemlig ikke int "heltal" står der?
jo det virker men forstår bare ikke hvorfor
Avatar billede kabbak Professor
10. april 2018 - 21:48 #17
0 svarer til 1949

når du  dividerer et ulige tal med 2, får du et resultat med ½ , det kan du ikke bruge, så bruges INT.
INT giver heltallet på et decimaltal

"hvis dataIND = 138 så vil det give 2018?"

K = 1949 + (DataIND(I, 1) - Int(DataIND(I, 1) / 2))

(DataIND(I, 1) - Int(DataIND(I, 1) / 2))

(138 - (138/2)) som giver

1949 + 69 = 2018
Avatar billede Alex5358 Novice
10. april 2018 - 22:05 #18
SÅ hvis du skulle skrive det som Excel formel ville du skrive således:
=1949+(135-(HELTAL(135/2))) ?

Og hvordan kom du lige på det skulle være 1949?

Undskyld de mange spørgsmål. vil bare gerne for står det en gang for alle
Avatar billede kabbak Professor
10. april 2018 - 22:49 #19
Jeg talte bare baglæns og så måtte 0 være 1949, hvorfor i har startet der, ved jeg ikke
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