3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excelの列名を列番号の数字に変換するオブジェクトを作りました。 #blueprism

Last updated at Posted at 2021-03-08

これを作った理由

F列は6列目、くらいならすぐわかりますが、GF列って何列目かくらいになると、とっさにはわからず……
平安絵巻みたいなクソ長い台帳なんか運用しy

冷静に考えてみる

これExcelの列だと思うから、Excelをどうしようとか、セルを左から順に数えてとか、ややこしく考えてしまうんで
この列名ってつまり26進数ですよね?
「〇進数を△進数に変換する」っていうのは算数ドリルの問題とか、プログラミングの練習問題で絶対出てくるやつで

たとえば、8進数を10進数に変換する場合: 264 だったら $28^2 + 68^1 + 4*8^0$

っていうやつ。つまり「各桁の数字 × 〇進数の〇を(桁数-1)乗したもの」を全部足してます。
「26進数を10進数に変換する」と思えば、これってただの初級練習問題レベルのお話でした。
だからGF列なら、$7 * 26^1 + 6 * 26^0 = 188$ 列目、ということになるわけです。

必要なもの

まず、計算するためにA~Zを1~26の数字に変換しないといけないんですが
半角大文字をAscで変換した文字コードから64引いたら、ちょうどいい数字になります。なのでこれを使います。
下表は、文字に対応する文字コードと、そこから64引いた数字です。
文字コード表.png
英文字を文字コードに変換するのはAscで、MicrosoftDocの説明はこちら
階乗はこれを使います。MicrosoftDocの説明はこちら
列名の英文字を1文字ずつにバラして計算するので、バラして配列に入れるのがこれ。MicrosoftDocの説明がこちら

これを踏まえて作ったオブジェクト

入力引数はColAlpha、出力引数はColNum。
入力引数.png
出力引数.png
InitializeのNamespace Importsに、System.IOとMicrosoft.VisualBasicを足しておいてください。(上で挙げたメソッドを使うために必要)
コードオプション.png

フロー。コードステージに入る前に、列名が半角大文字英字のみになるように予めチェックとか変換とかをしておきます。
フロー.png
「文字種確認」ステージで、3桁までの半角英字でないものはNGとしています。
正規表現でチェックするのに使っているVBOはAVO.RegEx。DXのここに置いてあるやつをインポートするだけ。
文字種確認.png
大文字にするのは関数で
大文字に.png

コードステージの中身。事前に入力引数をクリーンにしているのであり得ないはずですが、もし半角英数大文字以外が入ってきたら0を返します。
コード.png

' 列名をバラす
Dim aryColAlpha As Char() = ColAlpha.ToCharArray()
' 桁数-1
Dim cntMul As Integer = ColAlpha.Length - 1

For Each c As Char In aryColAlpha
	' 英字(A~Z)を数字(1~26)に変換
	Dim Currentc As Integer = Asc(c) - 64
	' 半角英大文字でなかった場合は0を返して終了する
	If Currentc < 1 Or Currentc > 26 Then
		ColNum = 0
		Exit For
	End IF

	ColNum += Currentc * CType(Math.Pow(26, cntMul), Integer)
	cntMul -= 1
Next

終わりです

これはただ「〇進数を△進数に変換」してるだけなので、Blue Prismに限らず、UiPathとか他のツールなりなんなりでも普通に使えるお話です。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?