- ベストアンサー
エクセルでの文字列操作
間に空白がある文字列「AB C」を「AB C 」 「A BC」は「A BC」 「A B」 は「A B 」 と言う風に変更したいのですが何か良い方法はないでしょうか? 前が苗字で空白後名前なのですが印字する時のバランスをとりたいのです。皆さんどうかお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
(1)A1の名前を一旦B列、C列に分解します。 A列を範囲指定して メニューのデータ-区切り位置-カンマやタブ・・-次ぎへ-(区切り文字)スペース-次ぎへ-完了 A列 大阪谷 三郎 原 一郎 が A列 B列 大阪谷 三郎 原 一郎 になります。 (2)C1に=A1&REPT(" ",6-LEN(A1))&B1と入れます。 C2以下式を複写します。 6は適当に、4か5か6(字)のどれかが適当でしょう。 (3)書体をP(MSP明朝など)の入っていない MS明朝などに設定します。 大阪谷 三郎 原 一郎 などになりました。
その他の回答 (5)
- whitepepper
- ベストアンサー率27% (683/2442)
印刷のためだけにデータそのものを加工してしまうのは、データベース管理の基本的姿勢からちょっと外れますね。 それで、マクロやVBAでもできるでしょうが、スクリプトを書いている暇があったら、CSVで書き出して秀丸エディタあたりで加工したほうがずっと手っ取り早かったりします。 それで、もっと根本的なことでご提案しますと、 》印字する時のバランスをとりたいのです。 これが最終目的なら、「筆自慢」とか「筆ぐるめ」などの年賀状ソフトにデータをコンバートして、そちらで印字すればいいでしょう。これらのソフトは、個々のデータごとの印字バランスの調整について、他に比類のないほど優れています。
お礼
う~ん、そうなんですよね~。 でも送られてくるデータがなぜか「佐藤 一郎 」とか末尾にスペースが入ってくるんですよ。 TRIM関数を使ってから筆ぐるめって言うパターンは有りなんでしょうね。 でも業務用のドローソフトを細工して使っているのでこのためだけに筆まめ購入の稟議書だすのもちょっと気まずいです(汗
- comv
- ベストアンサー率52% (322/612)
こんばんは >文字数は5文字にしたいのです。 とのことなので苗字3文字+名前3文字のデータは ないとして A1に元データ B1に式 =LEFT(SUBSTITUTE(A1," ",IF(LEN(A1)>5,"",IF(SUM(COUNTIF(A1,{"? ?","? ??"}))," "," ")))&" ",5) で試してみて下さい
お礼
SUBSTITUTEという関数は初めて見ました、エクセルは奥が深いですね。 回答ありがとうございました。
- PAPA0427
- ベストアンサー率22% (559/2488)
なるほど。そう言うことですか。 VBAでのプログラムが必要ですね。 条件が明示されれば、あるいは明快な回答も…。 全角5文字でよいのですか?人名だったら足らないような気がしますが。
お礼
2・3文字の方:空白でバランスをとって5文字にする 4文字以上の方:苗字+空白1+名前 としています、全角です。 う~んやっぱりVBAでしょうか(><)
- akey
- ベストアンサー率38% (8/21)
例えば、A列に「苗字 名前」と入力されていたとして、一旦、 B列に「苗字」 C列に「名前」 というふうに分解するのはいかがでしょうか? そうすれば、B列とC列の文字を左揃えにすれば、 バランスよく配置されます。 ただし、分解処理にはマクロ(VBA)が必要です。 もし、それでよろしければ、サンプルマクロをご提示 できますが?
お礼
回答ありがとうございます。 分解するという発想がすばらしいですね。 方法は上のimogasiさんのを用いてみました。
- PAPA0427
- ベストアンサー率22% (559/2488)
また、新しい課題ですね。 書式設定で、均等割付をされたらいかがでしょう。 書式変更したいセルにあわせて→右クリック→セルの書式設定→配置→横位置のプルダウンで「均等割り付け」 でいかがでしょう?
お礼
回答ありがとうございます。 しかし残念ながら文字数は5文字にしたいのです。 このデータは作成後csv形式に変換し様々なソフトで応用して使います、よってエクセルの機能に依存しない変換が必要なのです。(関数の場合は形式を選択して貼り付けで値のみを抽出しています) わがまま言ってすみません。
お礼
お答えありがとうございます! せっかくですがこの式だと名前の始まりがずれてしまいますね。 しかしながらREPT(" ",6-LEN(A1))の発想はすごいですね。これをヒントにこんなのを作ってみました。 =IF(AND(LEN(A1)=1,LEN(B1)=1),A1&REPT(" ",2)&B1&" ",IF(AND(LEN(A1)=1,LEN(B1)=2),A1&REPT(" ",2)&B1,IF(AND(LEN(A1)=2,LEN(B1=1),A1&" "&B1&" ",A1&" "&B1))) かなり長いのですがこれでなんとかなりそうです! ありがとうございました!