プロが教える店舗&オフィスのセキュリティ対策術

エクセル2003を使っています。

F列に科目名が入っています。
その科目名によってM列の値を見て、N列に返す値が変わってきます。
その処理を2行目から最下行迄、繰り返し処理をしたいと思っています。

例えば、2行目のF列が数学、M列が100と入ってたとします。
数学の場合、M列の値が179以下なら、N列は空白で180以上なら「期限切れ」とN列に表示させたいと思います。
この場合、M列が100なのでN列は空白にしたいと思います。

次に3行目が国語で、M列が377とします。
国語の場合、M列が364以下ならN列は空白で、365以上なら「期限切れ」とN列に表示させたいと思います。
この場合、M列が377なので、N列は期限切れにしたいと思います。

このようなことをVBAでしたいと思います。
どうすれば良いでしょうか?

よろしくお願いします。

A 回答 (3件)

VBAにする必要は全くないように思います。


次のようにすることで比較的容易にできますね。
はじめにデータベースとして例えばP2セルに数学と入力し、Q2セルには180と入力します。P3セルには国語と入力し、Q3セルには365と入力します。以下の行についても科目ごとに入力します。
その上でN2セルには次の式を入力し下方にオートフィルドラッグすればよいでしょう。
=IF(M2="","",IF(M2<VLOOKUP(F2,P:Q,2,FALSE),"","期限切れ"))
    • good
    • 0

こんばんは!


参考になるかどうか分かりませんが・・・

科目数がいくつあるか分からないので
↓の画像のように表を作ってみました。
(数学と国語だけならIF関数で対応できるとおもいますが・・・)

Sheet2のA~C列は空白と期限切れの境界値を入力しておきます。
(実際はC列だけでOKですが、理解しやすいように範囲を表示してみました)
尚、最大値がいくつになるか分からないので、とりあえず1000までのデータとしています。

そして、Sheet1の
N2セル =IF(INDEX(Sheet2!$D$2:$G$4,MATCH(M2,Sheet2!$C$2:$C$4,-1),MATCH(F2,Sheet2!$D$1:$G$1,0))=0,"",INDEX(Sheet2!$D$2:$G$4,MATCH(M2,Sheet2!$C$2:$C$4,-1),MATCH(F2,Sheet2!$D$1:$G$1,0)))

としてオートフィルで下へコピーします。
これで希望に近い形にならないでしょうか?

以上、お役に立てれば幸いですが、
的外れの回答なら無視してくださいね。m(__)m
「科目によって処理を変えたい」の回答画像2
    • good
    • 0

マクロです



Sub test()
Dim 科目名 As String
Dim M列 As Integer
Dim N列 As String
Dim i As Long
For i = 2 To Range("F65536").End(xlUp).Row
科目名 = Cells(i, 6).Value
M列 = Cells(i, 13).Value
Select Case 科目名
Case "数学"
If M列 <= 179 Then
N列 = ""
Else
N列 = "期限切れ"
End If
Case "国語"
If M列 <= 364 Then
N列 = ""
Else
N列 = "期限切れ"
End If
End Select
Cells(i, 14).Value = N列
Next i
End Sub

参考程度に
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!