プロが教えるわが家の防犯対策術!

セルの中身がで下の4行のような状態のとき、
最初と最後の改行を削除したいです。
――――――――――――

あいうえお↓
かきくけこ↓

――――――――――――
(改行は「↓」で表しています)

Trim関数では消せないし、
Clean関数では全ての改行を消してしまいます。

こちらの記事では、ユーザー定義関数が紹介されていますが・・・・

文字列の前後・セルの先頭と末尾の改行を削除する:エクセルマクロ・Excel VBAの使い方/ユーザー定義関数
https://www.relief.jp/docs/013815.html

これを参考にすると、
複数のセル範囲に適用したい場合は、
繰り返し処理で、1セル単位で適用することになると思いますが・・・

一括でサクッと処理する方法ってありませんよね?

※テキスト形式で出力して処理する以外で。

質問者からの補足コメント

  • 最初と最後の改行数は統一されておりません。

    後出し補足ですみません。

      補足日時:2020/09/21 20:18
  • 正規表現置換アドインの導入は考えていません。

      補足日時:2020/09/21 20:42
  • 沢山の回答ありがとうございました。
    アイデアや発見が得られました。

      補足日時:2020/09/26 18:27

A 回答 (13件中1~10件)

No.5の回答者です。


勘違いしていました。
こちら↓のようなことを、選択範囲で処理したいのですね。
https://www.relief.jp/docs/013815.html
一部修正版

Sub DeleteStartEndLetter()
Dim r As Range
For Each r In Application.Selection
If Len(r.Value) > 0 Then
  r = TrimLF(r)
End If
Next
End Sub

Function TrimLF(r As Range) As String
Dim strTmp As String
strTmp = r
 Do Until Left(strTmp, 1) <> vbLf
  strTmp = Mid(strTmp, 2)
 Loop
 Do Until Right(strTmp, 1) <> vbLf
  strTmp = Left(strTmp, Len(strTmp) - 1)
 Loop
 TrimLF = strTmp
End Function

これなら、TrimLFの戻り値で処理できると思う。
    • good
    • 1
この回答へのお礼

参考マクロありがとうございます。
やはり1セル毎に改行削除処理させる方法に落ち着く感じですよね。

お礼日時:2020/09/22 18:07

説明不足ですみません。


全文字列をreplace関数に放り込めば、連続改行を全部まとめて一つの改行にできたと思ったのですが、記憶違いでしたらすみません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
VBA関数のreplaceですよね。
改行2個→1個の置き換えでは、
改行3個、4個→2個、
改行5個、6個→3個、
という具合で、一度に減らすことはできませんでした。

お礼日時:2020/09/26 18:20

>セル内容で使用されていない連続スペースを置換キーにすれば…



情報としてお出しではなかったですが、セルの内容にスペースが含まれる場合があるということでしょうか?
TRIMを使えばスペースは1つ分になっちゃうので改行を置換したスペースなのか元からあるスペースなのか分からなくなりそうですね。
マクロで処理できそうですので、そちらにお任せします。
    • good
    • 0
この回答へのお礼

ありがとうございます。
試してみました。
Worksheet関数のTRIMだと先頭と末尾のスペース削除に加えて連続スペースが1個になるけど、
VBA関数だと先頭と末尾のスペース削除のみ、
のようです。
驚きの発見でした!

お礼日時:2020/09/23 15:24

すみません、間違えました改行コード2つを改行コード1つに更新です。

    • good
    • 0
この回答へのお礼

ありがとうございます。
改行コードを2個→1個に置換。
これを数回繰り返せば複数連続の改行を1個にする。
その後に、MIDで2文字削って出力する。
こんな感じの流れになるでしょうか。
なるほど!
参考にさせていただきます。

お礼日時:2020/09/23 15:17

Replace関数で改行コードをブランクに変更してもダメでしょうか。

    • good
    • 0

最初と最後の改行は、1つという前提で考えていたので前の回答はやめておきます。



ところで、改行をスペースに置換したらTRIM関数で解決するんじゃないですかね?
    • good
    • 0
この回答へのお礼

ありがとうございます。
説明不足ですみませんでした。

1.改行をスペース5個とか多めに置換してTRIM。
2.スペース5個を改行に置換。

とか、セル内容で使用されていない連続スペースを置換キーにすれば…
これでもいけそうかも。

お礼日時:2020/09/21 21:06

No.5の回答者です。


改行があることを前提にしているMID関数での処理なので、最初と
最後に改行がない場合は、1字目と最後の文字が削除されます。

IFを使って、改行なのかどうかの判定をすることで、最初と最後の
改行以外を残すことは可能だと思います。
http://officetanaka.net/excel/vba/function/InStr …
例えば、LEFT関数やRIGHT関数を使って調べるとか。
    • good
    • 0
この回答へのお礼

ありがとうございます。

結局のところ、セルの内容に対して、
・1文字目が改行じゃなくなるまで、1文字ずつ判定して削除し…
・最後の文字が改行じゃなくなるまで、1文字ずつ判定して削除し…
という処理をして、

複数セル範囲については、
その処理を1セルごとに当てて行くという流れにするしかない、
ということになるでしょうか。

正規表現での置換ができれば、セル範囲に対して
先頭の改行削除5回、末尾の改行削除5回とか、
ざっくりした処理で済むんだけど…。

お礼日時:2020/09/21 20:41

>>全ての改行が処理されてしまうのです。



=IF(A1="
",SUBSTITUTE(A1,"
",""),A1)

でしょうか。
    • good
    • 0
この回答へのお礼

ありがとございます。
ものとセルの中身が複数行になっております。
頂いた式だと条件がA1の内容が「改行のみ」かどうか、で処理しているので、
望んでいる結果は得られません。

お礼日時:2020/09/21 20:31

別セルだと、こちら↓。


 =MID(A1,2,LEN(A1)-2)

マクロだと、こちら↓の応用で。
https://oshiete.goo.ne.jp/qa/2557495.html

Sub DeleteStartEndLetter()
Dim r As Range
 For Each r In Application.Selection
  If Len(r.Value) > 0 Then
   r.Value = Mid(r.Value, 2, Len(r.Value) - 2)
  End If
 Next
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
他の方の回答へコメントしたのですが、
最初と最後の改行数は統一されておりません。
後出しですみません。

お礼日時:2020/09/21 20:20

改行を★などに置換したら、最初と最後以外を抜き出すことはできるのでは?


それからまた、改行に置換しては?

後は、別セルに改行がいくつあるか出しておいて、SUBSTITUTEの第4引数で数を指定して(最初のは1つ目なので無条件で指定できるし)置換するとか。
    • good
    • 1
この回答へのお礼

ありがとうございます。
改行を★に置換したとして、セルがこんな感じになって…
「★あいうえお★かきくけこ★★」 改行数4
「★★さしすせそ★たちつ★てと★」 改行数5
として・・・
SUBSTITUTEで前後の★を取る?
すみません、思いつかないので
具体的に教えていただけないでしょうか?

お礼日時:2020/09/21 20:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A