実現したいこと
*j1セルにh4:h122のなかから値を選択するコンボボックスを作りたい
のですが、
set comboboxで実行時エラー1004になります。
コードは
Set comboBox = Sheet1.OLEObjects.Add(ClassType:="Forms.ComboBox", Left:=Range("J1").Left, Top:=Range("J1").Top, Width:=100, Height:=20).Object
参照設定でマイクロソフトフォームズも追加しましたし、文法の間違えもGeminiで確認してみましたが、指摘されることは特段ありませんでした。
VBAは今回が初めてなので、あまりかってがわかりませんが、ご教授お願いします。
*実現したいことは
j1セルにコンボボックスを作成し、そのコンボボックスでh4:h122の範囲を選択し、その選択したセル番地をk3セルに価参照形式で書き込みたいのです。
*コード全体はこんな感じです
標準モジュール
'マクロ実行の起点(コンボボックス作成と初期化) Sub ExecuteMacro() 'コンボボックスの作成と初期化 Call CreateAndInitializeComboBox End Sub 'コンボボックスの作成と初期化 Sub CreateAndInitializeComboBox() Dim comboBox As Object 'Sheet1をアクティブにする Sheet1.Activate 'Sheet1の保護を解除(パスワードが設定されている場合は、Password:="パスワード"を追加) Sheet1.Unprotect '既存のコンボボックスを削除 For Each obj In Sheet1.OLEObjects If TypeOf obj.Object Is MSForms.comboBox Then obj.Delete End If Next obj 'コンボボックスの作成 Set comboBox = Sheet1.OLEObjects.Add(ClassType:="Forms.ComboBox", Left:=Range("J1").Left, Top:=Range("J1").Top, Width:=100, Height:=20).Object 'コンボボックスの初期化 Call InitializeComboBox(comboBox) End Sub 'コンボボックスの初期化と更新 Sub InitializeComboBox(comboBox As Object) Dim i As Long Dim month As Long Dim year As Long 'コンボボックスのクリア comboBox.Clear 'コンボボックスに選択肢を追加 For i = 4 To 122 month = i - 3 year = Int((month - 1) / 12) month = (month - 1) Mod 12 + 1 If year = 0 Then comboBox.AddItem month & "カ月目" Else comboBox.AddItem year & "年" & month & "カ月目" End If Next i 'コンボボックスの初期値を設定(1カ月目) comboBox.Value = "1カ月目" End Sub 'セルの値を更新 Sub UpdateCellValue(comboBox As Object) Dim selectedIndex As Long Dim selectedCell As String Dim formulaCell As String Dim formulaValue As String Dim divisor As Double Dim result As Double '選択されたコンボボックスのインデックスを取得 selectedIndex = comboBox.ListIndex '選択されたセル番地を取得 selectedCell = "H" & (selectedIndex + 4) '選択されたセル番地をK3セルに書き込む Sheet1.Range("K3").Value = "=" & selectedCell '選択された行のG列の式を取得 formulaCell = "G" & (selectedIndex + 4) formulaValue = Sheet1.Range(formulaCell).formula '式の中から10000, 11000, 12000, 13000, 14000のいずれかを探す divisor = GetDivisor(formulaValue) '除算結果をL3セルに表示 If divisor <> 0 Then result = Evaluate(selectedCell) / divisor Sheet1.Range("L3").Value = result Else Sheet1.Range("L3").Value = "" End If 'M3:Q3セルの式を更新 UpdateFormulaRange result, divisor End Sub '式の中から除数(10000, 11000, 12000, 13000, 14000)を探す Function GetDivisor(formula As String) As Double Dim divisors As Variant Dim i As Long divisors = Array(10000, 11000, 12000, 13000, 14000) For i = 0 To UBound(divisors) If InStr(1, formula, divisors(i)) > 0 Then GetDivisor = divisors(i) Exit Function End If Next i End Function 'M3:Q3セルの式を更新 Sub UpdateFormulaRange(result As Double, divisor As Double) Dim cell As Range For Each cell In Sheet1.Range("M3:Q3") cell.formula = "=" & result & "*" & (500 - (cell.Column - 13) * 100) Next cell '除数に応じた係数をM3セルに適用 If divisor = 14000 Then Sheet1.Range("M3").formula = "=" & result & "*" & 500 & "*0.79685" ElseIf divisor = 13000 Then Sheet1.Range("M3").formula = "=" & result & "*" & 500 & "*0.79685" Sheet1.Range("N3").formula = "=" & result & "*" & 400 & "*0.79685" ElseIf divisor = 12000 Then Sheet1.Range("M3").formula = "=" & result & "*" & 500 & "*0.79685" Sheet1.Range("N3").formula = "=" & result & "*" & 400 & "*0.79685" Sheet1.Range("O3").formula = "=" & result & "*" & 300 & "*0.79685" ElseIf divisor = 11000 Then Sheet1.Range("P3").formula = "=" & result & "*" & 200 & "*0.79685" ElseIf divisor = 10000 Then Sheet1.Range("Q3").formula = "=" & result & "*" & 100 & "*0.79685" End If End Sub
シートモジュール
'コンボボックスの値が変更されたときの処理 Private Sub ComboBox1_Change() Call UpdateCellValue(ComboBox1) End Sub
*これから少しずつ勉強しようと思うので
是非実現にご尽力いただけますようお願いします。
発生している問題・分からないこと
excel VBAでコンボボックスを作成する方法がうまくいかない
該当のソースコード
特になし ``` ### 試したこと・調べたこと - [x] teratailやGoogle等で検索した - [x] ソースコードを自分なりに変更した - [ ] 知人に聞いた - [ ] その他 ##### 上記の詳細・結果 Geminiにも何度も質問しましたが、解決できずGoogleで検索もしましたが、同じようなことを解説してくれているページを見つけられませんでした。 ### 補足 特になし

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/02/10 08:31
2025/02/11 03:47