- ベストアンサー
エクセルの文字列を空白で文字数を揃えたい
皆様のお知恵を拝借したく書き込んでいます。 どうか宜しくお願いいたします。 エクセルにあるデータをカンマ区切りCSVに したいと思っております。 *例 1,1,1,3,1,2,11,・・・ これに数値を空白で埋めて四文字(0001,等)にさせたいのですが、 どのような方法が可能でしょうか? ・試したこと 1、サクラエディタでの正規表現 でも、置換後の文字列を動的に渡せるのかわからなくて失敗。 2、セルの表示形式 数値の桁数によって変化させる方法がわからず 3、エクセルマクロ LEN関数を使ってループさせれば可能? (時間がかかりそうです) 以上、宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こういう入力から ,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
その他の回答 (4)
- Bonjin
- ベストアンサー率43% (418/971)
ExcelのText関数を使えば簡単に変換出来ませんか?
補足
回答ありがとうございます。 TEXT関数を調べてみましたが、 空白で埋める表示形式が見つけれませんでした。 可能でしょうか?
~0001,~0011,~0111,~1111 失礼、[0001] は例示みたいですね。 ならば、~等を書式に加えたらいいです。 後は、メモ帳で ~000、~00、~0、~ の4つをスペースに変換。 ちょっと、手作業になりますが、大した作業じゃないでしょう。
補足
回答ありがとうございます。 しかし、頻繁にすることなので 手作業はまずいと思っております。
<Book1.xls> 1____11___111__1111 <Book1.csv> 0001,0011,0111,1111 と出力するには、書式指定="0000" だけでOKかと思います。 「メモ帳」で確認すれば、上述のように出力されている筈です。
補足
回答ありがとうございます。 私の例が間違っていました。 空白で埋めるので、0でなく空白にしたいのです。
- Hardking
- ベストアンサー率45% (73/160)
処理概要としては エクセルのセル値を入力データとして 各項目値が4桁固定長のCSVファイルを出力すると言うことですね。 手法は色々ありますが、ある簡単な一つ例としては 入力値を4桁に右詰めしたセル式を設け、式の結果を CSVファイルへ出力します。 1.半角空白4文字と入力値を文字連結する。 2.文字連結したものを右側から4文字部分取り出しする。RIGHT関数 上記1.2.の手順で処理する 1桁入力した場合 ===> 1 2桁入力した場合 ===> 12 3桁入力した場合 ===> 123 4桁入力した場合 ===> 1234 という式の結果が得られます。
補足
回答ありがとうございます。 一番地道で確実な方法ですね。 さまざまなサンプルソースありがとうございます。 参考にさせていただきます。