• ベストアンサー

ExcelのSUBSTITUTEで少し分かりません。多分、あと一歩?教えてください。

Excelを使って下記のような操作をしたいのですがすることができません。 SUBSTITUTE(A1,"aa","a")を使えばなんとなくできそうなところまでは分かったのですが、期待するようにできません。 どのようにすればできますか? 教えていただけないでしょうか? 宜しくお願い致します。 A1の値: aaaabcdaa 期待する値: abcda

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 一般関数では思いつきませんでした。 '<標準モジュール> Function RegSubstitute(ByVal Longtext As String, arg As String) 'RegSubstitute(文字列, シュリンプする文字列) '正規表現を使ったユーザー定義関数   Dim buf As String   Dim Match As Object   Dim Matches As Object   With CreateObject("VBScript.RegExp")    .Global = True    .IgnoreCase = False    .Pattern = arg & "+"    Set Matches = .Execute(Longtext)    buf = Longtext    If Not Matches Is Nothing Then      For Each Match In Matches       buf = Replace(buf, Match.Value, arg)      Next    End If   End With   RegSubstitute = buf End Function

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 なるほど・・・なかなか、複雑になりますね。 助かりました。 ありがとうございます。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

質問でのaに当たる文字の繰り返しが3,4文字以上もありえて制限がないなら、VBAなどのプログラムの問題でしょう。 参考に Sub test01() For i = 1 To 10 '1行から10行まで繰り返し a = Cells(i, "A") 'A列i行の文字列について s = Mid(a, 1, 1) '第1文字(最初の先頭文字)を取り出す For j = 2 To Len(Cells(i, "A")) '2文字目以降の各1文字について If Right(s, 1) <> Mid(a, j, 1) Then '累積の最後の文字と今の文字が違えば s = s & Mid(a, j, 1) '今の文字を連結する End If Next j '文字数だけ繰り返し Cells(i, "B") = s '出来上がった文字列をB列に入れる Next i End Sub データ例 aaaabcdaa   abcda 山山上上上田上   山上田上 ssdtddtってf    sdtdtってf dfgbnvvbg   dfgbnvbg

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 なるほど・・・なかなか、複雑になりますね。 助かりました。 ありがとうございます。

回答No.4

テキストファイルに書き出して、正規表現の使えるエディタやツー ルで置換して書き戻すのが簡単。なにしろPerl風だと s/a+/a/ g; でおしまい。 秀丸エディタやJEditで使用可能です。

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 正規表現+秀丸でそんなこともできるんですね。 ありがとうございます! また、Excelで気軽に使えると、データが増えても簡単に他所で切るので、引き続き、ご存知の方、宜しくお願い致します。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

上記のaが4つまでなら =SUBSTITUTE(SUBSTITUTE(A1,"aa","a"),"aa","a") でできますが、そういうことではありませんよね。 厳密に同じ文字が続いたら圧縮するということであれば ユーザー定義関数を作るしかないと思います。

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 aという文字が続く場合は、確実に一文字のaにしたいと思っています。また、セルに入力されている数が多く、aがいったい何文字続いているのかまったく分からない状況です。 もし、お時間がありましたら、ご教示、宜しくお願い致します。

noname#63022
noname#63022
回答No.2

=SUBSTITUTE(SUBSTITUTE(A1,"aaaa","a"),"aa","a") あまり うまくないですが もっと、良回答がありそうです。

  • onntao
  • ベストアンサー率32% (108/332)
回答No.1

=SUBSTITUTE(SUBSTITUTE(A1,"aa","a"),"aa","a") ということ?

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 質問のが悪かったようです。すみません。 A1の値については、aaaabcdaa B1の値については、aaaaaaaabaaad 以降長く続きます。 そして、期待する値は、aとaが隣り合っているところを、すべてa一文字に置き換えたものです。 宜しくお願い致します。

関連するQ&A