|
▼。・゚・(ノД`)・゚・。 さん:
>御蔭で理由分かったのですが結局アホなのでコード分かりません。(´・ω・`)
>全部チェックしてからのELSEはどうやって書けばいいんですか??
というか、コードを見ただけでは 結局何をしたいのか分かりません。
Dim i As Long
For i = 17 To 66
If Range("L2").Value = Range("B" & i).Value Then
Range("E" & i).Value = Range("E" & i).Value _
- Range("D" & i).Value * Range("M2").Value
Range("C9").Value = Range("C9").Value _
+ Range("D" & i).Value * Range("M2").Value
Range("C" & i).Value = Range("c" & i).Value - Range("M2").Value
Range("G13").FormulaR1C1 = "=SUM(R[-6]C:R[-1]C)"
Range("k2:m2").ClearContents
Range("N2").Formula = "=rounddown(P2,0)"
ElseIf Range("L6").Value = Range("b67").Value Then
Range("G12").Value = Range("g12").Value - Range("o2").Value
Range("C69").Value = Range("c69").Value - Range("m2").Value
Range("k2:m2").ClearContents
Range("N2").Formula = "=rounddown(P2,0)"
Else
MsgBox "商品はありません"
Exit For
End If
Next
現在このようになっていますが、これを簡単にすると
For i = 17 To 66
If Range("L2").Value = Range("B" & i).Value Then
【処理1】
ElseIf Range("L6").Value = Range("b67").Value Then
【処理2】
Else
MsgBox "商品はありません"
Exit For
End If
Next
とまとめることができると思うけど、ここで
> MsgBox "商品はありません"
の文は全部調べてからなので、For〜Next のループの外に出します。
> If Range("L2").Value = Range("B" & i).Value Then
で何回一致したか、変数に覚えておきましょう。
そうすると、こんな構文になります。
Dim Cnt As Long
For i = 17 To 66
If Range("L2").Value = Range("B" & i).Value Then
Cnt = Cnt + 1 '一致した回数をカウント
【処理1】
ElseIf Range("L6").Value = Range("b67").Value Then
【処理2】
End If
Next
If Cnt = 0 Then
MsgBox "商品はありません"
End If
こんなふうになります。
しかし、分らないのは
> ElseIf Range("L6").Value = Range("b67").Value Then
> 【処理2】
>
のブロックです。このブロックではセルアドレスは固定になってます。
そうすると、 iが 17 To 66 まで変わるたびに(処理(1))を通らなかったら
毎回
> ElseIf Range("L6").Value = Range("b67").Value Then
と固定セルの値を比較していますが、
これは どういうことでしょう。
For〜Next に入る前とかで、一度だけやっておけば済むような感じですが、
たぶんそういうことではないのでしょう。
その辺のところを 日本語とか 上に書いたような疑似コードで説明してみて
ください。
|
|