- ベストアンサー
科目によって処理を変えたい
エクセル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でしたいと思います。 どうすれば良いでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 参考になるかどうか分かりませんが・・・ 科目数がいくつあるか分からないので ↓の画像のように表を作ってみました。 (数学と国語だけなら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)
- hige_082
- ベストアンサー率50% (379/747)
マクロです 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 参考程度に
- KURUMITO
- ベストアンサー率42% (1835/4283)
VBAにする必要は全くないように思います。 次のようにすることで比較的容易にできますね。 はじめにデータベースとして例えばP2セルに数学と入力し、Q2セルには180と入力します。P3セルには国語と入力し、Q3セルには365と入力します。以下の行についても科目ごとに入力します。 その上でN2セルには次の式を入力し下方にオートフィルドラッグすればよいでしょう。 =IF(M2="","",IF(M2<VLOOKUP(F2,P:Q,2,FALSE),"","期限切れ"))