dポイントプレゼントキャンペーン実施中!

Excelで A1セル~A100セルまでに文字列が  ****(**) (****)というように入っています。 なお*は任意の文字を表す
(条件) ( )で囲まれた文字列群は2つある。
(したいこと)A1セル~A100セルまでを対象に2番目の( )で囲まれた文字列群を消去するマクロを作成したい。
     どう記述すればいいか。 
     
処理前
A1: ****(**) (****)
A2:*****(**) (****)
A3:****(**) (*****)
以下略

処理後
A1: ****(**) 
A2:*****(**) 
A3:****(**) 
以下略

A 回答 (7件)

#1です。


先ほどの回答は、提示された例の通り、最初の()が全角、後ろの()が半角として記述しましたが、ひょっとして全角半角が混在する場合もあるのかと考えなおし、修正します。
以下のコードは全角半角を問いません。

Sub test01()
Dim i As Integer, x As Integer, m As String
For i = 1 To 100
m = StrConv(Cells(i, 1).Value, vbNarrow)
x = InStr(m, ")")
If x > 0 Then
Cells(i, 1).Value = Left(Cells(i, 1).Value, x)
End If
Next
End Sub

この回答への補足

私の設定ミスでどちらも半角でいいです。

なお、自分の目的のためにはNO3の方の後ろの式で十分まにあいました。
なおマクロはマクロ自身の勉強のためです。

補足日時:2007/02/07 17:38
    • good
    • 0
この回答へのお礼

ごていねいにありがとうございます。

お礼日時:2007/02/27 09:35

#03です


=LEFT(A9,FIND("@",SUBSTITUTE(A9,"(","@",2))-1)
SUBSTITUTE(A9,"(","@",2)
で二番目の「(」を一旦「@」に置き換えて、FIND関数で「@」が何文字目にあるかを求めています。左から(その文字数-1)文字分をLEFT関数で切り出したのが上記式です。

>右括弧の数と左括弧の数があいません。
合っていると思いますよ。SUBSTITUTE関数で置き換える文字"("の括弧も数えていませんか? この"("は数には入れません。
    • good
    • 0
この回答へのお礼

うまくいきました。ご回答どうもありがとうございました。

お礼日時:2007/02/27 09:37

左から2つ目の "(" を含め それより右側を消去する という条件で宜しければ、


こんな感じで如何でしょうか。  (Excel97も 対応)


Sub test()
Dim Pt As Integer
Dim Rng As Range
For Each Rng In Range("A1:A100")
  Pt = InStr(InStr(Rng.Value, "(") + 1, Rng.Value, "(")
  If Pt > 0 Then Rng.Value = Left(Rng.Value, Pt - 1)
Next
End Sub

この回答への補足

左から2つ目の "(" を含め それより右側を消去する という条件でいいです。

補足日時:2007/02/07 17:51
    • good
    • 0
この回答へのお礼

うまくいきました。ご回答どうもありがとうございました。

お礼日時:2007/02/27 09:36

一例ですが...


SUB MACRO1()
 For Each RG In Range("A1:A100")
  If LEN(RG) = 0 Then Goto RGEND
  RX = Strreverse(RG) '文字反転
  RY = Instr(1,RX,"(") '開始の"("を検索
  RZ = Mid(RX,RY+1,LEN(RX)-RY) '"("以前を除去
  RANGE(RG.Address) = Strrevaerce(RZ) '再度反転してセット
RGEND:
 Next RG
End Sub
    • good
    • 1
この回答へのお礼

うまくいきました。ご回答どうもありがとうございました。

お礼日時:2007/02/27 09:36

補足質問です


aaaaa(bb)(cccc)dd のように二つめの括弧の後ろに文字列がくることはありますか?
またaaaaa(bb) のように二つめの括弧がない場合がありますか。
またマクロがよいのですか

aaaaa(bb)(cccc) を aaaaa(bb)にするだけなら
 =LEFT(A9,FIND("@",SUBSTITUTE(A9,"(","@",2))-1)
二つめの括弧がない場合を考慮すると
 =IF(ISERROR(FIND("@",SUBSTITUTE(A9,"(","@",2))),A9,LEFT(A9,FIND("@",SUBSTITUTE(A9,"(","@",2))-1))
のような関数でもできると思いますが…
もしマクロを書くとしても上記式のロジックそのままになると思います

この回答への補足

 =LEFT(A9,FIND("@",SUBSTITUTE(A9,"(","@",2))-1)
右括弧の数と左括弧の数があいません。
@はどういう意味でしょうか。
以上宜しくお願いします。

補足日時:2007/02/07 17:31
    • good
    • 0
この回答へのお礼

二つめの括弧の後ろに文字列がくることはありますか?
→ありません。
二つめの括弧がない場合がありますか。
→ありませんが、その場合は何もしないでいてほしいです。
ご回答ありがとう、検証しています。まずはお礼まで。

お礼日時:2007/02/07 17:36

関数でも可能。


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

これもうまくいきました。
そうか、最初に見つかった左)までのデータをとりだせばいいのですからこうなるのですね。
シンプルでありがとうございます。

お礼日時:2007/02/07 17:47

一例



Sub test01()
Dim i As Integer, x As Integer
For i = 1 To 100
x = InStr(Cells(i, 1).Value, "(")
If x > 0 Then
Cells(i, 1).Value = Left(Cells(i, 1).Value, x - 1)
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

うまくいきました。ご回答どうもありがとうございました。

お礼日時:2007/02/27 09:34

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