実現したいこと
商品数量×マージンの計算を行い収支の比較を行いたいです。
発生している問題・分からないこと
ステップ実行を行い、11行目でエラーが発生しています。
エラーメッセージ
error
1コンパイルエラー:配列がありません。
該当のソースコード
Sub CreateStackedBarChart() Dim wsResult As Worksheet, wsGraph As Worksheet Dim rngData As Range, rngIncome As Range, rngExpenses As Range Dim i As Integer, j As Integer Dim personnelCosts As Double, fixedCosts As Double Dim lastRow As Integer Dim productNames As Variant, margins As Double ' 商品名とマージンの初期化 productNames = Array("A", "B", "C") ' ここに商品名を列挙 ReDim margins(LBound(productNames) To UBound(productNames)) ' マージンの入力 For i = LBound(productNames) To UBound(productNames) margins(i) = InputBox(productNames(i) & " のマージンを入力してください", "マージン入力") Next i ' シートの設定 Set wsResult = ThisWorkbook.Sheets("結果") Set wsGraph = ThisWorkbook.Sheets("グラフ") ' 最終行を取得 lastRow = wsResult.Cells(wsResult.Rows.Count, "A").End(xlUp).Row ' データ範囲を設定 Set rngData = wsResult.Range("B2:D" & lastRow) ' 人件費、固定費を入力 personnelCosts = InputBox("人件費を入力してください", "人件費入力") fixedCosts = InputBox("固定費を入力してください", "固定費入力") ' 収入と支出の計算 For i = 2 To lastRow For j = LBound(productNames) To UBound(productNames) If wsResult.Cells(i, 2).Value = productNames(j) Then wsResult.Cells(i, 6).Value = CalculateIncome(wsResult.Cells(i, 4).Value, margins(j)) Exit For End If Next j wsResult.Cells(i, 7).Value = personnelCosts + fixedCosts Next i ' グラフ範囲を設定 Set rngIncome = wsResult.Range("F2:F" & lastRow) Set rngExpenses = wsResult.Range("G2:G" & lastRow) ' グラフの作成 wsGraph.Shapes.AddChart2(297, xlColumnStacked).Select With ActiveChart .SetSourceData Source:=Union(rngIncome, rngExpenses) .FullSeriesCollection(1).Name = "収入" .FullSeriesCollection(2).Name = "支出" .ChartTitle.Text = "収入と支出の積み上げ棒グラフ" End With End Sub Function CalculateIncome(salesVolume As Double, productMargin As Double) As Double ' 収入の計算(商品×マージン) CalculateIncome = salesVolume * productMargin End Function
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
定義をvariantやdoubleなどの変更しても結果は変わらず。
productNamesが別の所で使われていると思い、名前を変更しても変わらず。
ChatGPTにも聞いたがわからず。(GPT4)
補足
初心者です。初歩的な質問かもしれませんがよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー