• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAで、分岐がうまくできません。)

エクセルVBAで分岐がうまくできません

このQ&Aのポイント
  • エクセルVBAでA,B,Cの仕入れパターンに基づいて適正な仕入量を算出する方法を教えてください。
  • エクセルVBAのコードで、A,B,Cのりんごとみかんの仕入れパターンに基づいて適正な仕入量を算出したいですが、正しい値が算出されません。
  • エクセルVBAでA,B,Cの仕入れパターンに基づいて適正な仕入量を算出するためのコードを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

bike5050
質問者

お礼

大変助かりました。 VBA・数式のどちらを使うかの切り分けもまだできませんが、参考にさせてもらいます。 ありがとうございました。

その他の回答 (2)

  • jacob-wk9
  • ベストアンサー率36% (85/231)
回答No.2

プログラムの問題でしたら、Loopネスティングの中にi=2が2箇所出て来ていますので、これを外す必要があります。 セルB8のりんごの在庫はまだ、発注点に達していませんので、リンゴ仕入れのところはゼロにしなければいけません。 Cells(i, 2) > 400ならば発注数0 Cells(i, 3) > 400ならば発注数0を代入する必要があります。 ところで、この程度であれば、VBAで処理するまでもなく、式で表現できます。 マクロ付きEXCELファイルを配布し、受け取るときにセキュリティ警告が出る事から、配布の予定があれば なるべくVBAを使うのは最後の手段としたほうが良いように思います。

bike5050
質問者

お礼

参考になりました。 ありがとうございます。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

変数iが「A・B」の条件に一致した場合、常に初期値の「2」に戻されているのが原因ではないでしょうか。 又、Cellsプロパティでシートオブジェクトを省略、指定しているコードが紛らわしいので揃えませんか。

bike5050
質問者

お礼

記述についての指摘は、注意していこう思います。 ありがとうございました。

関連するQ&A