#深夜の俺の戯言

昼間の戯言でも深夜テンション。

入力桁数(カラム)を考慮したデータをエクセルで作成する

例えば、節点番号 X座標 Y座標 Z座標という並びのデータを整理する。

何かしらのインプットデータを作成するとして、各項は入力桁数(カラム)が10でなければならないとする。また、各座標の小数点以下は3桁とする。

 

いま、節点番号1 X座標-200 Y座標-100 Z座標0というデータが入力されているとして、これを下記のように変換したい。

         1            -200.000  -100.000     0.000

なお、節点番号とX座標の間にはダミーのカラムが10桁入っている。

 

まずは節点番号とダミーのカラムの変換から見ていく。(下図赤枠)

f:id:comet-heart-1:20210914110047p:plain

 

例えばG2セルに下記のように入力する。

=CONCATENATE(REPT(" ",10-LENB(A2)),A2,(REPT(" ",10)))

 

CONCATENATE関数:( )内のカンマで区切った文字列を結合する。上記例の場合、「REPT(" ",10-LENB(A2))」と「A2」と「(REPT(" ",10))」を結合する。

REPT関数:文字列を繰り返す。例えば=REPT("あ",10)と入力すると、「ああああああああああ」と、あが10回繰り返される。上記例の場合、ダブルクォーテーションで括った半角スペースが「10-LENB(A2)」回繰り返される。

LENB関数:指定したセルの文字数(バイト数)を返す。ただし、半角文字は1文字につき1バイト、全角文字は1文字につき2バイトとなる。上記例の場合、A2セルは半角で1と入力されているため、LENB(A2)は1となる。

 

以上より、=CONCATENATE(REPT(" ",10-LENB(A2)),A2,(REPT(" ",10)))の出力は

「         1          」となる。1の前で半角スペースが9回、後で10回繰り返されている。

 

続いてX座標の変換。

f:id:comet-heart-1:20210914111652p:plain

 

例えばH2セルに以下のように入力する。

=CONCATENATE(REPT(" ",10-LENB(TEXT(C2,"0.000"))),TEXT(C2,"0.000"))

 

REPT関数とLENB関数で半角スペースの数を整え、CONCATENATE関数で( )内を結合するという基本的な構成は節点番号のときと同じ。今回の初登場はTEXT関数。

TEXT関数:数値に書式を指定し、文字列に変換する。上記例の場合、C2セルの-200という数値に対し、0.000という小数点以下3桁表示を指定している。実行結果は-200.000となる。他にも例えば、表示形式を"0e+0"と指定すると-2e+2と変換される。

 

以上より、=CONCATENATE(REPT(" ",10-LENB(TEXT(C2,"0.000"))),TEXT(C2,"0.000"))の出力は

「  -200.000」となる。-の前で半角スペースが2回繰り返されている。

 

Y座標、Z座標は参照セルをそれぞれD2、E2セルに変えればいいだけなので省略するが、諸々変換すると下図の様になっている。

f:id:comet-heart-1:20210914113012p:plain

あとはこれをCONCATENATE関数で結合すれば良い。

K2セルにでも=CONCATENATE(G2,H2,I2,J2)と入力すると、

「         1            -200.000  -100.000     0.000」と出力され、望んだデータが手に入る。