Avatar billede hubertus Seniormester
06. marts 2023 - 11:10 Der er 8 kommentarer og
2 løsninger

Hvad overser jeg i funktionen KolonneBogstav? (EXCEL)

Hej Eksperter
Håber at I kan hjælpe med nedenstående funktion,

Hvis kolNr = 30, så får jeg som forventet et resultat som er AD, men hvis  kolNr = 36, så er indholdet af KolonneBogstav blankt. Det burde være AJ.
Skriver jeg  Debug.Print KolonneBogstav + Chr(64 + 10) så er resultatet AJ.
hvad overser jeg?

Private Function KolonneBogstav(kolNr)
' Dim bogstav As String
    KolonneBogstav = ""
   
    If kolNr > 26 Then
        KolonneBogstav = "A"
        kolNr = kolNr - 26
    End If
   
    KolonneBogstav = KolonneBogstav + Chr(64 + kolNr)
End Function
Avatar billede jens48 Ekspert
06. marts 2023 - 12:27 #1
Din funktion virker OK her. Med en lille ændring, som vist nedenfor vil den virke for kolonner til og med ZZ (kolonne 702):

Private Function KolonneBogstav(kolNr)
    KolonneBogstav = ""
 
    If kolNr > 26 Then
        KolonneBogstav = Chr(64 + Int((kolNr - 1) / 26))
        kolNr = kolNr - 26 * Int((kolNr - 1) / 26)
    End If
 
KolonneBogstav = KolonneBogstav + Chr(64 + kolNr)
End Function
Avatar billede hubertus Seniormester
06. marts 2023 - 14:07 #2
Hej Jens

Hvis jeg anvender funktionen og stopper den lige inden den returnere KolonneBogstav, og holder musen over KolonneBogstav, så vises: KolonneBogstav= men ikke noget efter lighedstegnet.
indsættes:  KolonneBogstav + Chr(64 + kolNr) så får jeg nu: AJ.
Ved du hvorfor at jeg kun får KolonneBogstav=  , når musen holdes over variablen?
Avatar billede Dan Elgaard Ekspert
06. marts 2023 - 14:10 #3
En enkelt linje kan gøre det:

KolonneBogstav =  = Replace(Cells(1, KolNr).Address(False, False), 1, vbNullString)

Vil virke med samtlige kolonner fra 1 til 16384 :-)
Avatar billede hubertus Seniormester
06. marts 2023 - 14:16 #4
UPS  rettelse

debug.print  KolonneBogstav + Chr(64 + kolNr) så får jeg nu: AJ.
Avatar billede jens48 Ekspert
06. marts 2023 - 14:55 #5
Hvordan virker det med Dans noget mere elegante øsning:

Private Function KolonneBogstav(kolNr)
  KolonneBogstav = Replace(Cells(1, kolNr).Address(False, False), 1, vbNullString)
End Function
Avatar billede hubertus Seniormester
06. marts 2023 - 20:16 #6
#5 den virker også fint mht. til output fra funktionen, men også her indeholder kolonneBogstav kun: kolonneBogstav =  , når musen holdes hen over variablen/funktionsnavnet. Jeg vil jo gerne forstå, hvorfor det er tilfældet i begge funktioner.
Avatar billede jens48 Ekspert
07. marts 2023 - 10:48 #7
Jeg forstår ikke hvad du gør, og kan derfor ikke give nogen forklaring
Avatar billede hubertus Seniormester
07. marts 2023 - 11:11 #8
Jeg løber koden igennem med F8 i editoren. Her kan jeg se indholdet af en variabel, når markøren holdes ovenpå variablen, når linjen er eksekveret. Gør jeg det når KolNr = 30, så kan jeg se at værdien for KolonneBogstav er "AD".  Hvis KolNr = 36 er  resultatet af KolonneBogstav + Chr(64 + 10:  bare KolonneBogstav =  og så ikke mere. Det er det som undre.
Avatar billede Dan Elgaard Ekspert
07. marts 2023 - 11:46 #9
Hvis du ikke ønsker/gider benytte en makro funktion, kan du også lave det med en simpel regnearksformel:

=UDSKIFT(ADRESSE(1;MAKS(1;A1);4;1);1;"")

...hvor du indtaster kolonnenummeret i celle A1.

Celle A1 kan du naturligvis ændre til en anden celle, hvis du ønsker det.
Avatar billede hubertus Seniormester
13. marts 2023 - 11:44 #10
Jeg lukker den her, idet jeg jo har en løsning, Desværre uden en forklaring på, hvorfor jeg oplever det jeg gør.
Tak til Jens og Dan - God dag :-)
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