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

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

A1の値:
aaaabcdaa

期待する値:
abcda

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/11 02:11

質問での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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/11 02:11

テキストファイルに書き出して、正規表現の使えるエディタやツー


ルで置換して書き戻すのが簡単。なにしろPerl風だと
s/a+/a/ g;
でおしまい。

秀丸エディタやJEditで使用可能です。
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
正規表現+秀丸でそんなこともできるんですね。
ありがとうございます!

また、Excelで気軽に使えると、データが増えても簡単に他所で切るので、引き続き、ご存知の方、宜しくお願い致します。

お礼日時:2005/12/09 22:17

上記のaが4つまでなら


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

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

お礼日時:2005/12/09 18:49

=SUBSTITUTE(SUBSTITUTE(A1,"aaaa","a"),"aa","a")


あまり うまくないですが

もっと、良回答がありそうです。
    • good
    • 0

=SUBSTITUTE(SUBSTITUTE(A1,"aa","a"),"aa","a")


ということ?
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
質問のが悪かったようです。すみません。
A1の値については、aaaabcdaa
B1の値については、aaaaaaaabaaad
以降長く続きます。

そして、期待する値は、aとaが隣り合っているところを、すべてa一文字に置き換えたものです。

宜しくお願い致します。

お礼日時:2005/12/09 18:45

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