プロが教えるわが家の防犯対策術!

sheet1のユーザーフォームにコンボボックス(rowsourseCH3:CH16)があります。これを、コンボボックスその隣にスピンボタンを置きCH3〜16までコンボボックス、スピンボタンどちらでも変更(選択したセルから上下)できるのでしょうか?
スピンボタンにコードを入力したのですが、CH3の値から動きませんでした。
よろしくお願いします。

質問者からの補足コメント

  • 回答ありがとうございます。
    知識が無くコードもどう打ち込んだらいいかわかりません。色々しらべましたがなかなかうまくいきませんでした。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/05/26 16:58
  • 御回答ありがとうございます。
    知識が少ない為、思いついたのはcomboboxとspinbottonの二通りでどうにかならないかと思いました。
    comboboxでは無く、textboxなら値を自由自在に操る事は可能なのでしょうが、なぜなら変更したい中身は、文字列(数字+アルファベットの規則正しい順番)なので値を加減するのは不可能なのではと思い、このような質問を挙げさせてもらいました。勉強になります。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/05/29 05:46
  • 御回答ありがとうございます。示してくださったコードで出来ております。
    言葉足らずとお礼を申し上げる事が無くまた知識不足で、ご不快にさせてしまい誠に申し訳ありません。
    私の知識の範囲と手段で述べますと、プロパティでcomboboxからrowsourseを指示しないと表記できません。コードを細かく指示できる知識がほとんどできません。
    また文字列は、22Pから始まり2ずつ増え48Pまであります。
    何度もお手数おかけし大変申し訳ありません。

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/05/30 05:35

A 回答 (4件)

こんにちは。



試しに、以下のようなコードを書いてみました。
シートのセルの参照はないようにしました。
22P ~2つずと増え48Pまでだとします。
今は、デフォルト状態のままです。

'//
Private Sub SpinButton1_Change()
With SpinButton1
 .SmallChange = 2
 .Max = 48
 .Min = 22
End With
ComboBox1.Value = SpinButton1.Value & "P"
End Sub
Private Sub UserForm_Initialize()
Dim j As Long
Dim i As Long
Dim Ar()
ReDim Ar((48 - 22) \ 2) '配列数式
For i = 22 To 48 Step 2
 Ar(j) = i & "P"
 j = j + 1
Next
ComboBox1.RowSource = ""
ComboBox1.List = Ar
End Sub
「VBA コンボボックスの値をスピンボタン」の回答画像4
    • good
    • 0
この回答へのお礼

こんばんは。
お手数おかけしまして、大変ご迷惑おかけした上、素晴らしいご回答をいただきとてもとても感謝しております。
思っていた通りに動作できました。
ありがとうございました。

お礼日時:2018/05/31 22:33

「文字列(数字+アルファベットの規則正しい順番)なので値を加減するのは不可能なのではと思い」


具体的にはどういうことなのでしょうか?

「スピンボタンを置きCH3〜16までコンボボックス、スピンボタンどちらでも変更(選択したセルから上下)できるのでしょうか?」
私の書いたコードで出来ていないのですか? 3行目~16行目までですから、仮に戻ったとしても、スピンボタンはMinを-2までに設定するしかありません。質問どおりのはずです。

しかし、こちらの示した案が、ダメ出しされたのに、その具体例がが示されていないのでは、答えようがありません。

(A)
①  ②
1A  3A
2A  4A
3A  5A
4A  6A

(B)
①  ② 
   1A 
   2A 
3A  3A 
4A  4A 
5A  5A
6A  6A

ということでしょうか。
そもそも、ComboBox で、RowSource を決めてあるのでは、ワークシートのセルに存在するものしか、参照することはできません。①も②も、セル上にあるものだけです。

値自体を上下する--セル上には存在しない値なら、最初からコードの書き方が違います。どういうようにしたいのか、示してくださらないと、こちらでは分かりません。
ただ、現実的には、スピンボタンでその都度値を変えていくのなら、ComboBox で表示の値を変えることは、MultiSelect でない限りは、あまり意味がないと思います。スピンボタンで、もしくは、スピンボタンにラベル表示で処理できるはずです。
この回答への補足あり
    • good
    • 0

ずいぶん、難しい使い方をするのですね。


ベテランの人でも、そんな難しい方法は思いつかないです。
なぜなら、ComboBox の値は、UserForm起動後は、中身そのものは変化させないからです。

お話をまとめると
-------------------
第一前提
sheet1のユーザーフォームにコンボボックス(rowsourseCH3:CH16)
第二前提
VBA コンボボックスの値をスピンボタンで変更する
--------------------
まず、前提の0段階で、
Private Sub UserForm_Initialize()
 Worksheets("Sheet1").Select
End Sub
としているとします。
----------------------
'//
Private Sub SpinButton1_Change()
Dim i As Long
  i = SpinButton1.Value
  ComboBox1.RowSource = Range("CH3:CH16").Offset(i).Address
End Sub
'//


'スピンボタンは、この場合は、基本的には、マイナス値を取らないとした場合、
'このようにすれば、値を替えられます。

>CH3の値から動きませんでした。
一般的にはそのとおりです。つまり、スピンボタンは、Min の値が、0からですから。この中身自体の値を変えようとすれば、第一前提の部分がちがっています。RowSource で指定することが間違いだからです。もう少し、考えをまとめていただけたら、また違うアイデアが生まれてくるかもしれません。
この回答への補足あり
    • good
    • 0

裏で値を変えただけじゃ見た目は変わらない



リフレッシュしてみたら?
この回答への補足あり
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!