• ベストアンサー

エクセルである文字より前を削除したい

お世話になります。 エクセル2000で、セルに以下のように入力されている場合に カッコの直前の数字を除去およびカッコを除去したい場合 関数でどのようにしたらよいでしょうか? 5000+1800(2000)+600(1000)→5000+2000+1000 mid/left/right/find/searchでやってみましたが 考えが及びませんでした。 ご教授ください。

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

  • ベストアンサー
  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.2

関数では難しいと思います(私には分かりません)。 ユーザー定義関数を作ってみました。 標準モジュールに下記コードを入力してください。 ---------- Public Function edit_string(セル As Range) As String Dim str As String Dim str2 As String Dim s() As String Dim t As Variant Dim pos As Long str = セル.Value str2 = "" s = Split(str, "+") For Each t In s() pos = InStr(t, "(") If pos <> 0 Then t = Mid(t, pos + 1) pos = InStr(t, ")") t = Left(t, pos - 1) End If str2 = str2 & "+" & t Next str2 = Mid(str2, 2) edit_string = str2 End Function ------ これでedit_string()という関数が使えます。 【使い方】 edit_string(文字列の入っているセル番地) というふうに使います。 A1セルに 5000+1800(2000)+600(1000) と入っているとして、例えばA2セルに、 =edit_string(A1) と入力すると、A2セルに 5000+2000+1000 と表示されます。 なお、演算子は「+」だけにしか対応していませんので、「-」とか「*」とか「/」が入っているとうまく動作しません。 また、カッコは半角文字の()のみ除去されます(全角文字のカッコは未対応(除去されない))

southmoon
質問者

お礼

ご回答ありがとうございます。 お礼が遅くなって申し訳ありません。 VBAでユーザー定義関数ですか! 自分はVBAはあまり詳しくないので、ご丁寧に記載いただき助かります。 演算子は「+」のみで大丈夫です。 これで試してみたいと思います。

その他の回答 (1)

回答No.1

()が2組という条件付きで =LEFT(A1,FIND("(",ASC(A1))-1-LEN(LOOKUP(10^15,ABS(RIGHT(A2,{1,2,3,4,5,6,7,8,9,10})*1)))) &MID(A1,FIND("(",ASC(A1))+1,FIND(")",ASC(A1))-FIND("(",ASC(A1))-1) &MID(A1,FIND(")",ASC(A1))+1,FIND("(",ASC(A1),FIND("(",ASC(A1))+1)-FIND(")",ASC(A1))-1) &RIGHT(A1,LEN(A1)-FIND(")",ASC(A1),FIND(")",ASC(A1))+1)) 良い案が浮かばない(T.T)

southmoon
質問者

お礼

ご回答ありがとうございます。 お礼が遅くなって申し訳ありません。 ()が2組とは限りません・・・。 関数でやろうとするのは難しいのですね。 その中で考えていただき、ありがとうございます。

関連するQ&A

専門家に質問してみよう