• 締切済み

エクセル VBA セル内の文字検索について

ある列にある( )の中の文字を切り取り、隣のセルに貼り付け、そのセルの色を変える方法を教えてください。検索範囲はそのファイル全てです。 よろしくお願いします。

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.4

>ある列にある( )の中の文字を切り取り、隣のセルに貼り付け、そのセルの色を変える方法を教えてください。 ある列:A列 ( ):指定が無いので半角括弧のみ 隣のセル:B列 セルの色:赤色 と、質問者さんが指定すべきとは思いますが無いので勝手に決めました Sub test() Dim i As Long Dim ws As Integer For ws = 1 To Worksheets.Count With Worksheets(ws) For i = 1 To .Range("a65536").End(xlUp).Row If InStr(.Cells(i, 1).Value, "(") > 0 And InStr(.Cells(i, 1).Value, ")") > 0 Then .Cells(i, 2).Value = Mid(.Cells(i, 1).Value, InStr(.Cells(i, 1).Value, "(") + 1, InStr(.Cells(i, 1).Value, ")") - InStr(.Cells(i, 1).Value, "(") - 1) .Cells(i, 2).Interior.ColorIndex = 3 End If Next i End With Next ws End Sub VBAでの質問なので基本は分っていると思うので解説はなし

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

他の皆さんのご回答が分かりやすくて速いと思いますが、昔作ったのがあったので引っ張り出してきました。 ユーザー定義関数として使用する場合、 A1に、abc(def)ghi(jkl)mnという文字列があるとき、 B1に、=searchWord(A1,"[\((](.*?)[\))]")という式を入れると、defを返します。全角の括弧にも対応しているつもりです。VBAでループを回して処理するのはご自分でお願いします。興味を持たれたら、正規表現 VBAで検索してみてください。 Function searchWord(targetString As String, matchString As String) As String Dim regEx As Variant, Matches As Variant, match As Variant Set regEx = CreateObject("VBScript.RegExp") regEx.MultiLine = False regEx.Pattern = matchString regEx.IgnoreCase = True regEx.Global = False Set Matches = regEx.Execute(targetString) If Matches.Count > 0 Then searchWord = Matches(0).subMatches.Item(0) Else searchWord = "" End If Set Matches = Nothing Set regEx = Nothing End Function

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

一般機能で説明すると A列を、B列にコピィ、貼り付け 置換え 検索する文字列 *( 置換え後の文字列 空白のまま OK 同様にもう一度 検索する文字列 )* 置換え後の文字列 空白のまま OK VBAというのであれば、上記の操作を、マクロの記録で得られます。 すべてのシートで実行するのであれば For i=1 to Sheets.Count ・・・ Next で繰り返してみてください。

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

まず必要なコード作成技術要素を切り分けること。 何処が自分には出来ないか認識が肝心。みんなわからないー> VBAでやるのが早すぎる。 (1)-(2)など頻繁にVBAで現れる常識的タイプ。 (1)ブックの全てのシートを対称にするコード(<=ファイル全てです、ーー>あいまいな表現?) Sub test03() For Each sh In Worksheets MsgBox sh.Name Next End Sub これを実行してみて、納得のこと。 (2)ある列の各セルを捉える Sub test04() d = Range("A65536").End(xlUp).Row MsgBox d For i = 2 To d MsgBox Cells(i, "A") Next i End Sub を実行して納得のこと。 (3)()の中の文字を捉える Instr関数で(と)の文字位置を捉える。 Sub test05() d = Range("A65536").End(xlUp).Row For i = 2 To d x = Cells(i, "A") p1 = InStr(x, "(") p2 = InStr(x, ")") If p1 = 0 Or p2 = 0 Then Cells(i, "B") = "( ) NotFound" Else y = Mid(x, p1 + 1, p2 - p1 - 1) Cells(i, "B") = y End If Next i End Sub ーー >そのセルの色を変える方法を 詳細が質問では不明。条件付き書式みたいなことを考えているのか、どうか?。 単純にはマクロの記録を採れば仕舞い。

関連するQ&A

  • エクセルマクロで特定の文字を探して隣のセルの色を変える

    エクセルに入力されている特定の文字を探し出して隣のセルに色をつけたいと考えています。 検索の対象となるセルは全てのシートのB列です。 検索する文字は色々な英数字の組み合わせの中に含まれています。   A  B 1  10 ABC000012 2  20 AAC000013 3  30 ACC000014 上記のような値が入力されている状態で、B列の"ABC"か"AAC"の何れかが入力されているセルの隣のA列のセルの色を変えたいです。 この場合はA1とA2のセルの色が変わるというイメージです。 VBAを使って処理したいのですが、どなたかご教授頂けないでしょうか。宜しくお願いいたします。

  • VBAで特定の文字が入ったセルをクリアにする方法

    Excel VBAに関する質問です。 指定したセル範囲の中で、人月という文字を含む文字が入ったセル を見つけ、そのセルに入った文字を全てクリアにしたいと考えています。 良い方法をご教授いただけませんでしょうか。 人月という文字を含む文字は[0人月]や[2.5人月]など多岐に渡るので、 自分のイメージでは、人月という言葉だけで検索してひっかかるものを全て消そうと思っています。 なお、該当の文字はB列にしかありません。 宜しくお願い致します。

  • VBAマクロ・・同一セルの検索と検索したセルの操作

    VBAマクロ・・同一セルの検索と検索したセルの操作  VBAのほぼ初心者です。  決められたセル(たとえばE100)に入力された文字列と同一の文字列を その列内の上(E1~E99)で検索する。 そして、検索できれば(たとえばE30)そのセルがある行(行30)を削除する。 なお、複数検索されれば、検索されたすべてのセルに対応する行を削除する。  というようなことをVBAのマクロで作成したいです。 FindメソッドとDo..Loop Whileを使って試行錯誤してみたのですが、うまくいきません。。  いい方法があれば、是非教えていただきたいです。  どうぞよろしくお願いいたします。

  • [ExcelVBA]検索文字で検索し文字入力する

    いつもお世話になっております。 以前に投稿をさせていただきましたgitmykと申します。 http://okwave.jp/qa/q7563274.html 前回はご回答くださり誠にありがとうございます。 この場で感謝申し上げます。 内容を精査させていただきましたので、再度投稿させていただきます。 問題(1) Sheet2のA列に[範囲指定文字]、B列に[検索文字]、C列に[入力文字]が複数入っている。 Sheet1を[範囲指定文字]で検索しCurrentRegionで範囲指定する。 範囲指定した全てのセルに対し、[検索文字]の上から順に検索していく。 該当セルがあれば、右4セルoffsetし、対応する[入力文字]を入力する。 ([検索文字]と[入力文字]は1対1で対応している) 問題(2) Sheet2のA列に[範囲指定文字]、B列に[検索文字1]、C列に[検索文字2]、D列に[入力文字]が複数入っている。 Sheet1を[範囲指定文字]で検索しCurrentRegionで範囲指定する。 範囲指定した全てのセルに対し、[検索文字1]の上から順に検索していく。 該当セルがあれば、右2セル上1セルoffsetしたセルを対応する[検索文字2]で検索し、双方が一致した場合のみ[検索文字1]で検索した該当セルから、右に4セルoffsetしたセルに、対応する[入力文字]を入力する。 ([検索文字1]と[検索文字2]、[入力文字]は対応している) 問題(3) Sheet1を[範囲指定文字]で検索し下に1セルoffsetした位置をCurrentRegionで範囲指定した場合。 上記内容をExcelVBAでどのように記載すればよいか、ご教授くださいませんでしょうか。 VBA学習中です。 何卒宜しくお願いいたします。

  • VBA Excelのセル検索

    VBAで以下の要領でセルの検索をしています。 ------------------------------------------- dim getCell As String dim inputStr As String Windows("ExcelBook.xls").Activate Sheets("sheet1").Select inputStr = "58" getCell = Columns("C").Find(inputStr) ------------------------------------------- C列にある文字列を検索して、該当するセルの行番号を取得したいのですが、その検索する「文字列」は数字なんです(0~9000までで重複しません)。 上の方法で実行すると、inputStrに代入した数字をgetCellが持ってしまうのですが・・・ 色々考えているのですが分かりません。 どなたか教えて頂けませんか?よろしくお願いします。

  • EXCEL VBA 別シートで検索後、貼り付け

    excel2010 (ブック名A.xlsx)にシート名SA、シート名SBがあります。 シート名SAのC列に検索対象(C1~C50位)があり シート名SBのB列が検索範囲(流動的ですがB1~B100位の範囲)です。 検索対象は文字列で、これが検索範囲のセルにに含まれていた場合 検索範囲の隣のセルCxxに検索対象文字列をコピー&ペーストしたいです また、検索範囲の行数に値があるまで、順次処理をしていきたいです

  • EXCEL VBAを使ってファイル内にある特定の文字すべてに色をつけたい

    おはようございます。 EXCEL VBAであるひとつのEXCELファイルの中のすべてのシートの特定の文字が入っているセルに色をつけるにはどのようなコードを使えばいいでしょうか? (例)田中 という文字列が入っているセルはすべてブルーの色がつくという感じです。 教えて下さい。 よろしくお願いします。

  • エクセル(VBA) 検索条件に文字色を含める

    エクセルについて質問です。 エクセルのバージョンは2007を使用しています。 基本的にはCOUNTIFS関数やSUMPRODUCT関数の考え方で複数条件を満たすセルの個数を数えたいのですが その検索条件のうちのいくつか(正確には3つの列)において、特定文字が何色かを見たいのです。 具体的には下の添付ファイルの備考A~備考Cの列のように、その3つの列のセルの中にそれぞれ黒文字(自動)、黒文字(自動)太字、赤文字、青文字が混在しており、その文字列の羅列の規則性としては 1.セル内の文字列は必ず、上で挙げた4種のフォントスタイルのうちのいずれかの # で始まる。 2.#A #B #C (#D) のように、セル内の文字列は一連の小文字列が半角スペースで区切られているとともにその一連の小文字列の最初の文字は必ず # もしくは (# であり、またその一連の小文字列は同一色同一の太さである。 3.(#A) のような、() で囲んだ一連の小文字列は黒文字(自動)スタイルだけであり、また1.でも述べたようにセル中の文字列の最初に来ることはない。 となっております。 そこでそれぞれの列について、黒文字(自動)もしくは黒文字(自動)太字もしくは青文字の # で始まるセルを検索し(つまり赤文字の # で始まるセルと何も記述のない空白のセルを除く)、 その3列を and もしくは or 条件で組み合わせ、更に1、2個条件を加えて該当する行の数をCOUNTIFS関数やSUMPRODUCT関数のように数え、返したいと思っております。 恐らくVBAを利用することとなると思います。まだまだVBAを自分で一から構築することは難しいのですが、ある程度VBAを読み解き理解していくことは可能なレベルですので、どうか大まかな構文の枠組みだけでもご教授いただけると幸いです。 よろしくお願いいたします。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • セル内の文字列から特定の文字の有無を検索したい。

    セル内の文字列から特定の文字の有無を検索したい。 (A1)セルに、文章が書かれており、その中に、(B1)セルに入力した文字列が含まれているか調べて、有無を(C1)セルに1,0で表示する方法を教えて下さい。よろしくお願いいたします。

専門家に質問してみよう