こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

以下のマクロは、一応簡単な文字チェックマクロなのですが・・・

L列の5行目から文字の入っている最後の行の範囲で、
L列に『等』という文字が入っているセルで
M列に『トウ』の文字が入っていない場合は、MsgBoxを出すというマクロです。

Private Sub 等_Click()
Dim i As Long
With ActiveSheet
For i = 5 To .Cells(Rows.count, "L").End(xlUp).Row '『i』はD列の5行目から文字の入っている最後の行をいう(行の範囲)


If InStr(.Cells(i, "L"), "等") > 0 Then
If InStr(.Cells(i, "M"), "トウ") = 0 And .Cells(i, "M") <> "" Then
MsgBox i & "行"
End If
End If


Next i
End With
End Sub


これに少し付け加えて、
L列に『等』が2回出てきたら、M列は『トウ』を2回出てこないとMsgBoxを出すようにしたいのですが、どのようにすればよいでしょうか?
例えば

L列7行目 柑橘類等や野菜類等
M列7行目 カンキツルイトイヤヤサイルイトウ

※ ひとつ目の『等』のヨミが『トイ』となっていますが、上記のマクロですと
ヨミの最後の『トウ』に反応してスルーしてしまいます。
完璧なヨミチェックはマクロでは無理かと思いますが、このくらいはスルーしないマクロを何とかゲットしたいです。。。

投稿日時 - 2008-08-07 21:44:40

QNo.4235558

困ってます

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

Private Sub 等_Click()
Dim i As Long
With ActiveSheet
For i = 5 To .Cells(Rows.Count, "L").End(xlUp).Row '『i』はD列の5行目から文字の入っている最後の行をいう(行の範囲)


If InStr(.Cells(i, "L"), "等") > 0 Then
If Len(.Cells(i, "L")) - Len(Application.Substitute(.Cells(i, "L"), "等", "")) <> _
(Len(.Cells(i, "M")) - Len(Application.Substitute(.Cells(i, "M"), "トウ", ""))) / 2 Then
MsgBox i & "行"
End If
End If


Next i
End With
End Sub

でどうでしょう。

投稿日時 - 2008-08-07 22:26:37

ANo.2

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

InStrは検索して何文字目でマッチしたかを返す関数ですから、これを複数回繰り返すという方法もありますが、文字列操作が面倒ですね。
正規表現で検索する方法もありますが、Split関数を利用した以下の方法はいかがでしょうか?

カウント用の配列変数を用意しておきます。(ここではarとします)
トウの方を調べる例として
 ar = Split(.(Cells(i, "M"), Value, "トウ")  としておけば、
 UBound(ar)
で"トウ"の含まれていた個数を求めることができます。
(ない場合は0、対象セルが空白の時は-1の値になるようです。:エクセル2000)

投稿日時 - 2008-08-07 22:23:35

あなたにオススメの質問