- ベストアンサー
EXCEL(VBA) 末尾の改行のみ削除したい
[ALT]-[ENTER]を使い、セル内を改行した文章があります。 その文章の末尾にある改行のみ削除したいのですが ReplaceやRtrimを使うと、末尾以外の改行も削除されたりして、 思うような結果が得られません。 イメージとしては以下のようにしたいと思っております。 ↓このように表示されているものを ----------------------- 本日は晴天なり。 1.AAAAA 2.BBBBB ----------------------- ↓このようにしたい (2.BBBBB 以降にある改行のみ削除したいです。) ----------------------- 本日は晴天なり。 1.AAAAA 2.BBBBB ----------------------- 判りづらい説明で申し訳ありません。 何か良い方法はないでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
正規表現で置換すればできると思います。 A1の文字列の末尾にある改行を削除してA2に表示します。 参照設定でVBScript Regular Expressions ?.?にチェックを入れる Sub test() Dim re As New RegExp re.Pattern = "\n+$" '末尾の1個以上の改行 Range("A2") = re.Replace(Range("A1"), "") Set re = Nothing End Sub または、 Sub test() Dim re As Object Set re = CreateObject("VBScript.RegExp") re.Pattern = "\n+$" '末尾の1個以上の改行 Range("A2") = re.Replace(Range("A1"), "") Set re = Nothing End Sub
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 このようにして、最後の後ろの改行コードを探してあげればよいと思います。 Sub Test1() Dim c As Variant Dim i As Integer For Each c In Range("A1", Range("A65536").End(xlUp)) If VarType(c.Value) = vbString Then i = InStrRev(c.Value, Chr(10)) If i >= Len(c.Value) Then c.Value = Mid$(c.Value, 1, i - 1) End If End If Next c End Sub ただし、空白値が入っていると、削除しませんので、条件式の部分を、 If i >= Len(c.Value) Or Trim(Mid$(c.Value, i + 1)) = "" としてあげなくてはなりません。 また、#3さんのご指摘も考えられますね。フォントサイズが、13以上の場合だと思いますが、その標準スペースの間隔がずれてしまうので、バランスを取るために、そのようなスタイルにしていることがあります。
お礼
回答有難うございます。 色々な本を読んだり、ネットで検索して色々とやってみたのですが 思うように動かず、悪戦苦闘しておりました。 助かりました。有難うございます。
- htmcr
- ベストアンサー率36% (11/30)
回答ではありませんが。 それは削除してしまって大丈夫な改行でしょうか? Excelでは、印刷時に文字が切れてしまう現象を回避するために、 セルの文章の末尾にわざと余分な改行を加えてることが多いので。 上記のことをご存知であれば問題ないですが、 もしそうでなければファイルの作成者などに確認してみてください。
お礼
回答ありがとうございました。 今回は削除しても大丈夫な改行でした。 末尾に改行が無いと、印刷時に文字が切れてしまうんですね。 知りませんでした。 勉強になりました。有難うございます。
- n-jun
- ベストアンサー率33% (959/2873)
一番最後が改行なら、文字数を-1にするとかでは、ダメですか? :試してないので、違っていたらすいません。
お礼
回答有難うございました。 文字数-1で試してみました。 今回は、違う方法で行うことにしましたが、今後の参考にさせて頂きます。 有難うございました。
お礼
早々の回答ありがとうございました。 大変に助かりました。 「正規表現」の意味がよくわかっていないので、 もっともっと、しっかりと勉強したいと思います。 本当に有難うございました。