前提・実現したいこと
ここに質問の内容を詳しく書いてください。
vbaで作成した以下のようなツールをブラウザ上(WEBページ上)で動作させたいです。 [イメージ](http://pawapro-simu.com/)
発生している問題・エラーメッセージ
二段階リストの作成はこの記事を参考に作ってみたのですが、データベースの検索や、条件を満たしたときに文字の表示を切り替える方法などが分からず手づまりになってしまいました。 [二段階](https://allabout.co.jp/gm/gc/23955/) vbaも独学でおぼえたのですが、見本をまねて覚えていったのでサンプルを見つけられずに苦戦している状況です。
該当のソースコード
VBA
1 2Private Sub UserForm_Initialize() 3Dim i As Long 4 5 'リストの設定 6 For i = 1 To 20 Step 5 7 Controls("combobox" & i).List = Array("A", "B", "C") 8 Next i 9 10 For i = 3 To 20 Step 5 11 Controls("combobox" & i).List = Array("総合", "単独") 12 Next i 13 14 For i = 4 To 20 Step 5 15 Controls("combobox" & i).List = Array(0, 1, 2, 3, 4, 5) 16 Next i 17 18 For i = 5 To 20 Step 5 19 Controls("combobox" & i).List = Array(0, 1, 2, 3, 4, 5) 20 Next i 21 22End Sub 23 24'検索1のTYPEに応じて名前のリストを変更。 25'TYPEがAもしくはCの時は単独に設定し変更を禁止する。 26Private Sub combobox1_Change() 27Dim n As Long 28Dim List As Variant 29Dim num As Long 30Dim CB1 As Object, CB2 As Object, CB3 As Object, CB4 As Object, CB5 As Object 31 32num = 1 33Set CB1 = Controls("ComboBox" & num) 34Set CB2 = Controls("ComboBox" & num + 1) 35Set CB3 = Controls("ComboBox" & num + 2) 36Set CB4 = Controls("ComboBox" & num + 3) 37Set CB5 = Controls("ComboBox" & num + 4) 38 39CB2.Value = "" 40CB3.Value = "" 41CB4.Value = "" 42CB5.Value = "" 43 44 With Worksheets("ALLLIST") 45 Select Case CB1.Value 46 47 Case "A" 48 n = .Cells(Rows.Count, "A").End(xlUp).Row 49 List = .Range(.Cells(2, "A"), .Cells(n, "A")).Value 50 CB2.List = List 51 CB3.Value = "単独" 52 CB3.Enabled = False 53 54 55 Case "B" 56 n = .Cells(Rows.Count, "B").End(xlUp).Row 57 List = .Range(.Cells(2, "B"), .Cells(n, "B")).Value 58 CB2.List = List 59 CB3.Enabled = True 60 61 Case "C" 62 n = .Cells(Rows.Count, "C").End(xlUp).Row 63 List = .Range(.Cells(2, "C"), .Cells(n, "C")).Value 64 CB2.List = List 65 CB3.Value = "単独" 66 CB3.Enabled = False 67 68 End Select 69 70 71 End With 72 73End Sub 74 75Private Sub ComboBox3_Change() 76Dim buf As Variant 77Dim num As Long 78Dim CB3 As Object, CB5 As Object 79 80num = 1 81Set CB3 = Controls("combobox" & num + 2) 82Set CB5 = Controls("combobox" & num + 4) 83 84'総合、単独で単独が選ばれているときは 85'下位補正のコンボボックスを表示しない。 86buf = CB3.List 87 88 Select Case CB3.Value 89 90 Case buf(1, 0) 91 CB5.Value = "" 92 CB5.Visible = False 93 94 Case Else 95 CB5.Visible = True 96 97 End Select 98End Sub 99 100Private Sub CommandButton1_Click() 101Dim i As Long, j As Long, k As Long 102Dim n As Long 103Dim num As Long 104Dim CB1 As Object, CB2 As Object, CB3 As Object, CB4 As Object, CB5 As Object 105Dim LB1 As Object 106Dim WS As Worksheet 107'行の検索範囲 108Dim Rbuf As Variant 109'列の検索範囲 110Dim Cbuf As Variant 111 112num = 1 113Set CB1 = Controls("combobox" & num) 114Set CB2 = Controls("combobox" & num + 1) 115Set CB3 = Controls("combobox" & num + 2) 116Set CB4 = Controls("combobox" & num + 3) 117Set CB5 = Controls("combobox" & num + 4) 118Set LB1 = Controls("label" & num) 119 120 Select Case CB3.Value 121 122 Case "単独" 123 124 For i = num To num + 3 125 126 If Controls("combobox" & i).Value = "" Then 127 Exit Sub 128 End If 129 130 Next i 131 132 Set WS = Worksheets("LIST") 133 134 With WS 135 n = .Cells(Rows.Count, "A").End(xlUp).Row 136 Cbuf = .Range(.Cells(1, "A"), .Cells(n, "A")) 137 n = .Cells(1, Columns.Count).End(xlToLeft).Column 138 Rbuf = .Range(.Cells(1, "A"), .Cells(1, n)) 139 140 '名前と補正で検索する。 141 For j = 2 To UBound(Cbuf) 142 143 If Cbuf(j, 1) = CB2.Value Then 144 145 For k = 2 To n 146 147 '該当するものを評価ラベルに入力する。 148 '上位補正の数値で検索する。 149 If Val(Rbuf(1, k)) = Val(CB4.Value) Then 150 LB1.Caption = .Cells(j, k).Value 151 End If 152 153 Next k 154 155 End If 156 157 Next j 158 159 End With 160 161 Case "総合" 162 163 For i = num To num + 4 164 165 If Controls("combobox" & i).Value = "" Then 166 Exit Sub 167 End If 168 169 Next i 170 'LIST & 上位補正の数値のシートを指定 171 Set WS = Worksheets("LIST" & CB4) 172 173 With WS 174 n = .Cells(Rows.Count, "A").End(xlUp).Row 175 Cbuf = .Range(.Cells(1, "A"), .Cells(n, "A")) 176 n = .Cells(1, Columns.Count).End(xlToLeft).Column 177 Rbuf = .Range(.Cells(1, "A"), .Cells(1, n)) 178 179 '名前と補正で検索する。 180 For j = 2 To UBound(Cbuf) 181 182 If Cbuf(j, 1) = CB2.Value Then 183 184 For k = 2 To n 185 186 '該当するものを評価ラベルに入力する。 187 '下位補正の数値で検索する。 188 If Val(Rbuf(1, k)) = Val(CB5.Value) Then 189 LB1.Caption = .Cells(j, k).Value 190 End If 191 192 Next k 193 194 End If 195 196 Next j 197 198 End With 199 200 End Select 201 202End Sub 203 204Private Sub CommandButton5_Click() 205Dim i As Long 206Dim n As Long 207Dim cnt As Long 208Dim rng As Range 209Dim buf As Variant 210Dim WS As Worksheet 211Set WS = Worksheets("RANK") 212cnt = 1 213 With WS 214 215 .Cells.Clear 216 217 'RANK関数を使うためシートに評価を転記する。 218 For i = 1 To 8 Step 2 219 220 If Controls("label" & i).Caption = "" Then 221 .Cells(cnt, "A").Value = 0 222 Else 223 .Cells(cnt, "A").Value = Controls("label" & i).Caption 224 End If 225 226 cnt = cnt + 1 227 Next i 228 229 n = .Cells(Rows.Count, "A").End(xlUp).Row 230 Set rng = .Range(.Cells(1, "A"), .Cells(n, "A")) 231 cnt = 2 232 233 'RANK関数の結果を順位ラベルに入力する。 234 For Each buf In rng 235 Controls("label" & cnt).Caption = Application.WorksheetFunction.Rank(buf.Value, rng) 236 cnt = cnt + 2 237 Next buf 238 239 End With 240 241End Sub 242 243Private Sub CommandButton6_Click() 244Dim i As Long 245 246 '評価ランクと順位の値をリセットする。 247 For i = 1 To 8 248 Controls("label" & i).Caption = "" 249 Next i 250 251End Sub 252
繰り返しになるコードは割愛しています。
左上から右側に向けて
combobox1~5
Label1211
commandbutton1
の繰り返しです
検索2
combobox6
label3~4
commundbutton2
実際の画面
あなたの回答
tips
プレビュー