Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6364 / 13646 ツリー ←次へ | 前へ→

【45614】if文で部分一致を条件に使用 リビテ 07/1/6(土) 23:50 質問[未読]
【45616】Re:if文で部分一致を条件に使用 かみちゃん 07/1/7(日) 0:01 発言[未読]
【45621】Re:if文で部分一致を条件に使用 リビテ 07/1/7(日) 4:53 お礼[未読]
【45618】Re:if文で部分一致を条件に使用 Kein 07/1/7(日) 0:09 回答[未読]
【45622】Re:if文で部分一致を条件に使用 リビテ 07/1/7(日) 4:56 お礼[未読]
【45624】Re:if文で部分一致を条件に使用 かみちゃん 07/1/7(日) 10:28 発言[未読]
【45631】Re:if文で部分一致を条件に使用 Toshiyo 07/1/7(日) 19:35 質問[未読]
【45632】Re:if文で部分一致を条件に使用 かみちゃん 07/1/7(日) 19:50 発言[未読]
【45633】Re:if文で部分一致を条件に使用 Toshiyo 07/1/7(日) 21:24 お礼[未読]

【45614】if文で部分一致を条件に使用
質問  リビテ  - 07/1/6(土) 23:50 -

引用なし
パスワード
   はじめまして。リビテと申します。よろしくお願いします。

題名のとおりif文の条件に部分一致を使用したいのです。

エクセルのシートの

(1,A)に"###"
(2,A)に"######"
(3,A)に"abc###byz" 

(1000,A)に"abrvbg"
というように、A列のみに、"#"を含むセルと含まないセルが存在します。

VBAで、このA列のセルで、
セル値から#が三つ続いた場合に色をぬるという操作を自動でさせたいのですが、
部分一致検索条件の記述の仕方がわからないのです。

記述したコードですが

Dim row As Integer
dim strPattern As String

Sub 色塗り

strPattern ="###"
For row = 1 to 100 step 1
  If Cells(row,1)=strPattern Then
   Cells(row,1).Select
   With Selection.Interior
     .ColorIndex =6
     .Pttern = xlSolid
   End With
  End If
Next
row = 0
End Sub

というコードを記述しております。
このコードで実行させると、当然完全一致となってしまい"###"のところしか
色がぬられません。

完全一致ではなく、部分一致で検索させるにはどのようにしたらいいのでしょうか?
ご教授のほうどうかよろしくお願いします。

【45616】Re:if文で部分一致を条件に使用
発言  かみちゃん  - 07/1/7(日) 0:01 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>完全一致ではなく、部分一致で検索させる

Like演算子を使います。
If Cells(Row, 1).Value Like "*" & strPattern & "*" Then
のような感じです。

または、Findメソッドを使えば、1セルずつ判断しなくてもいいかと思います。
詳しくは、Findメソッドのヘルプをご確認ください。

【45618】Re:if文で部分一致を条件に使用
回答  Kein  - 07/1/7(日) 0:09 -

引用なし
パスワード
   >#が三つ続いた場合に色をぬる
ワークシート関数の FIND を使った数式を作業列(IV列)に埋めて
判定・処理するコードです。

Sub Check_Data()
 On Error Resume Next
 With Range("A1", Range("A65536").End(xlUp)).Offset(, 255)
   .Formula = "=FIND(""###"",$A1)"
   .SpecialCells(3, 1).Offset(, -255) _
   .Interior.ColorIndex = 6
   .ClearContents
 End With
End Sub

【45621】Re:if文で部分一致を条件に使用
お礼  リビテ  - 07/1/7(日) 4:53 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>完全一致ではなく、部分一致で検索させる
>
>Like演算子を使います。
>If Cells(Row, 1).Value Like "*" & strPattern & "*" Then
>のような感じです。
>
>または、Findメソッドを使えば、1セルずつ判断しなくてもいいかと思います。
>詳しくは、Findメソッドのヘルプをご確認ください。

ありがとうございました。無事目的どおり部分一致で検索することができました。

【45622】Re:if文で部分一致を条件に使用
お礼  リビテ  - 07/1/7(日) 4:56 -

引用なし
パスワード
   ▼Kein さん:
>>#が三つ続いた場合に色をぬる
>ワークシート関数の FIND を使った数式を作業列(IV列)に埋めて
>判定・処理するコードです。
>
>Sub Check_Data()
> On Error Resume Next
> With Range("A1", Range("A65536").End(xlUp)).Offset(, 255)
>   .Formula = "=FIND(""###"",$A1)"
>   .SpecialCells(3, 1).Offset(, -255) _
>   .Interior.ColorIndex = 6
>   .ClearContents
> End With
>End Sub

こちらがFindを使用したものになるのですか。
こちらの方法でも試してみたいと思います。
ありがとうございました。

【45624】Re:if文で部分一致を条件に使用
発言  かみちゃん  - 07/1/7(日) 10:28 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横から失礼します。

>こちらがFindを使用したものになるのですか。

FIND関数とFindメソッドは、違います。
だから、Findメソッドのヘルプを確認してくださいと申し上げたのです。
そこの使用例を見れば、その違いは、ハッキリわかります。

【45631】Re:if文で部分一致を条件に使用
質問  Toshiyo  - 07/1/7(日) 19:35 -

引用なし
パスワード
   ▼かみちゃん さん: よこから失礼します
いつも見させていただき勉強させています。
質問させていただきますが・・・
次のような状態のチェックをしたのですが・・・
例えば次のような例ですが、かみちゃん さん とkeinsさんの結果が異なるのですが、その理由が分かりません。どこに問題があるのでしょう。教えてください。
特に5行目の99##99にも反応します・・・何か当方のやり方が間違っているのでしょう・・・とは思いますが。

項目1     かみちゃん    Keinsさん
99###               ○
9###99               ○
9####9               ○
99##999      ○
99###999DD     ○       ○ 
###                ○
########              ○
##
###999       ○       ○
###                ○
##9##
##99###9              ○
9999###      ○       ○
99##99

コードは下の通りで、使わせていただきました。
strPattern = "###"
For row = 7 To 100 Step 1
  If Cells(row, 1).Value Like "*" & strPattern & "*" Then
   Cells(row, 1).Select
   With Selection.Interior
     .ColorIndex = 6
     .Pattern = xlSolid
   End With
  End If
Next
row = 0

【45632】Re:if文で部分一致を条件に使用
発言  かみちゃん  - 07/1/7(日) 19:50 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>例えば次のような例ですが、かみちゃん さん とkeinsさんの結果が異なるので
>すが、その理由が分かりません。

申し訳ありません。説明不足でした。
Like演算子のヘルプにも書いてあるのですが、
「特殊文字の左角かっこ ([)、疑問符 (?)、数値記号 (#)、およびアスタリスク
(*) を文字列比較するには、これらの文字を角かっこで囲みます。」
とあります。

つまり、今回の場合"###"という文字列が含まれているという条件ですので、
  If Cells(Row, 1).Value Like "*" & strPattern & "*" Then
の部分を
  If Cells(Row, 1).Value Like "*" & Replace(strPattern, "#", "[#]") & "*" Then
としないといけません。

【45633】Re:if文で部分一致を条件に使用
お礼  Toshiyo  - 07/1/7(日) 21:24 -

引用なし
パスワード
   ▼かみちゃん さん:

早速ご返答ありがとうございます。良く理解できました。
特殊文字の場合の文字のカッコで囲むということですね。
特殊文字でなければ
If Cells(Row, 1).Value Like "*" & strPattern & "*" Then
のコードでよいということですね。
ご親切にありがとうございました。

6364 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free