0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Excel 表記の変換 R1C1 から A1 へ / A1 から R1C1 へ

Last updated at Posted at 2022-02-19

Excel 表記の変換方法です。
R1C1表記 から A1表記 へ、 そして A1表記 から R1C1表記 への変換ができます。

Codeforge の 1B がこれに似た問題です。 最近は Excel での作業もそこそこあり、 たまに使いたくなることがあります。

関数・定数定義

RC_PATTERN = /\AR(\d+)C(\d+)/
ABC_PATTERN = /\A([A-Z]+)(\d+)\z/

def cv_rc(value)
    v = 0
    for c in value.split('')
        v *= 26
        v += (c.ord - 'A'.ord + 1)
    end
    v
end

def cv_a(value)
    ('A'.ord + value - 1).chr
end

def cv_ab(value)
    return '' if value == 0

    cv_ab((value - 1) / 26) + cv_a((value - 1) % 26 + 1)
end

def cv(pattern)
    if pattern =~ RC_PATTERN
        m = RC_PATTERN.match(pattern)

        puts cv_ab(m[2].to_i) + m[1]
    else
        m = ABC_PATTERN.match(pattern)

        puts 'R' + m[2] + 'C' +  cv_rc(m[1]).to_s
    end
end

A1表記のアルファベット部分は、 27進数のように思うかもしれませんが、 ちょっと違います。
27進数では、
A を 0 とすると AA = A になりますし、
A を 1 とすると 26 (Z) の次が 28 (AA) になります。

実行

cv('AS1')   # R1C45
cv('R1C45') # AS1

参考

マイクロソフトがやり方を公開しています。
Excel の列番号をアルファベット順に変換する方法

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?