• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAについて、ご教授お願いします。)

エクセルVBAで商品の単価変更を行う方法

このQ&Aのポイント
  • エクセルVBAを使用して商品の単価を変更する方法について教えてください。
  • エクセルに作成した表には商品名、商品区分、単価のデータがあります。ユーザーフォームを表示し、商品区分と単価上昇率を入力し、ボタンをクリックすると、対象商品の単価を変更する処理を行いたいです。
  • 処理の流れは以下の通りです。 1. ユーザーフォームを表示する 2. 商品区分と単価上昇率を入力する 3. ボタンをクリックすると、対象商品の単価を変更する 4. 変更した明細の件数をメッセージボックスで表示する

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

  • ベストアンサー
  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

要するに、ある商品区分の行だけ単価上昇率を上乗せした単価をF列に書き出したいのですね。 単価上昇率と単位上昇率が混在しているので、趣旨があいまいになっています。 とりあえず、影さんのコードをそれらしく手直ししてみると、以下のようになります。 これを参考にデバッグしてみましょう。 ' 単価上昇率テキストボックスが書き換わった際にチェックするようにする。もっと細かいチェックも個々に書き込む。 Private Sub 単価上昇率_change() If Not IsNumeric(Value(単価変更画面.単価上昇率.Text)) Then MsgBox ("数値を入力して下さい。") 単価変更画面.単価上昇率.SetFocus End If End Sub ' 単価上昇率を数値化してから計算式に入れる。 Private Sub 単価変更_Click() Dim i As Long Dim cut As Integer Dim 単価上昇率 As String Dim 商品区分 As String i = 3 cut = 0 Do While Cells(i, 4) <> "" If Cells(i, 4) = value(単価変更画面.商品区分.Text) Then Cells(i, 6) = Cells(i, 4) * (1 + value(単価変更画面.単価上昇率.Text) / 100) cut = cut + 1 End If i = i + 1 Loop If cut = 0 Then MsgBox ("該当する商品は存在 しませんでした。 ") 単価変更画面.商品区分.SetFocus Else MsgBox (cut & "件の明細を変更しました。") End If End Sub

kage1642
質問者

お礼

回答ありがとうございました。とてもわかりやすかったです。 正常に起動しました。

その他の回答 (1)

  • CC_T
  • ベストアンサー率47% (1038/2202)
回答No.2

要望の回答になってませんが、すいません。 とりあえず、Private Sub 単価変更_Click() で、i = Cells(i, 4) がありますが、 ここでiが初見、ということでiの初期値ゼロでCells(0, 4)指定になってエラーになるような・・・。 あとは、商品区分や単価上昇率は表では数値のようですがsub中では文字型のStringで宣言ているのに、 商品区分をわわざIsNumericで数値かチェックかけたり、掛け算で使ったりしてません?とか 単価変更画面.単価上昇率.Text など文字型なのに掛け算に使ってるとか(Value、では?)、 とまぁそのへんが原因で何を入れても該当なしで終了メッセージ出すか、数値が変わらないかってところじゃないですか? そういうのはデバッグのウォッチ式で監視したり、デバッグ用に所どころにmsgboxで表示させてみたりして、型が適切かチェックをしていけばつぶせるかと。

kage1642
質問者

お礼

ありがとうございます。大変参考になりました。 またデバックについて教えて頂きありがとうございます。 試してみます。