EXCEL(VBA) 末尾の改行のみ削除したい
[ALT]-[ENTER]を使い、セル内を改行した文章があります。
その文章の末尾にある改行のみ削除したいのですが
ReplaceやRtrimを使うと、末尾以外の改行も削除されたりして、
思うような結果が得られません。
イメージとしては以下のようにしたいと思っております。
↓このように表示されているものを
-----------------------
本日は晴天なり。
1.AAAAA
2.BBBBB
-----------------------
↓このようにしたい
(2.BBBBB 以降にある改行のみ削除したいです。)
-----------------------
本日は晴天なり。
1.AAAAA
2.BBBBB
-----------------------
判りづらい説明で申し訳ありません。
何か良い方法はないでしょうか?
投稿日時 - 2008-03-13 02:01:22
正規表現で置換すればできると思います。
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
投稿日時 - 2008-03-13 03:19:29
早々の回答ありがとうございました。
大変に助かりました。
「正規表現」の意味がよくわかっていないので、
もっともっと、しっかりと勉強したいと思います。
本当に有難うございました。
投稿日時 - 2008-03-14 01:33:41
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(4)
こんにちは。
このようにして、最後の後ろの改行コードを探してあげればよいと思います。
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以上の場合だと思いますが、その標準スペースの間隔がずれてしまうので、バランスを取るために、そのようなスタイルにしていることがあります。
投稿日時 - 2008-03-13 12:17:38
回答有難うございます。
色々な本を読んだり、ネットで検索して色々とやってみたのですが
思うように動かず、悪戦苦闘しておりました。
助かりました。有難うございます。
投稿日時 - 2008-03-14 01:48:43
回答ではありませんが。
それは削除してしまって大丈夫な改行でしょうか?
Excelでは、印刷時に文字が切れてしまう現象を回避するために、
セルの文章の末尾にわざと余分な改行を加えてることが多いので。
上記のことをご存知であれば問題ないですが、
もしそうでなければファイルの作成者などに確認してみてください。
投稿日時 - 2008-03-13 09:26:03
回答ありがとうございました。
今回は削除しても大丈夫な改行でした。
末尾に改行が無いと、印刷時に文字が切れてしまうんですね。
知りませんでした。
勉強になりました。有難うございます。
投稿日時 - 2008-03-14 01:43:37