• ベストアンサー

エクセルの文字列を空白で文字数を揃えたい

皆様のお知恵を拝借したく書き込んでいます。 どうか宜しくお願いいたします。 エクセルにあるデータをカンマ区切りCSVに したいと思っております。 *例 1,1,1,3,1,2,11,・・・ これに数値を空白で埋めて四文字(0001,等)にさせたいのですが、 どのような方法が可能でしょうか? ・試したこと 1、サクラエディタでの正規表現 でも、置換後の文字列を動的に渡せるのかわからなくて失敗。 2、セルの表示形式 数値の桁数によって変化させる方法がわからず 3、エクセルマクロ LEN関数を使ってループさせれば可能? (時間がかかりそうです) 以上、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

こういう入力から ,1,1,1,1,1,1,1,1,1 2,2,2,2,2,2,2,2,2,2 20,20,20,20,20,20,20,20,20,20 999,999,999,999,999,999,999,999,999,999 3333,3333,3333,3333,3333,3333,3333,3333,3333,3333 55555,55555,55555,55555,55555,55555,55555,55555,55555,55555 こういう結果が得られれば良いということですか? 0001,0001,0001,0001,0001,0001,0001,0001,0001,0001 0002,0002,0002,0002,0002,0002,0002,0002,0002,0002 0020,0020,0020,0020,0020,0020,0020,0020,0020,0020 0999,0999,0999,0999,0999,0999,0999,0999,0999,0999 3333,3333,3333,3333,3333,3333,3333,3333,3333,3333 55555,55555,55555,55555,55555,55555,55555,55555,55555,55555 スクリプト言語使えば楽できるかと。 どれでもお好きなものをどうぞ。 awk版 BEGIN { FS=OFS="," } { for (i=1; i<NF; i++) { printf("%04d,", $i) } printf("%04d\n", $NF) } Perl版 use strict; while (my $line = <>) { my @fields = split /,/, $line; print join(q{,}, map {sprintf "%04d", $_} @fields), "\n"; } Perl版 その2 while (<>) { s{(\d+)}{sprintf "%04d", $1}ge; print; } Ruby版 ARGF.each do |line| puts line.gsub(/\d+/) {|item| sprintf "%04d", item} end

dindin_001
質問者

補足

回答ありがとうございます。 一番地道で確実な方法ですね。 さまざまなサンプルソースありがとうございます。 参考にさせていただきます。

その他の回答 (4)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.5

ExcelのText関数を使えば簡単に変換出来ませんか?

dindin_001
質問者

補足

回答ありがとうございます。 TEXT関数を調べてみましたが、 空白で埋める表示形式が見つけれませんでした。 可能でしょうか?

noname#140971
noname#140971
回答No.4

~0001,~0011,~0111,~1111 失礼、[0001] は例示みたいですね。 ならば、~等を書式に加えたらいいです。 後は、メモ帳で ~000、~00、~0、~ の4つをスペースに変換。 ちょっと、手作業になりますが、大した作業じゃないでしょう。

dindin_001
質問者

補足

回答ありがとうございます。 しかし、頻繁にすることなので 手作業はまずいと思っております。

noname#140971
noname#140971
回答No.3

<Book1.xls> 1____11___111__1111 <Book1.csv> 0001,0011,0111,1111 と出力するには、書式指定="0000" だけでOKかと思います。 「メモ帳」で確認すれば、上述のように出力されている筈です。

dindin_001
質問者

補足

回答ありがとうございます。 私の例が間違っていました。 空白で埋めるので、0でなく空白にしたいのです。

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.2

処理概要としては エクセルのセル値を入力データとして 各項目値が4桁固定長のCSVファイルを出力すると言うことですね。 手法は色々ありますが、ある簡単な一つ例としては 入力値を4桁に右詰めしたセル式を設け、式の結果を CSVファイルへ出力します。 1.半角空白4文字と入力値を文字連結する。 2.文字連結したものを右側から4文字部分取り出しする。RIGHT関数 上記1.2.の手順で処理する 1桁入力した場合 ===> 1 2桁入力した場合 ===> 12 3桁入力した場合 ===> 123 4桁入力した場合 ===> 1234 という式の結果が得られます。   

関連するQ&A

専門家に質問してみよう