Excelの列名と列番号を互換する関数

 2018/02/23    R言語入門    

Excelでは列名が整数ではなく、アルファベットで表示され、指定した列が何番目の列かが分かりづらくなっています。1列目はA列で26列目はZ列。27列目からAA列、28列目がAB列というような感じです。今回は、Excelの列番号(整数)を入れれば、Excelの列名(アルファベット列名)に変更する関数と、逆にExcelの列名を入れれば、Excelの列番号に変更する関数を作ったので是非ご活用ください。

関数

(列番号)⇒(列名)に変換する関数

NumToLet <- function(i){
 q <- floor(i/26) #商
 r <- i%%26 #余り
 if(r==0){
 q <- q - 1
 r <- 26
 }
 ret <- ifelse(q==0,"",NumToLet(q)) #アルファベットが一巡した時の処理
 return(paste(ret,LETTERS[r],sep="")) #再帰的に呼び出す
}

以上の関数「NumToLet」に列番号(整数)を引数として渡すと、列名(アルファベット)を返してくれます。

(列名)⇒(列番号)に変換する関数

LetToNum <- function(l){
 str <- rev(strsplit(l,"")[[1]]) #文字列を一文字ずつに分解
 sum <- 0
 for(i in 1:length(str)){ #26(アルファベットの数)進数を10進数に変換する
 r <- 26^(i-1) 
 idx <- which(LETTERS==str[i]) #LETTERSベクトルとwhichを使い、アルファベットの番号を参照する

 sum <- sum + idx*r
 }
 return(sum)
}

以上の関数「LetToNum」に列名(アルファベット)を引数として渡すと、列番号(整数)を返してくれます。

使用例

(列番号)⇒(列名)に変換する関数の使用例

> NumToLet(26)
[1] "Z"
> NumToLet(27)
[1] "AA"
> NumToLet(28)
[1] "AB"
> NumToLet(100)
[1] "CV"

(列名)⇒(列番号)に変換する関数の使用例

> LetToNum("Z")
[1] 26
> LetToNum("AA")
[1] 27
> LetToNum("AB")
[1] 28
> LetToNum("CV")
[1] 100

参照しづらいExcelの列名、列番号も、これで簡単に得ることができます。

  • スポンサーリンク

  • 関連コンテンツ

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA