Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Microsoft 365)
VBAフォームのコンボリスト連動
投稿日時: 22/11/25 15:44:42
投稿者: hiroemon_

教えてください。
Excelで直接手動でやってましたが、VBAで入力フォームを作成したいです。
いろいろ調べましたが、初心者過ぎてまったくわからないです。。。
 
ComboBox1    山田
        竹田
        木村
 
ComboBox2     A
        B
        C
 
ComboBox3    AA
        AB
        AC
        BA
        BB
        BC
 
ComboBox4    AAA
        ABA
        ACA
        BAA
        BBA
        BCA
        CAA
        CBA
        CCA
 
となっているとして、ComboBox1で「山田」を選択したら、
ComboBox2、3、4ともに頭がAのものだけを出したいです
Excelの入力規制INDIRECTをフォームでやりたいです。
 
そしてボタンを押したら、ExcelのB列C列D例E列に入力し、
ボタンを押すごとに行を1つづつずらしたいです。
 
ご教示いただけますでしょうか。
よろしくお願いします。

回答
投稿日時: 22/11/25 15:57:00
投稿者: WinArrow
投稿者のウェブサイトに移動

>Excelの入力規制INDIRECTをフォームでやりたいです。
 
入力規制INDIRECTの仕組みを理解していますか?
ComboBox2〜4に予めドロップダウンをセットしておいたのでは、
 
入力規制INDIRECTと同じ挙動にはなりません。

回答
投稿日時: 22/11/25 20:10:43
投稿者: simple

前の質問は解決されたようでよかったですね。
 
>いまはMsgBoxで結果0件になってしまいます。。。
という疑問を提示されていたわけですから、
実は、別のシートを見ていたからでした、
とかその原因などを明確にされるとよかったのではないですか?
原因となることも複数あげて回答があったのですから、
そのうちのものだったのか、それ以外の問題だったのかも気になります。
 
あなたにとっては結果オーライかもしれないですが、
質問掲示板と言うのは、閲覧者もいるということをお忘れなく。
あなたのつまずいていた原因も貴重な情報になります。
ボランティアで回答して下さる人にも、結果をきちんと連携したほうがよいと思いますよ。

回答
投稿日時: 22/11/26 21:55:32
投稿者: simple

例えば、
・ComboBox1の値に応じて、最初の1文字を決め、
・元データのうち、それに合致したデータをCombobox3に表示する
といったケースのコードを以下に示します。
他のコントロールも同様に考えて見て下さい。
(なお、ComboBox1の選択を変更したときに、ComboBox3の内容を書き換える前提です。
他に適当なものがあればそれを使って下さい。)
 

Private Sub ComboBox1_Change()
    Dim headSt  As String
    Dim r       As Range
    
    Select Case ComboBox1.Text
        Case "山田": headSt = "A"
        Case "竹田": headSt = "B"
        Case "木村": headSt = "C"
    End Select
    
    'コンボボックス3を再表示する例。
    ComboBox3.Clear
    For Each r In Sheet1.Range("C1", Sheet1.Cells(Rows.Count, "C").End(xlUp))
        If Left(r.Text, 1) = headSt Then
            ComboBox3.AddItem r.Text
        End If
    Next
End Sub

コンボボックスで選択した値をシートに書き出すといった話は、
比較的基本的な話なので、ご自分で書籍やネットを調べてみて下さい。
例えば、以下にもあると思われます。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform05.html

投稿日時: 22/11/29 09:17:23
投稿者: hiroemon_

ありがとうございます。
前の質問は閉じてしまいましたので、こちらでコメントします。
 
シートの指定が正しくなく、件数をカウントしてませんでした。。。
 
 

simple さんの引用:
前の質問は解決されたようでよかったですね。
 
>いまはMsgBoxで結果0件になってしまいます。。。
という疑問を提示されていたわけですから、
実は、別のシートを見ていたからでした、
とかその原因などを明確にされるとよかったのではないですか?
原因となることも複数あげて回答があったのですから、
そのうちのものだったのか、それ以外の問題だったのかも気になります。
 
あなたにとっては結果オーライかもしれないですが、
質問掲示板と言うのは、閲覧者もいるということをお忘れなく。
あなたのつまずいていた原因も貴重な情報になります。
ボランティアで回答して下さる人にも、結果をきちんと連携したほうがよいと思いますよ。

投稿日時: 22/11/29 09:18:16
投稿者: hiroemon_

ありがとうございます!
記載いただいたコードをもとに、いろいろ調べながら試してみます。
 
 

simple さんの引用:
例えば、
・ComboBox1の値に応じて、最初の1文字を決め、
・元データのうち、それに合致したデータをCombobox3に表示する
といったケースのコードを以下に示します。
他のコントロールも同様に考えて見て下さい。
(なお、ComboBox1の選択を変更したときに、ComboBox3の内容を書き換える前提です。
他に適当なものがあればそれを使って下さい。)
 
Private Sub ComboBox1_Change()
    Dim headSt  As String
    Dim r       As Range
    
    Select Case ComboBox1.Text
        Case "山田": headSt = "A"
        Case "竹田": headSt = "B"
        Case "木村": headSt = "C"
    End Select
    
    'コンボボックス3を再表示する例。
    ComboBox3.Clear
    For Each r In Sheet1.Range("C1", Sheet1.Cells(Rows.Count, "C").End(xlUp))
        If Left(r.Text, 1) = headSt Then
            ComboBox3.AddItem r.Text
        End If
    Next
End Sub

コンボボックスで選択した値をシートに書き出すといった話は、
比較的基本的な話なので、ご自分で書籍やネットを調べてみて下さい。
例えば、以下にもあると思われます。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform05.html

回答
投稿日時: 22/11/29 10:51:31
投稿者: simple

シート間違いとのコメント拝見しました。了解です。

トピックに返信