- ベストアンサー
エクセルVBAで分岐がうまくできません
- エクセルVBAでA,B,Cの仕入れパターンに基づいて適正な仕入量を算出する方法を教えてください。
- エクセルVBAのコードで、A,B,Cのりんごとみかんの仕入れパターンに基づいて適正な仕入量を算出したいですが、正しい値が算出されません。
- エクセルVBAでA,B,Cの仕入れパターンに基づいて適正な仕入量を算出するためのコードを教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 #7748670の質問は適当に締めたほうがよいかもしれませんね。 前回の質問との違いということで、見比べてみると、 >みかんまたはりんごの片方が500以下になったらみかんとりんごを1000個になるように仕入 という項目で、マクロの内容をみて、「みかんとりんごを、それぞれ1000 個……」というように解釈しました。もちろん、ワークシートの数式でできますし、その方がよいかもしれません。マクロでは、通常では「戻し」が利きません。 '// Sub PurchasePlanning() Dim i As Long Dim n As String With Worksheets("Sheet1") '2 は、データ行の始まり Application.ScreenUpdating = False For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row n = .Cells(i, 1).Value If n <> "" Then Select Case n Case "A" 'A リンゴは、500以下になったら1000個 'A みかんは、500以下になったら1000個 ' みかんまたはりんごの片方が500以下になったらみかんとりんごを1000個 If .Cells(i, 2).Value < 501 Or .Cells(i, 3).Value < 501 Then .Cells(i, 4).Value = 1000 - .Cells(i, 2).Value .Cells(i, 5).Value = 1000 - .Cells(i, 3).Value End If Case "B" 'B リンゴは、400以下になったら2000個 'B みかんは、400以下になったら2000個 ' みかんまたはりんごの片方が400以下になったらみかんとりんごを2000個 If .Cells(i, 2).Value < 401 Or .Cells(i, 3).Value < 401 Then .Cells(i, 4).Value = 2000 - .Cells(i, 2).Value .Cells(i, 5).Value = 2000 - .Cells(i, 3).Value End If Case "C" 'C リンゴは、300以下になったら3000個 'C みかんは、300以下になったら3000個 If .Cells(i, 2).Value < 301 Or .Cells(i, 3).Value < 301 Then .Cells(i, 4).Value = 3000 - .Cells(i, 2).Value .Cells(i, 5).Value = 3000 - .Cells(i, 3).Value End If End Select End If Next i Application.ScreenUpdating = True End With End Sub
その他の回答 (2)
- jacob-wk9
- ベストアンサー率36% (85/231)
プログラムの問題でしたら、Loopネスティングの中にi=2が2箇所出て来ていますので、これを外す必要があります。 セルB8のりんごの在庫はまだ、発注点に達していませんので、リンゴ仕入れのところはゼロにしなければいけません。 Cells(i, 2) > 400ならば発注数0 Cells(i, 3) > 400ならば発注数0を代入する必要があります。 ところで、この程度であれば、VBAで処理するまでもなく、式で表現できます。 マクロ付きEXCELファイルを配布し、受け取るときにセキュリティ警告が出る事から、配布の予定があれば なるべくVBAを使うのは最後の手段としたほうが良いように思います。
お礼
参考になりました。 ありがとうございます。
- mu2011
- ベストアンサー率38% (1910/4994)
変数iが「A・B」の条件に一致した場合、常に初期値の「2」に戻されているのが原因ではないでしょうか。 又、Cellsプロパティでシートオブジェクトを省略、指定しているコードが紛らわしいので揃えませんか。
お礼
記述についての指摘は、注意していこう思います。 ありがとうございました。
お礼
大変助かりました。 VBA・数式のどちらを使うかの切り分けもまだできませんが、参考にさせてもらいます。 ありがとうございました。