Just nu i M3-nätverket
Jump to content

Kolumnbokstav till kolumnnummer?


Mr Andersson

Recommended Posts

Finns det någon inbyggd funktion i Excel som omvandlar mellan kolumnboksta (tex AE) till kolumnnummer (31)?

 

Det är iofs inget svårt att banka ihop det själv, men finns det färdigt så är det ju bättre :) Det gör inget om man även kan omvandla på andra hållet.

 

 

 

Link to comment
Share on other sites

=Kolumn(AE1) => 31

 

precis som

=RAD(A31) => 31

 

:)

 

Andra hållet? Det skulle vara funktionen ADRESS då tror jag.

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2008-09-12 15:31:32 av Monshi]

Link to comment
Share on other sites

Tack!

 

Men jag stör mig på mig själv - jag är så uppe i mitt projekt, att jag glömmer nämna VBA...

 

Jag har skapat ett antal variabler som innehåller kolumn-namnet ("AE", tex) och det är detta jag vill, i VBA, omvandla till kolumn-nummer.

 

Jag har gjort en egen funktion, men om det finns färdigt, så varför inte använda den...?

 

 

 

 

[inlägget ändrat 2008-09-12 22:23:27 av Mr Andersson]

Link to comment
Share on other sites

Variabel med adress i eller en range-variable med en referens till en cell?

 

Om det senare:

Dim myRn As Range
Set myRn = Range("AE32")
MsgBox myRn.Column

Samt om vi vänder på det, du har kolumn-nummer:

Set myRn = Cell(rad, kolumn)

 

 

 

Samt VBA - då flyttar jag den dit...

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2008-09-12 22:28:57 av Monshi]

Link to comment
Share on other sites

Hmm... intressant på sitt sätt.

 

Jag har gjort en annan variant.

 

Jag har ett antal variabler (globala) som jag dimmar och sätter i modul1:

dim MinAdress as string

..

..

..

MinAdress = "C"

 

 

Senare i koden:

 

sheets("blupp").cells(rad,MinAdress)

 

' =funkar kanon

 

men i funktioner som använder 'target' som parameter, så accpeteras bara nummervärden. Hur omvandlar jag enklast mina "sifferkolumner" till "nummerkolumner". Som jag sagt redan, så har jag gjort en egen funktion, men min magkänsla säger att jag inte borde göra så.

 

 

 

Link to comment
Share on other sites

Vad är målet med denna adresshantering?

 

Min rekommendation vad gäller adressering av celler i VBA är enkel:

Aldrig exakta! Blad ändras, VBA-koden hänger inte med.

 

med andra ord - skapa namn på bladet du arbetar, namnge celler, och arbeta i dessa celler och kanske relativt dessa. Då kan bladet ändras och koden hänga med.

 

 

Men med adresser, om du ska spara kolumn-index, varför inte kolumnnumret från början? Dvs en integer som håller numret. Eller ett Range-objekt med en referens till godtycklig cell i önskad kolumn? Mycket enklare, renare.

 

mmh, din rad

sheets("blupp").cells(rad,MinAdress)

intressant. Aldrig tänkt på att man kan använda kolumnnamnet där, blir ju ganska enkelt faktiskt. Man lär sig något nytt varje dag...Antar dock att adressering via index (siffra) borde vara lite lite snabbare.

 

Ed:

Allt i Excel går att göra flera olika sätt.

Ett alternativ till ditt ovan:

Sheets("blupp").Range(MinAdress & rad)

 

Ett sista tips - om möjligt, använd VBA-namnet på bladet du adresserar. Säkrare även det, bladnamn kan ändras.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2008-09-12 23:14:19 av Monshi]

Link to comment
Share on other sites

jag har förenklat det en hel del. Cellernas betydelse bestäms av andra cellers värde.

 

Jag vill bara veta om det finns inbyggda funkioner för omvandlingen som jasg nämnt.

 

Och jag måste passa på att ge dig en liten guldstjärna!

 

mmh, din rad

sheets("blupp").cells(rad,MinAdress)

intressant. Aldrig tänkt på att man kan använda kolumnnamnet där, blir ju ganska enkelt faktiskt. Man lär sig något nytt varje dag...Antar dock att adressering via index (siffra) borde vara lite lite snabbare.

 

Jag är amatör på Excel (men inte på programmering), och du, som är min Excel-gud, ger mig den kommentaren ; du fick mig att tappa andan. Tack, eller vad säger man?!

 

 

 

Link to comment
Share on other sites

Jag är amatör på Excel (men inte på programmering), och du, som är min Excel-gud, ger mig den kommentaren ; du fick mig att tappa andan. Tack, eller vad säger man?!

kan inte annat än le :)

 

man följer det man en gång lärt sig och testar inte nytt. För det man har fungerar och följer de mallar som finns.

 

Men anropet Cells(1, "c") är inte så konstigt egentligen om man tänker sig Cells som vilken annan samling objekt i Excel. Man kan, i nästan alla lägen, nå alla objekt i en samling antingen som index eller via namn, blad, OLE-objekt, shapes-objekt, whatever...

 

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Jag kom fram till att min redan befintliga funktiom gör det jag vill på enklaste sättet :)

 

Så här ser den ut:

 

Function ColNum(ColDigits)
 ColDigits = "@" & UCase(ColDigits)
 ColNum = (Asc(Mid(ColDigits, Len(ColDigits) - 1, 1)) - 64) * 26 + (Asc(Right(ColDigits, 1)) - 64)
End Function

 

Link to comment
Share on other sites

Function ColNum(ColDigits as String) As Integer
  ColNum = Cells(1, ColDigits).Column
End Function

 

enklare kan det väl icke vara.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2008-09-13 23:32:47 av Monshi]

Link to comment
Share on other sites

inte testat men jag tror dig om du säger så.

 

Dock tror jag att din version är långsammare, något som kan spela in om du anropar den ofta. Snabbast är nog att antingen egentligen spara en referens till cell i kolumnen eller kolumnens nummer från början.

 

men är du nöjd så är jag nöjd.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...