• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(VBA)文字列の最後のスペース及びーを削除)

(VBA)文字列の最後のスペース及びーを削除

このQ&Aのポイント
  • VBAを使用して、文字列の最後のスペースおよびーを削除する方法について質問があります。具体的には、セルEに複数の文字列があり、それぞれの文字列の最後に不要なスペースや-がある場合に、削除する方法を知りたいとのことです。削除後の文字列はセルFに出力する予定です。
  • 質問の内容はVBAを使用して、セルEにある文字列の末尾にある不要なスペースや-を削除したいというものです。具体的な文字列の例も挙げられています。削除後はセルFに修正後の文字列を出力する予定です。
  • VBAを使って、セルEの文字列の末尾にあるスペースや-を削除する方法について質問があります。具体的な文字列の例も示されています。削除後の文字列はセルFに書き込む予定です。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.5

考え方はその通りです。 >A)「-」は、U+002D = ハイフン マイナス > B)「-」は、U+FF0D = 全角ハイフン マイナス 両方ともそのコードです。 > ---- 「、」が半角になったら嫌な場合は ------ > の意味が良くわからないのですが ? StrConv(Cells(i, "E").Value, vbNarrow) で全て半角にしていますので 「、」0x3001 が 「、」0xFF64 になってしまいます。 また、 ta-kano□-□ のように途中に「-」がある場合は、どろくさくて申し訳ありませんが以下のようにしてください。 毎回セルを操作すると時間がかかりそうだったので一気に配列変数にいれて操作してます。 Sub Test4() Dim tmp As Variant Dim i As Long, j As Long tmp = Range(Cells(1, "E"), Cells(Rows.Count, "E").End(xlUp)).Value For i = 1 To UBound(tmp) For j = Len(tmp(i, 1)) To 1 Step -1 If Mid(tmp(i, 1), j, 1) <> "-" And _ Mid(tmp(i, 1), j, 1) <> "-" And _ Mid(tmp(i, 1), j, 1) <> " " And _ Mid(tmp(i, 1), j, 1) <> " " Then tmp(i, 1) = Left(tmp(i, 1), j) Exit For End If Next Next Cells(1, "F").Resize(UBound(tmp), 1).Value = tmp End Sub

NuboChan
質問者

補足

追加の回答感謝します。 No.5の回答をより まったく気が付かなかったのですが  Test3はTest1(又はTset2)の後に続けて利用する事を想定されているのですね。? 下記は、Test2+Test3の結果です。 https://imgur.com/0m2Ja2E 同じくTest4は、Test1(又はTset2)の後に続けて利用する事を想定されているのですね。? (Test4はTest3の修正版) 上記の理解が正しいとして 実際の処理文字列でチェックしてみますので  少し時間をください。 (間違っている場合は、ダメだしをお願いします。) --------------------------------------------- >で全て半角にしていますので 「、」0x3001 / U+3001 = 表意文字コンマ が 「、」0xFF64 / U+FF64 = 半角表意コンマ になってしまいます。 正直この違いが良く分かっていません。

すると、全ての回答が全文表示されます。

その他の回答 (15)

  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.6

Test3(10まで追加)とTest4の結果です。 E列に元の文字列 H列に欲しい結果を入力して マクロ実行結果はF列です。 I1に =F1=H1 として下にコピーしています。

すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

タイプミスがあり、差し替えます。 Function orgDel(MyText As String) As String    Do   If ( _    (Right(MyText, 1) = " ") Or _    (Right(MyText, 1) = " ") Or _    (Right(MyText, 1) = "-") Or _    (Right(MyText, 1) = "-")) Then    MyText = Left(MyText, Len(MyText) - 1)   Else    Exit Do   End If  Loop    orgDel = MyText End Function

NuboChan
質問者

お礼

回答ありがとうございます。 教えてもらった関数に少し条件を追加して 実際のDATAでテストしたいと思います。 結果報告に少し時間をください。 Function orgDel(MyText As String) As String Do If ( _ (Right(MyText, 1) = " ") Or _ (Right(MyText, 1) = " ") Or _ (Right(MyText, 1) = "-") Or _ (Right(MyText, 1) = "-") Or _ (Right(MyText, 1) = "ー")) Then MyText = Left(MyText, Len(MyText) - 1) Else Exit Do End If Loop orgDel = MyText End Function

NuboChan
質問者

補足

提示いただいた下記コードは、関数形式ですが  処理結果を表示する列も行数も可変なので   できればSub()形式のコードで教えていただけないでしょうか ? (処理すべきDATAがE列でF列に結果を書き出すとして)    Function orgDel(MyText As String) As String Do If ( _ (Right(MyText, 1) = " ") Or _ ’U+0020 (Right(MyText, 1) = " ") Or _ 'U+3000 (Right(MyText, 1) = "-") Or _ 'U+002D (Right(MyText, 1) = "-") Or _ 'U+FF0D (Right(MyText, 1) = "ー")) Then 'U+30FC MyText = Left(MyText, Len(MyText) - 1) Else Exit Do End If Loop orgDel = MyText End Function

すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

不必要削除前後のサンプルの行数が 前者は7行、後者は8行あるので紛らわしいですが、 単に、文字列の末尾に、 半角スペース、全角スペース、半角ハイフン、全角ハイフンがなくなるまで 末尾の文字の削除作業を繰り返せばいいんだろうと思います。 ならば、以下の関数を標準モジュールに配置し シート上でこの関数を使うという解でいかがでしょうか? Function orgDel(MyText As String) As String    Do   If ( _    (Right(MyText, 1) = " ") Or _    (Right(MyText, 1) = " ") Or _    (Right(MyText, 1) = "-") Or _    (Right(MyText, 1) = "- ")) Then    MyText = Left(MyText, Len(MyText) - 1)   Else    Exit Do   End If  Loop    orgDel = MyText End Function

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.2

「、」が半角になったら嫌な場合は Sub Teset3() Dim tmp As String Dim i As Long For i = 1 To 7 tmp = Replace(Cells(i, "E").Value, "-", "") tmp = RTrim(Replace(tmp, "-", "")) Cells(i, "F").Value = tmp Next End Sub tmp = Replace(Cells(i, "E").Value, "-", "") tmp = RTrim(Replace(tmp, "-", "")) は 一行にしても tmp = RTrim(Replace(Replace(Cells(i, "E").Value, "-", ""), "-", ""))

NuboChan
質問者

お礼

3種類のsubの提示、ありがとうございます。 >「-」の全角は「-」と考えてます。 A)「-」は、U+002D = ハイフン マイナス B)「-」は、U+FF0D = 全角ハイフン マイナス   両者は非常に紛らわしいので以下の説明ではA)、B)と表現しました。 Teset1,Teset2の違いは分かったのですが Teset3の  ---- 「、」が半角になったら嫌な場合は ------ の意味が良くわからないのですが ? ------------------------------- 1) tmp = Replace(Cells(i, "E").Value, "-", "") は、  文字列のB)を、削除("")して文字列を変数のtempに代入 2)tmp = RTrim(Replace(tmp, "-", "")) は、  tempの文字列中のA)を削除("")して文字列にして、  文字列から末尾のスペースを削除して同じ変数のtempに代入  と考えたのですが   説明の「、」との関連が良く分かりません。 ----------------------------------------------------- Sub Teset() '最後のドットがいらなければ Dim tmp As String Dim i As Long For i = 1 To 7 tmp = RTrim(Replace(StrConv(Cells(i, "E").Value, vbNarrow), "-", "")) If StrConv(Right(tmp, 1), vbNarrow) = "." Then tmp = Left(tmp, Len(tmp) - 1) End If Cells(i, "F").Value = tmp Next End Sub ---------------------------------------- Sub Teset2() '最後のドットを残す場合 Dim tmp As String Dim i As Long For i = 1 To 7 tmp = RTrim(Replace(StrConv(Cells(i, "E").Value, vbNarrow), "-", "")) Cells(i, "F").Value = tmp Next End Sub ---------------------------------------- Sub Teset3() '最後のドットを残す場合 '「、」が半角になったら嫌な場合は Dim tmp As String Dim i As Long For i = 1 To 7 tmp = Replace(Cells(i, "E").Value, "-", "") tmp = RTrim(Replace(tmp, "-", "")) 'tmp = RTrim(Replace(Replace(Cells(i, "E").Value, "-", ""), "-", "")) Cells(i, "F").Value = tmp Next End Sub

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.1

全角英数がすべて半角英数になってよろしければ 最後のドットがいらなければ ↓ Sub Teset() Dim tmp As String Dim i As Long For i = 1 To 7 tmp = RTrim(Replace(StrConv(Cells(i, "E").Value, vbNarrow), "-", "")) If StrConv(Right(tmp, 1), vbNarrow) = "." Then tmp = Left(tmp, Len(tmp) - 1) End If Cells(i, "F").Value = tmp Next End Sub 最後のドットを残す場合は ↓ Sub Teset2() Dim tmp As String Dim i As Long For i = 1 To 7 tmp = RTrim(Replace(StrConv(Cells(i, "E").Value, vbNarrow), "-", "")) Cells(i, "F").Value = tmp Next End Sub で試してみてください。 「-」の全角は「-」と考えてます。

すると、全ての回答が全文表示されます。

関連するQ&A