Excel VBA ユーザーフォーム 使い方 part5

はじめに

データベースのセルに入っている内容を、リストビュー、ツリービューの2つを使って取得する。

標準では、リストビュー、ツリービューは部品に入っていないので、その他のコントロールから選ぶこと。

やり方は2通りあるが、エクセルメニューの開発>Visual Basicをクリックして編集画面を出し、ユーザーフォームを出すところまでは共通である。

開発>Visual Basicをクリックする画面

フォームのUserFormのオブジェクトの表示をクリックしてユーザーフォームを出す。

ユーザーフォームをクリックしてから編集画面のメニューのツールから選ぶ方法がある。

メニューのツールからその他のコントロールをクリックする

もうひとつはユーザーフォームと一緒に出てくるツールボックスのコントロール画面の余白を右クリックして出す方法がある。

ツールボックスのコントロールの画面を右クリックしてその他のコントロールを選択してもよい

このような画面が出てくるので、この画面をスクロールしてリストビュー、ツリービューにチェックを入れる

リストビューにチェックを入れた画面

ツリービューにチェックをいれた画面

このようにすると、ツールボックスのコントロールに、リストビューとツリービューが表示される。

3行目の左から2番目と3番目がそれぞれリストビューとツリービューである

後は、ユーザーフォーム1にマルチページをドラック&ドロップをして、その上にそれぞれのページにリストビューとツリービュー、そしてコマンドボタンをドラック&ドロップをすればいい。

リストビューの画面

ツリービューの画面

これで準備は終わりである。

リストビューの作成

ユーザーフォームーイニシャライズ

    With ListView1
        .View = lvwReport
        .LabelEdit = lvwManual
        .HideSelection = False
        .AllowColumnReorder = True
        .FullRowSelect = True
        .Gridlines = True
        .ColumnHeaders.Add , "氏名", "氏名"
        .ColumnHeaders.Add , "年齢", "年齢"
        .ColumnHeaders.Add , "出身地", "出身地"
    End With

 

.view=lvwReportはレポート形式での表示であり、一覧とサブアイテムを表示する形式を設定している。他には、lvwIcon(アイコンで表示)、lvwList(リスト形式で表示)、lvwSmallIcon(小さいアイコンで表示)の3通りある。

 .LabelEdit = lvwManualはラベルをコードで編集するという意味である。これをlvwAutomaticにすれば選択しただけで編集状態になる。この場合は、項目を選択しただけでは編集できない状態に設定してある。

.HideSelection = Falseは、別のコントロールにフォーカスを移動したときに選択状態を解除できないように設定してある。もちろんTrueであれば解除できる。

 .AllowColumnReorder = Trueは、実行中に列幅を変更できるように設定してある。Falseならば変更できない。

 .FullRowSelect = Trueは行全体が選択できるように設定してある。Falseならば選択できない。

 .Gridlines = Trueはグリッド線を表示している。Falseならばグリッド線は表示しない。

 .ColumnHeaders.Add の3行は、タブ情報を設定している。

コマンドボタンへの割り付け

Private Sub CommandButton1_Click()
    Dim i As Integer
    
    For i = 2 To lrn
        With ListView1.ListItems.Add
            .Text = Cells(i, 1)
            .SubItems(1) = Cells(i, 3)
            .SubItems(2) = Cells(i, 4)
        End With
    Next i

End Sub

 ListView1.ListItems.Addは、ListViewへListItemを追加するという意味である。

リストビューを表形式で使うとき、リストビューのデータは左端と2列目以降にわかれて管理される。

データは1行単位で追加していく。

.Text = Cells(i, 1)は左端に表示されるデータを意味し、Textプロパティで操作する。

2列目以降は.SubItemsで管理し、インデックスは2列目が1、3列目が2となる。

ツリービューの作成

ユーザーフォームーイニシャライズ

    With TreeView1
        .Indentation = 14
        .LabelEdit = tvwManual
        .BorderStyle = ccNone
        .HideSelection = False
        .LineStyle = tvwRootLines
    End With

 .Indentation はインデントの幅を設定している。

.LabelEditは項目を選択しただけで編集できないように設定してある。

.BorderStyleは周囲の線を設定している。

 .HideSelectionは別のコントロールにフォーカスを移動したときに選択状態を解除できないように設定している。

 .LineStyleは線のスタイルを設定している。

コマンドボタンへの割り付け

Private Sub CommandButton2_Click()
    Dim i As Integer
    
    For i = 2 To lrn
        TreeView1.Nodes.Add Key:=Cells(i, 1).Address, Text:=Cells(i, 1)
        TreeView1.Nodes.Add Relative:=Cells(i, 1).Address, _
                            Relationship:=tvwChild, Key:=Cells(i, 3).Address, _
                            Text:="年齢:" & Cells(i, 3)

        TreeView1.Nodes.Add Relative:=Cells(i, 1).Address, _
                            Relationship:=tvwChild, Key:=Cells(i, 4).Address, _
                            Text:="出身地:" & Cells(i, 4)
    Next i
        
End Sub

TreeView1.Nodes.Add Key:=Cells(i, 1).Address, Text:=Cells(i, 1)はA列のデータをツリービューの親ノードとして登録している。

TreeView1.Nodes.Add Relative:=Cells(i, 1).Address, _
                            Relationship:=tvwChild, Key:=Cells(i, 3).Address, _
                            Text:="年齢:" & Cells(i, 3)

はC列(3列目)のデータをA列の親ノードに対する子ノードとして登録している。

TreeView1.Nodes.Add Relative:=Cells(i, 1).Address, _
                            Relationship:=tvwChild, Key:=Cells(i, 4).Address, _
                            Text:="出身地:" & Cells(i, 4)

は、D列(4列目)のデータをA列の親ノードに対する子ノードとして登録している。

コードの全容

標準モジュール

Option Explicit
Option Base 1
Public lcr As Integer, lrn As Integer

ーーーーーーーーーーーーーーーーーーーーーーー
Sub actionButton()
    UserForm1.Show
End Sub

ーーーーーーーーーーーーーーーーーーーーーーー
Public Sub lastCellRow()
    lcr = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
End Sub

ーーーーーーーーーーーーーーーーーーーーーーー
Public Sub lastRowNum()
    lrn = Cells(Rows.Count, 1).End(xlUp).Row
End Sub

ユーザーフォーム1のコード

Option Explicit
Option Base 1

Private Sub UserForm_Initialize()
    
    Call lastCellRow
    Call lastRowNum
    
    With ListView1
        .View = lvwReport
        .LabelEdit = lvwManual
        .HideSelection = False
        .AllowColumnReorder = True
        .FullRowSelect = True
        .Gridlines = True
        .ColumnHeaders.Add , "氏名", "氏名"
        .ColumnHeaders.Add , "年齢", "年齢"
        .ColumnHeaders.Add , "出身地", "出身地"
    End With
    
    With TreeView1
        .Indentation = 14
        .LabelEdit = tvwManual
        .BorderStyle = ccNone
        .HideSelection = False
        .LineStyle = tvwRootLines
    End With
    
    UserForm1.MultiPage1.Value = 0
End Sub

ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub CommandButton1_Click()
    Dim i As Integer
    
    For i = 2 To lrn
        With ListView1.ListItems.Add
            .Text = Cells(i, 1)
            .SubItems(1) = Cells(i, 3)
            .SubItems(2) = Cells(i, 4)
        End With
    Next i

End Sub

ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub CommandButton2_Click()
    Dim i As Integer
    
    For i = 2 To lrn
        TreeView1.Nodes.Add Key:=Cells(i, 1).Address, Text:=Cells(i, 1)
        TreeView1.Nodes.Add Relative:=Cells(i, 1).Address, _
                            Relationship:=tvwChild, Key:=Cells(i, 3).Address, _
                            Text:="年齢:" & Cells(i, 3)

        TreeView1.Nodes.Add Relative:=Cells(i, 1).Address, _
                            Relationship:=tvwChild, Key:=Cells(i, 4).Address, _
                            Text:="出身地:" & Cells(i, 4)
    Next i
        
End Sub

サイトご利用方法

次のページ・前のページを利用するよりも、グローバルメニュー(ヘッダー部分にある項目)・サブメニュー記事の項目をクリックしていただければ、その項目の全体像が一目でみることができ、クリックすればそのサイトへ飛びます。

google、yahoo、Bingなどで検索する場合、検索ワードは先頭に、孤立じじい、と入力しその後に、グローバルメニュー・サブメニュー記事のどれかひとつの項目を入力すると、その検索サイトが上位表示されます。