• ベストアンサー

条件に一致するセルのカウントと色付けと置換

こんにちは。 指定した文字列を選択範囲から検索し、 文字列を含むセルの個数のカウント& セルの色付け&文字列の置換ができる コードを教えてください。 <シート1> A列:検索文字列 B列:置換後の文字列 <対象範囲> 別ブックの指定した範囲のみ 文字列の置換のみであればエラーなく 実行することができたのですが、 個数のカウントとセルの色付け方法が いまいちわかりません。 vba初心者のため、簡単な解説を つけていただけると嬉しいです。 なお、文字列の置換は以下のサイトを参考に しています。 http://extan.jp/?p=5749

noname#254533
noname#254533

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.1

以下のように追加すればいけると思います。 前略 Dim tmp As Variant '←追加 Dim mCnt As Long '←追加 中略 mCnt = 0 '←追加 For Each objParagraph In objRepRange '複数条件の数分処理を繰り返します。 For i = LBound(arrRepWords, 1) To UBound(arrRepWords, 1) ' tmp = objParagraph.Value '←追加 置換前の値を一時的に保存 '置換対象文字列に対し、変換後の文字列と変換前の文字列を置き換えます。 objParagraph.Value = Replace(objParagraph.Value, arrRepWords(i, 1), arrRepWords(i, 2)) '↓追加 If tmp <> objParagraph.Value Then '置換前と置換後で値に変化があれば置換された objParagraph.Interior.Color = vbRed '←セルを赤に mCnt = mCnt + 1 '←カウントアップ End If '↑追加ここまで Next Next MsgBox mCnt 'カウント合計を表示 後略

noname#254533
質問者

お礼

ご丁寧な回答ありがとうございます🫧 こちらで試したところうまく行きました! 別に回答くださったコードとの 違いは勉強しながら確認します🙇🏻‍♀️

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.2

No.1の追加です。別の方法だと以下でもいけるとおもいます。 前略 mCnt = 0 For Each objParagraph In objRepRange '複数条件の数分処理を繰り返します。 For i = LBound(arrRepWords, 1) To UBound(arrRepWords, 1) '検索文字列が置換対象セルに含まれているかどうか、かつ検索文字列が条件範囲内のセルに記載されているかどうか If InStr(objParagraph.Value, arrRepWords(i, 1)) > 0 And arrRepWords(i, 1) <> "" Then '置換対象文字列に対し、変換後の文字列と変換前の文字列を置き換えます。 objParagraph.Value = Replace(objParagraph.Value, arrRepWords(i, 1), arrRepWords(i, 2)) objParagraph.Interior.Color = vbRed mCnt = mCnt + 1 End If Next Next 後略

関連するQ&A

  • vba:セル内変更文字列の色付け

    vbaにて別ブックの一覧を参照し、 指定範囲に検索文字列が含まれる場合 文字列の置換&対象セルの色付け& 件数の表示を行うコードから、 文字列の置換&セル内の変更した文字列のみ 色付け&件数の表示を行うコードに変更したいです。 変更した文字列のみ文字色を変更したい場合、 どのようなコードに書き換えればよろしいでしょうか。 なお、現在のコードは以下の通りです。 ============================ Sub 複数条件で一括置換する() Dim 範囲 As Object Dim 対象 As Object Dim 一覧 As Variant Set 範囲 = Selection 一覧 = Workbook("確認.xlsm").Sheets("複数条件").Range("A1:B7") Dim tmp As Variant Dim mCnt As Long 中略 mCnt = 0 For Each 対象 In 範囲 For i = LBound(一覧, 1) To UBound(一覧, 1) tmp = 対象.Value 対象.Value = Replace(対象.Value, 一覧(i, 1), 一覧(i, 2)) If tmp <> 対象.Value Then 対象.Interior.Color = vbRed mCnt = mCnt + 1 End If Next Next MsgBox mCnt & "件置換しました" Set 範囲 = Nothing Set 対象 = Nothing End Sub

  • エクセルVBAで他ブックのセルへジャンプするコード

    お世話になります。アクティブセルから他ブックを開き、元の内容と同じ文字列が含まれるセルにジャンプするVBAのコードを教えていただけないでしょうか。 ・ブック1「12345」のアクティブセルでマクロボタンを押す。 ・指定のブック2シート1を開き、「12345」が含まれるセルを検索しジャンプ(アクティブセル)する。 ・指定の文字列が無い場合は「検索条件に一致するデータは見つかりません。」 ネットなどでいろいろ調べたのですが見つかりませんでした。みなさんご教授お願いいたします。

  • 検索条件内で、特定範囲の数が入っているセル個数をカウント

    指定された範囲に含まれるセル内で、検索条件に一致し(たとえば○○市)、なおかつ特定範囲の数(100以上、100~30、30~20、20未満)が入っているセルの個数をカウントの仕方を教えてください。

  • excel vba 選択されたセルの範囲を別のセル

    excel vba 選択されたセルの範囲を別のセルに書き込みたい。 お世話になっております。 乱筆乱文お許し下さい。 EXCEL VBAについてですが、或るブックを閉じる時(Private Sub Workbook_BeforeClose(Cancel As Boolean))にその時点でACTIVEなsheetの名前を指定シートの指定セルに書き込み、そのブックを開く時(Private Sub Workbook_Open())に指定シートの指定セルの値の名前sheetをACTIVEにすることは出来たのですが、もう一歩進んで、 ブックを閉じる時(Private Sub Workbook_BeforeClose(Cancel As Boolean))にその時点でselectされているcellの範囲(単一セル・複数セル共に、名前がついていたら名前、ついていなければrangeを表す文字列)を指定シートの指定セルに書き込み、そのブックを開く時(Private Sub Workbook_Open())に指定シートの指定セルの値の名前cell範囲をselectするようなことがやりたいのですが、私の検索の仕方が下手で、なかなか出てきません。どなたかご教示下さい。よろしくお願いします。

  • 置換について

    エクセルで、重要な語句に対して部分的に色付けされた文章が記載されたセルがあるとします。 そのセル内の文字列を、ctrl+FやReplace関数を使って置換をかけた場合、色付けした文字列がすべて黒に変わってしまいます。 置換対象文字列以外は、置換前の状態のまましたいのですが、どなたかその方法についてご存知の方いらっしゃらないでしょうか? ぜひ、ご教授願います。

  • 複合条件に一致するセルのカウント方法

    A列から"山田"かつB:D列から"101"を含むセルの個数をカウントしたい場合どうすればよいでしょうか? A列の"山田"とB:D列の"101"は複数レコードある事を想定してください。

  • 条件一致するセルを異なるブックへコピーするには…

    EXCEL VBAで条件に一致するセルを別のブックの複数のシートへコピーして 貼りたいのですが、どのようにしたらよいか教えて下さい。 (1)のブック、A列と、(2)のブックA列には順番はバラバラですが、同じデータ(数字とアルファベットの番号が入っています)これを元に、(1)のブックのK列のデータを(2)のブックシートa~dのY列に貼りたいのです。(シートa~dにはそれぞれ異なるデータが入っていますが、列数は一緒です。A列に入っているデータも(1)のブックと一緒です。) お詳しい方どうかどうか宜しくお願い致します。

  • 値の入っているセルをカウントするマクロの作成

    マクロ初心者です。 アクティブセルから一つ上の列に、値が入っているセルが何個あるのかカウントするマクロを作成したいのですが、うまくいかずに困っております。 すみませんが、よろしくお願いします。 参考用画像の解説 【ActiveCell】セルから上の列を範囲指定。 1、2、3と数字が入っているセルが何個あるのかカウント。

  • 条件で色付け

    エクセル2010使用しています シートAのB列に6桁の品番が並んでいます シートBのA列にも同様に6桁の品番が並んでいます シートAに123456という品番があれば シートBの123456という品番のセルに色付けしたいです 別の品番も同様に、シートAに存在する品番を シートBで分かるようにしたいです 色付けは一色で良いです 初心者なんで、簡単な数式やルールを教えて下さい

  • EXCELでのカウント

    こんんちは!いつも使っている簡単な関数ならわかるのですが... 範囲→1列(A列やB列) 範囲内で指定の文字が入力されているセルの数をカウントしたい(返したい)んです。 例)B列に「2」「23」「50」「13」「12」と入力されているとしたら   「2」を入力しているセルをカウントしたかったら   「3」と出てくるように... COUNTIF関数だと「2」を指定したら「2」と入力したセルだけカウントされますよね。(例えば上記例だと「1」と帰ってくる。これを「2」を含んでいるセルの数をカウントしたいんです。 教えてください。 宜しくお願いいたします。

専門家に質問してみよう