• ベストアンサー

VBAで( )のものだけ(   )に変更したい

お世話になります。 現在エクセルの複数のセルに( )空白のスペースが入った()があります。 ※()の中は半角・全角のスペースが中身が半角・全角のスペースの数がさまざまな形で入っています。 ()の中に入っているのは半角・全角のスペースがはいている()のみ( )※全角スペース3個 のものに変換したいのです。 しかしながら、他のセルに(2222)などの()の間に数字や文字が入っているものがあり、それに対しては、そのままにしたいのです。 エクセルのVBAで実現したいのですが、どのようにすればよいでしょうか? 何卒よろしくお願いします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

#2です。 No.3さんの回答を参考にさせて頂き修正してみました。 セルA1の値をセルA2に書き出す物です。 Sub try2() Dim RegExp As Object Dim st As String Dim match, matches Set RegExp = CreateObject("VBScript.Regexp") RegExp.Pattern = "\([  ]*\)" RegExp.Global = True st = Range("A1").Value Set matches = RegExp.Execute(st) For Each match In matches st = Replace(st, match.Value, "(   )") Next Range("A2").Value = st Set RegExp = Nothing Set matches = Nothing End Sub 一例まで。

その他の回答 (3)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.3

こんにちは。 'セルの内容が以下のように変換されます '試してみてください。 '()()aaa(222) →(   )(   )aaa(222) Sub 変換() Dim c Dim ExitFlg    As Boolean Dim wk       As String Dim wk2      As String Dim wStr      As String Dim EditStr    As String Dim st       As Integer Dim st2      As Integer ' With ActiveSheet   For Each c In Range("A1:B5")  '←変換するセルの範囲     EditStr = ""     wStr = c     ExirFlg = False     Do While ExirFlg = False       st = InStr(1, wStr, "(")       If st > 0 Then         EditStr = EditStr & Left(wStr, st - 1)         st2 = InStr(st + 1, wStr, ")")         wk = Mid(wStr, st, st2 - st + 1)         wk2 = wk         wk2 = Replace(Replace(wk, " ", ""), " ", "")         If wk2 = "()" Then           wk = "(   )"         End If         EditStr = EditStr & wk         wStr = Mid(wStr, st2 + 1)       Else         EditStr = EditStr & wStr         ExirFlg = True       End If     Loop     c.Value = EditStr   Next End With

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

Sub try() Dim RegExp As Object Dim i As Integer Dim st As String Dim v(2) Set RegExp = CreateObject("VBScript.Regexp") RegExp.Pattern = "\(([  ]+)\)" RegExp.Global = True v(0) = "(123)" v(1) = "( )" v(2) = "(    )" For i = 0 To 2 st = v(i) If RegExp.Test(st) Then st = Replace(st, RegExp.Replace(st, "$1"), "   ") End If MsgBox st Next Set RegExp = Nothing End Sub 一例まで。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

1.対象セルの文字列を変数に取り出す 2.取り出した文字列の、全角スペースと半角スペースを置換で削除 3.削除した結果が"()"なら、該当セルなので、セルの値を"(   )"にする と、言った処理になるかと思います。 以下の例ではA1セルだけを対象に上記の処理を行って居ます。 Sub Sample()  Dim sTarget As String  Dim sWork As String  sTarget = Range("A1")  sWork = Replace(Replace(sTarget, " ", ""), " ", "")  If sWork = "()" Then   Range("A1") = "(   )"  End If End Sub

関連するQ&A

  • エクセルシートを半角・スペースなしに

    エクセルのシートに文字列・数字が入力されています。しかし文字や数字の間に空白があったり、全角・半角がバラバラに入力さています。 これを全て、半角でスペースをなくすにはVBAにどのように書けばよいのでしょうか?

  • ExcelのVBAで・・・

    VBA初心者です。。 Excelのある列のセルの値が全角文字の場合に、 隣の列に全角カタカナに変換した値を転送するVBAがあります。 変換元の列の中に空白セルがあった時は変換先のセルに 文字があっても空白に置き換えたいのですが、方法がわかりません・・・。 使用しているVBAの内容は下の通りですが、どういう風に 修正すれば実現できるかアドバイスを頂けないでしょうか? よろしくお願い致します!   Dim C As Range   For Each C In Range("E3", Range("E65536").End(xlUp))     If C.Value <> "" Then _     C.Offset(, 1).Value = Application.GetPhonetic(C.Value)   Next

  • VBAのLEN関数

    VBAのLEN関数で1つのセルではなく横一列の範囲を指定して、それらのセルに入っている文字数の合計を取得する方法はありますか? また文字数を取得する際、全角と半角が混じっている可能性があるのですが、 半角で文字数を取得することはできるでしょうか? 何がしたいかといいますと、横一列に並んでいる複数セルの値を 別のセルに入力規則として入力させます。 その際、エクセルの仕様的に合計の文字数が半角255文字を超えないかチェックしたいのです。

  • Excelでセルに入っている数字又は文字のうしろに決められた数のスペースを入れるようにするには?

    エクセルでセルに入っている数字又は文字のうしろに決められた数のスペースを入れるようにすることって出来ますか? 例えば、 A1セルに 123456 という数字が入っていた場合 123456 の後ろに半角スペースを6コつけて 「123456_ _ _ _ _ _ 」 いう風に。 B1セルに 山田太郎 という文字が入っていた場合 山田太郎のあとに全角スペースを5コ入れて 「山田太郎_ _ _ _ _ 」 セルの数字を入力すると半角又は全角スペースを決められている数だけ自動で入力されるようにしたいのですが 何かいい方法はないでしょうか? accessでマクロ使ったほうが簡単かもしれないんですが、accessあまり分からないので・・。 説明がわかりにくくて申し訳ないんですがよろしくお願いします!!

  • VBAで半角にする際、特定の記号は変換したくない

    エクセルのセル内のテキストを、カナ・英字・数字を半角化するVBAを作りたいです。 過去記事 http://okwave.jp/qa/q1153932.html を参考にして一旦全てのテキストを半角化⇒特定の記号を全角化してみましたが、 これだと「… ‥ ‘ ’ “ ”」のような全角記号は、一旦半角化されてしまうと元の全角に戻せません。 何か良い方法は無いでしょうか? アドバイスお願いします。

  • エクセルで数字の変換

    エクセル2000です。 ひとつのセルの中に、たとえば「2009年は第1、第5営業部の24名」という文字列があったとします。これを半角一桁の数字のみに限定して全角の数字に変換する方法はないでしょうか? JIS関数だとすべてが全角になってしまいます。 関数でもVBAでもかまいません。 「2009年は第1、第5営業部の24名」と変換したいのです。 対象が何百もあるので困っています。 よろしくお願いします。

  • エクセルで選択範囲内の半角空白を取り除きたい。

    エクセルで選択範囲内の半角空白を取り除きたい。 エクセルの各セルに歌のタイトルが入っています。 ところがところどころに半角スペースが入ってしまっているためこれを取り除きたいのですが すべてを取り除くのであれば選択範囲内であっても「検索置換」を使えばできますが 条件として日本語に混在するスペースのみをとり除き、 英文の単語間にあるものはそのままにしたいのです。 基本的に、全角にはさまれた半角空白のみを対象として、 半角にはさまれた空白はいじらないことになります。 (いじらない場合として半角数字も該当してしまいますが、ほとんど該当がないものと考えています) 関数、マクロ等でなにかいい知恵がありましたら教えてください。

  • VBAで正規表現

    Excel2000-VBAにてマクロ作成中です。 以下のような処理を正規表現を使用して一発で実行させたいのですが、 正規表現に指定するパターンがわかりません・・・。 どなたがご存知でしたら教えて下さい。 やりたいこと:ある文字列中の中のスペース(半角全角両方)を半角スペースに変換し、 さらに連続している半角スペースを1つに置換したい。 スペースを半角に統一することは、Replace関数で可能かと思っています。

  • 全角英数字を半角に excel vba

    インターネットで全角を半角に変換するvbaを調べたら、strconvみたいな関数の説明がいろいろあったので、私のケースにあてはめて考えましたがどうもしっくりきません。例えばセルの A1,A2,A3..............A200位まで(最後の位置A200は毎回変わります)全角の英字 (TOKYO, OSAKA,NAGOYA) など都市の名前がいろいろ入っているですがそれをすべて半角に変換するvba関数はどういった表記でできるかご教授願います。毎月の仕事で必要なEXCEL作業の一部でエクセルのASC関数などは使用せずにvbaのをくみこみたくここで質問を入れてみました。vba全くの初心者なので簡単な表記であれば助かります。

  • セルごとの入力変更できますか?

    エクセルで請求書等を作成しています。 作業をしていて思うのですが、セルの中に半角数字を入力後次のセルには漢字で入力、また次のセルには金額のため半角数字で入力などとそのたびに半角/全角のキーを押しています。 この作業を半角/全角のキーを一回一回押さずに入力できる方法はないでしょうか? 現在、請求書の入力方法は、セルの保護がされた状態です。 よろしくお願いします。

専門家に質問してみよう