Quantcast
Channel: 午後わてんのブログ
Viewing all articles
Browse latest Browse all 420

エクセルVBA、チェックボックス付きのListBoxのInputBox?を作ってみた

$
0
0


ユーザーからデータを受け取りたいときはInputBoxを使うんだけど
イメージ 11
これだと1つしか受け取れなくて事足りないときがある

そこでつくってみたのがこれ↓
イメージ 1
チェックボックス付きのリスト形式のInputBoxみたいなの
ボタンを押すとチェックの入った項目の配列を返す

イメージ 10
受け取った配列(Ash)の中身
チェックした「ささやき」と「いのり」が入っている

ユーザーフォーム
イメージ 2
ListBoxとボタンを追加しただけ

ユーザーフォームのコード
イメージ 3
エラー処理していないので短い

ユーザーフォームを呼び出す標準モジュール
イメージ 4
こっちもエラー処理していない
思いつくエラー処理は
ユーザーが何も選択しないでボタンを押したとき
ボタンを押さずにフォームのXボタンを押して閉じられた時


ユーザーフォームコード
Private myWords() As String

'ボタン押した時
Private Sub CommandButton1_Click()
    Call GetWords
    Me.Hide 'ユーザーフォームを非表示にする
End Sub

Private Sub UserForm_Initialize()
    'ListBoxの初期化
    With Me.ListBox1
        .AddItem "ささやき"
        .AddItem "えいしょう"
        .AddItem "いのり"
        .AddItem "ねんじろ!"
        .ListStyle = fmListStyleOption      'チェックボックスにする
        .MultiSelect = fmMultiSelectMulti   '複数選択可にする
    End With
End Sub

'チェックされたリストを配列に入れる
Private Sub GetWords()
    Dim i As Long, j As Long
    For i = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(i) Then
            ReDim Preserve myWords(j)
            myWords(j) = Me.ListBox1.List(i)
            j = j + 1
        End If
    Next
End Sub

'標準モジュールから呼び出す関数
'ListBoxでチェックされた項目名群を返す
Public Function doModal() As String()
    Me.Show
    doModal = myWords
End Function


標準モジュールのコード
Sub GetMyWords()
    Dim Ash() As String
    Ash = UserForm1.doModal
    Unload UserForm1 'ユーザーフォームはここで閉じる
End Sub

↑標準モジュールの
Ash = Userform1.doModal
ってのが呼び出しているところで、InputBoxなら
Ash = InputBox
こうなるところ

doModal関数のMe.Showでユーザーフォームが表示される
イメージ 5
ユーザーがリストを選んで

イメージ 6
ボタンを押すと
GetWordsが実行されて

イメージ 7
グローバル変数のmyWordsに選択された項目名が入る

ユーザーから見るとボタンを押した時点でユーザーフォームが閉じられるのが自然だけど、処理はまだ終わっていないので閉じることはできないので
Me.Hide
これで非表示にして閉じたように見せかけている


イメージ 8
ボタンを押したときの処理が終わるとここに戻ってくるんだけど
この流れがよくわからん、こうなってくれないと困るんだけどね。
これでユーザーフォームの方は終わりで取得したmyWordsは標準モジュールの方へ送られる

標準モジュール
イメージ 9
ユーザーが選択した項目名が取得できている
ここまで来てからユーザーフォームを閉じて完了


参照したところ
標準モジュールとフォーム間のデータ受け渡しⅡ|Excelユーザーフォーム入門
http://excel-ubara.com/excelvba3/EXCELFORM010.html
ここがなかったら今回のは作れなかった

Office TANAKA - Excel VBA Tips[複数選択可能なリストボックス]
http://officetanaka.net/excel/vba/tips/tips144.htm


ダウンロード


関連記事
午後ツールその53、ウィンドウの整列、異なるブック(ウィンドウ)の整列 ( Windows ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14655664.html



Viewing all articles
Browse latest Browse all 420

Trending Articles