ExcelVBAで教えて下さい。
ユーザーフォームを作成しているのですがその中の機能の一部で、「コンボボックスを選択した内容に応じてラベルに表示させる」ということをしたいのですがうまくいきません。
コンボボックスにはSheet2の内容を表示するようにさせています。
Private Sub ComboBox_DropButtonClick()
Dim i As Integer
Dim LastRow As Integer
With ComboBox
LastRow = Cells(Row.Count, 1).End(xlUp).Row
For i = 3 To LastRow
.AddItem Worksheets("Sheet2").Cells(i, 1).Value
Next i
End With
End Sub
Sheet2の1列目には「2002年_H14」「2003年_H15」という書式で「2012年_H24」まで入力されています。
For i = 3 To LastRow
としたのは、コンボボックスから選択した結果をラベルに表示させるとき、選択した年の前後2年を合わせた合計五年間を「2002~2006年」と表示したいためです。
<例>
・コンボボックスで「2004年_H16」選択
↓
・ラベルに「2002~2006年」と表示
コンボボックスのChangeコードはコンボボックスに入っている値が数字だったのみしか書けませんでした。
Private Sub ComboBox_Change()
Dim i As Integer
With ComboBox
If .ListIndex = 0 Then
i = .List(ListIndex, 0)
Label.Caption = (i - 2) & "~" & (i + 2) & "年"
End If
End With
End Sub
もしくは
Label.Caption = ComboBox.Value - 2 & "~" & ComboBox + 2 & "年"
これだと「2002年_H14」というようにコンボボックスに入っていた場合はえらいになってしまい、どうにもなりません。うまくいったとしても「_H14」の取り除き方が分かりません。
実際に実現している画面を見せてもらったのですがコードまでは見てなく、仕組みが分からないのと、作成者不明という感じのものなので聞くに聞けずここに頼った次第です。
ご存じの方いらっしゃいましたらお知恵を拝借したく、何卒よろしくお願い致します。
単純に考えれば次のようになると思いますが、どうでしょうか。
Private Sub ComboBox_Change()
With ComboBox
If .ListIndex >= 0 Then
Label.Caption = Left(Worksheets("Sheet2").Cells(.ListIndex + 1, 1), 4) & "~" & Left(Worksheets("Sheet2").Cells(.ListIndex + 5, 1), 5)
End If
End With
End Sub
お礼
ありがとうございました。教えていただければ「なるほど」なのですが、気づかないものですね。