質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

1512閲覧

NGワードが何個含まれているかチェックしたいです

pen0147

総合スコア9

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2018/05/09 09:37

はじめまして。
VBAはいろいろなサイトからのコピペでつなぎ合わせて使っている初心者です。
不足している情報等ございましたら教えてください。
よろしくお願いいたします。

前提・実現したいこと

Excelのlistシートに載っている文字がアクティブ列の文章にいくつ含まれているかチェックしたいです。
(文章中にNGワードが何個含まれているかチェックしたいです。)

期待する結果
アクティブシートの対象文章が入っているセルの隣のセルに数字(NGワードが含まれている数)が表示される

listシート
A列:NGワードの一覧

アクティブシート
列、シート名共に変動する可能性があるので固定にしたくないです。

発生している問題・エラーメッセージ

・ループしないです
・いくつ含まれているかをどうやって入れたらいいかわからないです
※↓いろんなサイトからのコピペでひとまず1つのセルの隣に○を表示させられたのですが
ここからどうしたらいいのか、、

Sub リストによる検索() Dim i As Long Dim lastRow As Long Dim A As Long Dim wS1 As Worksheet Dim wS2 As Worksheet Dim Str1 As String, Str2 As String Set wS1 = ActiveSheet Set wS2 = Worksheets("list") A = ActiveCell.Column 'アクティブなセルの列番号を取得=Aとします buf = ActiveCell.Address(True, False) ' 数値から列番号表示させるやつ buf = Left(buf, InStr(buf, "$") - 1) lastRow = Cells(Rows.Count, A).End(xlUp).Row 'その列の最終行を取得=lastRowとします For i = 1 To lastRow '1から最終行まで繰り返す Str1 = wS1.Cells(i, A) Str2 = wS2.Cells(i, "A") If InStr(Str1, Str2) <> 0 Then wS1.Cells(i, A).Offset(0, 1).Select '右隣のセルを選択 Selection = "○" '選択したセルに○って入れる End If Next i MsgBox ("チェック完了!!") End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

NGワードのシートとアクティブシート両方を同時にループで参照してしまっているため不具合が起こっているのでしょう。
以下のように変更してみてください。各シートの最終行の取得部分はご自身で書いてみてくださいね。

vba

1 2 For i = 1 To [アクティブシートの最終行] 3 For j = 1 To [NGワードシートの最終行] 4 5 Str1 = wS1.Cells(i, A) 6 Str2 = wS2.Cells(j, "A") 7 8 If InStr(Str1, Str2) <> 0 Then 9 wS1.Cells(i, A).Offset(0, 1).Select '右隣のセルを選択 10 Selection = "○" '選択したセルに○って入れる 11 End If 12 13 Next j 14 Next i

20180509 20:00追記

vba

1Dim counter As Long '数を数えるための変数 2 For i = 1 To [アクティブシートの最終行] 3 counter = 0'アクティブシートの文章ごとに初期化 4 For j = 1 To [NGワードシートの最終行] 5 6 Str1 = wS1.Cells(i, A) 7 Str2 = wS2.Cells(j, "A") 8 9 If InStr(Str1, Str2) <> 0 Then 10 wS1.Cells(i, A).Offset(0, 1).Select '右隣のセルを選択 11 Selection = "○" '選択したセルに○って入れる 12 counter = counter + 1 'さらにヒットした数を数える 13 End If 14 15 Next j 16 Next i 17

投稿2018/05/09 09:45

編集2018/05/09 11:52
Rocky

総合スコア261

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pen0147

2018/05/09 10:14

回答ありがとうございます!別々にしないといけないんですね! そしてすみません、その1文にリストに載っているキーワードがいくつ含まれているか数えたいのですが、これに関しては全くどうしたらいいかわからず、、 こちらに関してもなにかアドバイスいただけますと幸いです。
Rocky

2018/05/09 11:46

キーワードがヒットするごとに数を数えないといけませんね。 キーワードがヒットした時の処理は If InStr(Str1, Str2) <> 0 Then から End Ifまでの間なのでこの間に処理を含めるといいでしょう。回答を追記します。
pen0147

2018/05/09 12:32

ありがとうございます!!!!!!!!!!!!! やりたかったことが実現できました!!!!!!!!! もっとたくさんコードを書かないといけないのかと思っていたのですがこんな短いなんて!! すごいです!ありがとうございました!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問