ここから本文です

マクロ(VBA)について教えてください。 下記のマクロを完成させたいのですが、...

muc********さん

2019/9/2914:04:50

マクロ(VBA)について教えてください。

下記のマクロを完成させたいのですが、うまくいきません。

ネットで該当するコードを探してつなげた素人作業の為、お恥ずかしい点が多々あるかと思いますがお許しください^^;;)

名簿の配列については添付画像の通りです。

Dim i, lastrow As Long '一番最後のセルまで処理を続ける
lastrow = Range("B65536").End(xlUp).Row
For i = 1 To lastrow

'小中学生は全員対象
If InStr(Range("D" & i).Value, "小") > 0 Or InStr(Range("D" & i).Value, "中") > 0 Or InStr(Range("D" & i).Value, "年") > 0 Then
Range("O" & i).Value = "対象"

'終了日が入っている人は、対象外
ElseIf Range("I" & i).Value <> "" Then
Range("O" & i).Value = "対象外"

'成人の人は、対象外
ElseIf InStr(Range("D" & i).Value, "成人") > 0 Then
Range("O" & i).Value = "対象外"


'高校生で、回数が入っていない人は、対象外
ElseIf InStr(Range("D" & i).Value, "高") > 0 And Range("M" & i).Value = "" Then
Range("O" & i).Value = "対象外"


'高校生で、回数が週しか入っていない人は、対象外
ElseIf InStr(Range("D" & i).Value, "高") > 0 And Range("M" & i).Value = "週" Then
Range("O" & i).Value = "対象外"


'高校生で、回数が週1しか入っていない人は、対象外
ElseIf InStr(Range("D" & i).Value, "高") > 0 And Range("M" & i).Value = "週1" Then
Range("O" & i).Value = "対象外"


'高校生で、回数が週2しか入っていない人は、対象外
ElseIf InStr(Range("D" & i).Value, "高") > 0 And Range("M" & i).Value = "週2" Then
Range("O" & i).Value = "対象外"


'高校生で、半額でなく、週3以上の人は、対象
ElseIf InStr(Range("D" & i).Value, "高") > 0 And Range("N" & i).Value = "" And Range("M" & i).Value <> "?[1-2]" Then
Range("O" & i).Value = "対象"

'高校生で、半額で、週1~5以下の人は、対象外
ElseIf InStr(Range("D" & i).Value, "高") > 0 And InStr(Range("N" & i).Value, "半額") > 0 And Range("M" & i).Value Like "?[1-5]" Then
Range("O" & i).Value = "対象外"


Else: Range("O" & i).Value = "対象"

End If

Next

閲覧数:
40
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2019/9/2916:02:34

↓のような感じでどうですか? 未実行。試してください。

Dim i As Long
For i = 1 To Range("B" & Rows.Count).End(xlUp).Row '一番最後のセルまで処理を続ける
Set rng = Range("O" & i) '★
rng.Value = "対象外" '★
With Range("D" & i)
'終了日が入っている人・'成人の人は、対象外
If Range("I" & i).Value = "" And Not (.Value Like "*成人*") Then
If (.Value Like "*小*") Or (.Value Like "*中*") Then
rng.Value = "対象"
End If
If .Value Like "*高*" Then
If Range("N" & i).Value = "" And Range("M" & i).Value <> "?[1-2]" Then
rng.Value = "対象"
End If
End If
End If
End With
Next

一旦すべての人を対象外にしておく(★のところ)
それから、対象者の条件を判定していく。
あなたのは、対象・対象外の判定をごっちゃにしているから解りにくいのでしょうね。

  • tra********さん

    2019/9/2916:04:57

    ここ

    '終了日が入っている人・'成人の人は、対象外
    If Range("I" & i).Value = "" And Not (.Value Like "*成人*") Then

    は、

    '終了日が入っている人 
    If Range("I" & i).Value = "" Then

    でいいんじゃないですかね。

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる