[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Aから始まる2文字が入っていたらそのセルの色を塗る』(vo)
こんばんわ!今年もよろしくお願いします!
教えてください。
T列のセルにアルファベットと数字を用いた2文字が半角の空白を挟みランダムに入っているとします。
セルT1:AE 5H EA BA
セルT2:3Q HA
セルT3:1Q AF LK
セルT4:GH JK AF
という具合に以下T6000くらいまで続きます。
Aから始まる2文字が入っていないのはセルT2なのでこの場合T1.T3.T4が塗
れればokです。
しかし自分が考えたコードだとセルの最初か最後にAから始まる2文字が入っていないと塗れません。
つまりT3が塗れないのです。
以下のコードをどう直せばよいでしょうか?
Sub test2()
Dim source As Worksheet
Set source = ActiveWorkbook.Worksheets(1)
i = 0
Do While source.Cells(1 + i, 20).Value <> ""
If source.Cells(1 + i, 20).Value Like "*A?" Then
Cells(1 + i, 20).Interior.Color = RGB(200, 200, 200)
ElseIf source.Cells(1 + i, 20).Value Like "A*" Then Cells(1 + i, 20).Interior.Color = RGB(200, 200, 200)
End If
i = i + 1
Loop
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
では?
(マナ) 2017/01/02(月) 22:58
でもいいかも
(マナ) 2017/01/02(月) 23:10
例えばセルに"1H"、"2H"、"3H"という文字列のどれか一つが入っていたら、
必ず同じセルに"HK"という文字が入っていなければならないとします。
この条件に反したセルを見つけた場合に行番号をメッセージボックスで出す。
というマクロの組み立て方がわかりません。
以下の文をどのように直せばよいでしょうか?
Sub Htest()
Dim source As Worksheet
Set source = ActiveWorkbook.Worksheets(1)
i = 0
Do While source.Cells(1 + i, 20).Value <> ""
If source.Cells(1 + i, 20).Value Like "*1H*" Then If Not source.Cells(1 + i, 20).Value Like "*HK*" Then MsgBox Cells(1 + i, 20).Row
End If End If
i = i + 1 Loop End Sub (vo) 2017/01/05(木) 20:54
こういうこと?
If source.Cells(1 + i, 20).Value Like "*[1-3]H*" Then (seiya) 2017/01/05(木) 21:07
まぁ、別物なので新規のほうがいいと思うけど。
セルに とあるけど、コードでは T列だけを対象にしてますね? それでいいということですね?
それと、セル内に 1HK と連続した文字列があったとして、これはOKということですか? それとも 1H とは別に HK が必要ですか?
(β) 2017/01/05(木) 21:10
βさん
そうです!T列のセルが対象で、
1Hとは別にHKが必要なんです。
(vo) 2017/01/05(木) 21:56
>>1Hとは別にHKが必要なんです。
であれば、元コードの最初の比較部分を seiyaさん回答のコードに変更したとしても 次の、元々のコードが
If Not source.Cells(1 + i, 20).Value Like "*HK*" Then
ですから 1HK と連続して文字列が存在するものも OK になってしまいますね。
(β) 2017/01/05(木) 22:33
1H とは別に HK があることがOKである条件ということで、たとえば。
Sub Test() Dim c As Range Dim s As String Dim ng As Boolean
For Each c In Range("T1", Range("T" & Rows.Count).End(xlUp)) ng = True s = Replace(c.Value, "HK", "") If Len(s) <> Len(c.Value) Then If s Like "*[1-3]H*" Then ng = False End If If ng Then MsgBox c.Row Next
End Sub
(β) 2017/01/05(木) 22:43
単純に If Source.Cells(1 + i, 20).Value Like "*[1-3]H*" Then If (Not Source.Cells(1 + i, 20).Value Like "*HK*[1-3]H*") * (Not Source.Cells(1 + i, 20).Value Like "*[1-3]H*HK*") Then MsgBox Cells(1 + i, 20).Row End If End If (seiya) 2017/01/05(木) 22:59
To βさん
>1HK と連続して文字列が存在するものも OK になってしまいますね。
1HK は3文字になるので、質問者さんの以下の条件ではあり得ないので、seiyaさんの初めの回答で大丈夫と思いますよ。
>アルファベットと数字を用いた2文字が半角の空白を挟み
(sy) 2017/01/05(木) 23:02
どうもすみません!
新規投稿で元の条件など最初から書けば誤解を与えなかったと思います(>_<)
すみません、もう一点教えてください!
1H 2H 3Hのような規則性がある場合はseiyaさんの仰るとおり
"*[1-3]H*" のような書き方ができますが、
例えば全く規則性の無い場合はどう書けばよいのでしょうか?
例えば YJ 9F D4 のどれかが入っていた場合にHKが入っていなければならないとしたら?
今一つLike演算子の記事を探してもわからないんです。
(vo) 2017/01/06(金) 00:27
なので、1回のIf文では3種類同時判定はできないので、3回に分けて判定するか、または CreateObject("VBScript.RegExp") で、より高度な正規表現が扱えるオブジェクトを呼び出して使う事になります。 興味があれば調べてみてください。
(???) 2017/01/06(金) 09:19
これであってるのかなぁ。。。(テスト不十分です^^;)
Sub test()
Const cKW1 As String = "1H 2H 3H" Const cKW2 As String = "HK" Dim v As Variant Dim c As Range Dim s As String
For Each c In Range("T1:T" & Cells(Rows.Count, "T").End(xlUp).Row) s = c.Value For Each v In Split(cKW1, " ") If InStr(1, s, v) > 0 Then If InStr(1, s, cKW2) > 0 Then Exit For Else c.Select MsgBox c.Address(False, False) End If End If Next Next End Sub
>例えば YJ 9F D4 のどれかが入っていた場合にHKが入っていなければならないとしたら?
これは、いつどのように与えられるのでしょう?
例えば、シート上のセルに入力する?
(まっつわん) 2017/01/06(金) 10:11
>>アルファベットと数字を用いた2文字が半角の空白を挟み
すっかり見落としてました!
>>例えば YJ 9F D4 のどれかが入っていた場合にHKが入っていなければならないとしたら?
正規表現も含めて、いろんな書き方があると思いますが、素直に、かつ単純に
Sub Test2() Dim c As Range
For Each c In Range("T1", Range("T" & Rows.Count).End(xlUp)) If c.Value Like "*YJ*" Or c.Value Like "*9F*" Or c.Value Like "*D4*" Then If Not c.Value Like "*HK*" Then MsgBox c.Row End If Next
End Sub
こんなのでいいのではないですか?
(β) 2017/01/06(金) 14:09
ありがとうございます!
OR条件が書けないとしつつも、βさんのような使い方であればORが書けるんですね。
べんきょうします!
まっつわんさん
ありがとうございます!
>これは、いつどのように与えられるのでしょう?
>例えば、シート上のセルに入力する?
いえ、入力するのではなく、もともとT列に入っている文字なんです。
元素材というか、これから色々な条件で必要な情報だけ抜き出す方法を知りたくて。
まっつわんさんとβさんのコード、どちらも正しく同じ結果が出せました!
(vo) 2017/01/07(土) 00:27
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.