アプリ版:「スタンプのみでお礼する」機能のリリースについて

セルの中身がで下の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件)

たぶん、今回は使えない知識だけど、


[置換]や[検索]の文字列を入力する欄で、[Ctrl+J]キーを押すと[改行]を検索や置換対象に入れることができます。例えば、「↓あ」を「あ」に置換すると、先頭の改行は消せます。たぶん、「あいうえお」の部分が固定では無いと思うので、今回は必要ないと思いますが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
セルの最初や最後の文字が固定されているのであれば、
頂いた回答の方法で可能だと思いますが、
文字が固定されていないので使えないのです。

お礼日時:2020/09/21 19:30

改行の数は一定ではないのですか?

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

ありがとうございます。
改行の数は統一されておりません。

お礼日時:2020/09/21 19:33

=SUBSTITUTE(A1,"


","")
では駄目なんですか?

=SUBSTITUTE(A1,"","") 

では無く

=SUBSTITUTE(A1,"
","")
    • good
    • 0
この回答へのお礼

ありがとうございます。
回答頂いた方法ですと、最初と最後だけにとどまらず、全ての改行が処理されてしまうのです。

お礼日時:2020/09/21 19:33

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


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

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

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

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

別セルだと、こちら↓。


 =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

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



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

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

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

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

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

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



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

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

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

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

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

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

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

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


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