実現したいこと
このプログラムは積み上げ棒グラフを作成してもらう内容。「データの範囲を指定 (A1からE2)」の部分でアラーが発生しており、最後の「グラフの作成」までは進めていない。関数を使って表を転置させて、利用したい。
発生している問題・分からないこと
転置前表範囲と転置先シートを入れることで、指定したシート(転置先シート)に転置後の表が入る関数を作成した。
これを使おうとすると「コンパイルエラー ByRef引数の型が一致しません。」が発生する。
エラーメッセージ
error
1コンパイルエラー ByRef引数の型が一致しません。
該当のソースコード
VBA
1Sub CreateStackedBarChart() 2 Dim wsResult As Worksheet, wsGraph As Worksheet 3 Dim rngData As Range, rngIncome As Range, rngExpenses As Range 4 Dim i As Integer, j As Integer 5 Dim personnelCosts As Double, fixedCosts As Double 6 Dim lastRow As Integer 7 Dim productNames As Variant, margins() As Double 8 9 ' 商品名とマージンの初期化 10 productNames = Array("A", "B", "C") ' ここに商品名を列挙 11 12 ReDim margins(LBound(productNames) To UBound(productNames)) 13 14 ' マージンの入力 15 For i = LBound(productNames) To UBound(productNames) 16 margins(i) = InputBox(productNames(i) & " のマージンを入力してください", "マージン入力") 17 Next i 18 19 ' シートの設定 20 Set wsResult = ThisWorkbook.Sheets("結果") 21 Set wsGraph = ThisWorkbook.Sheets("グラフ") 22 Set wsTrsps = ThisWorkbook.Sheets("範囲") 23 24 ' 最終行を取得 25 lastRow = wsResult.Cells(wsResult.Rows.Count, "A").End(xlUp).Row 26 27 ' データ範囲を設定 28 Set rngData = wsResult.Range("B2:D" & lastRow) 29 30 ' 人件費、固定費を入力 31 personnelCosts = InputBox("人件費を入力してください", "人件費入力") 32 fixedCosts = InputBox("固定費を入力してください", "固定費入力") 33 34 ' 収入の計算 35 a = 1 36 For i = 2 To lastRow 37 For j = LBound(productNames) To UBound(productNames) 38 If wsResult.Cells(i, 2).Value = productNames(j) Then 39 a = a + 1 40 wsResult.Cells(a, 6).Value = CalculateIncome(wsResult.Cells(i, 4).Value, margins(j)) 41 42 Exit For 43 End If 44 Next j 45 Next i 46 47 '支出の計算 48 wsResult.Cells(a + 1, 7).Value = personnelCosts 49 wsResult.Cells(a + 2, 7).Value = fixedCosts 50 51 ' グラフ範囲を設定 52 Dim rngData2 As Range 53 Set rngData2 = wsResult.Range("F2:G" & a + 2) 54 Dim rngData3 As Range 55 Set rngData3 = TransposeData(rngData2, wsTrsps) 56 57 ' データの範囲を指定 (A1からE2) 58 Dim rngData4 As Range 59 Set rngData4 = ThisWorkbook.Sheets(wsTrsps).Range("A1:E2") 60 61 ' グラフの作成 62 wsGraph.Shapes.AddChart2(251, xlColumnStacked).Select 63 ActiveChart.SetSourceData Source:=rngData4 64 ActiveChart.ChartTitle.Text = "積み上げ棒グラフ" 65End Sub 66 67Function TransposeData(rng As Range, targetWorksheet As Worksheet) As Range 68 Dim newRng As Range 69 70 ' データを転置してコピー 71 rng.Copy 72 targetWorksheet.Cells(1, 1).PasteSpecial Transpose:=True 73 74 ' 転置されたデータの範囲を設定 75 Set newRng = targetWorksheet.Range("A1").CurrentRegion 76 77 ' 新しいワークシートの範囲を返す 78 Set TransposeData = newRng 79End Function 80 81 82Function CalculateIncome(salesVolume As Double, productMargin As Double) As Double 83 ' 収入の計算(商品×マージン) 84 CalculateIncome = salesVolume * productMargin 85End Function
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
GPT4に聞いた。
ワークシートを定義した。
補足
助けてください
どの行にエラーが出ているかは確認してみましたか?

回答3件
あなたの回答
tips
プレビュー