Excelノート 10-1 コントロール

HOME  検索  索引  もくじ  関数目次ージへ        次ページへ

タイトル欄のアドレスは、エクセルファンクラブの該当する頁へのリンク先です。
詳しい事は、こちらの
お願いをご覧になってください。

1   コンボボックスで別のシートからセル範囲を選択するには?
2   「リストボックス」と「コンボボックス」の違いは?
3   矢印キーでテキストボックスのカーソルを移動したい
4   Textboxに入力したメルアドを有効にするには?
5   Label.Captionの任意の位置での改行
6   コマンドボタンをクリックしてテキストボックスやセルの内容をクリアするには
7   ツールボックスの、フォームとコントロールツールボックスの違いは?
8   テキストボックスの値によって、コンボボックスに表示されるリストを変えるには
9   テキストボックスを漢字入力モードにするには?
10 コンボボックスのリストに現在開いているbook名全てを表示するには
11 ボタン、コマンドボタンの表示名(Caption)を改行するには
12 コンボボックスにフォーカスが来たら勝手にドロップダウンリストを表示するには

13 コンボボックスのリストを列方向でなく行方向で表示するには?
14 テキストボックスをマウスでクリックした時、入力している文字をすべて範囲選択するには
15 アクティブなファイルの、フォルダ名、ファイル名、シート名をラベルに表示するには
16 TextBoxの番号の部分に変数を入れてまとめて処理するには
17 テキストボックスからセルに入力する際、特定の文字だけ色を変えたい
18 Textbox1に漢字、Textbox2にふりがなを入力し、任意の1つのセルに表示するには?
19 コンボボックスのリストに、全てのシート名を表示するには
20 コンボボックスのリストに、シートの値を表示するには(親・子・孫コンボ)

1 コンボボックスで別のシートからセル範囲を選択するには?
ユーザーフォームにコンボボックスを用意し、Sheet1にコマンドボタンを貼り付けます。
表示させたいデータはSheet2のB1:B5にあるものとします。

 Private Sub CommandButton1_Click()
  Load UserForm1
  UserForm1.ComboBox1.RowSource = "Sheet2!B1:B5"   
'Sheet2のB1〜B5の値を設定
  UserForm1.Show
 End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
2 「リストボックス」と「コンボボックス」の違いは?
Excel97、Excel2000 共通
 リストボックスは選択肢の一覧を表示し、その中から 1 つまたは複数の項目を選択するものです。
 入力は出来ません。
 コンボボックスはリスト ボックス (ListBox) コントロールとテキスト ボックス(TextBox)コントロールの機能を
 組み合わせたコントロールです。
 このため、テキスト ボックス(TextBox)コントロールのように新しい値を直接入力することも、
 リスト ボックス (ListBox) コントロールのように選択肢の一覧から値を選択することもできます。
3 矢印キーでテキストボックスのカーソルを移動したい
上下の矢印キーによる移動は元々可能なので、左右の矢印キーについてだけ。。。
Private Sub TextBox1_KeyDown(ByVal KeyCode As  MSForms.ReturnInteger, ByVal Shift As Integer)
 Select Case KeyCode
  Case vbKeyRight
  SendKeys "{TAB}"
  Case vbKeyLeft
  SendKeys "+{TAB}"
 End Select
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
4 Textboxに入力したメールアドレスを有効にするには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200103/01030350.txt  
  「Textboxに入力したメルアドを有効にするには?」 【VBAラウンジ】
Private Sub TextBox1_Change()
 With UserForm1.TextBox1
  ActiveSheet.Hyperlinks.Add _
  Anchor:=ActiveCell, _
  Address:="MailTo:" & .Text, _
  TextToDisplay:=.Text
 End With
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
5 Label.Captionの任意の位置での改行
改行コードを使います。
 UserForm1.Label1.Caption = "ABC" & vbCrLf & "DEF"
とすれば"DEF"は改行されて表示されます
6 コマンドボタンをクリックしてテキストボックスやセルの内容をクリアするには
Private Sub CommandButton1_Click()
 With Sheets("Sheet1")
  .TextBox1.Value = ""
  .Range("A1:A3") = ""
  .Range("B1:B3").ClearContents
 End With
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
7 ツールボックスの、フォームとコントロールツールボックスの違いは?
http://www.keep-on.com/~excelyou/2000lng4/200007/00070214.txt
  「フォームのツールボックスとコントロールのツールボックスの使い分けについて教えてください」  【VBAラウンジ】
http://www.keep-on.com/~excelyou/2000lng4/200005/00050226.txt
  「コンボボックスのフォントサイズを変更するには?」  【VBAラウンジ】
Excel97、Excel2000 共通
 
両方の見分け方は、選択できるものならマウスを合わせてみて
 カーソルが人差し指になったらフォームです。

フォーム
 基本的にこちらはイベント・プロシージャではありません。
 標準モジュールにあるマクロを、コントロールに登録します。

コントロールツールボックス
 イベント・プロシージャが記述できます。 イベント・プロシージャは、
  Private Sub オブジェクト_イベント()   
  End Sub

という書き方です。
このプロシージャは、そのコントロールが配置されているオブジェクトのモジュールに記述します。
例えば、コマンドボタンがシート上にあれば、そのシートのモジュールに、ユーザーフォーム上にあれば
そのフォームのモジュールに記述します。 標準モジュールには記述しません。

8 テキストボックスの値によって、コンボボックスに表示されるリストを変えるには
  Sheet1
  A B C D
1 1-1 みかん りんご ぶどう
2 1-2 なし くり もも
3 1-3 すいか めろん さくらんぼ
4 1-4 バナナ あけび びわ
ユーザーフォームのTextBox1に、A列の値を入力した時、
A列に該当する行の、B列以降の値が、ListBox1に表示されます。 
Private Sub TextBox1_Change()
 Dim N As String, i As Long, j As Integer
 Dim Lastcol As Integer, LastRow As Long
 Me.ListBox1.Clear
 N = TextBox1.Text
 LastRow = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row '最終行取得
 For i = 1 To LastRow
  If N = Worksheets("sheet1").Cells(i, 1) Then
   Lastcol = Worksheets("sheet1").Cells(i, Columns.Count).End(xlToLeft).Column 'i行目の最終列取得
   For j = 2 To Lastcol
    Me.ListBox1.AddItem Worksheets("sheet1").Cells(i, j).Value
   Next
  End If
 Next
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
9 テキストボックスを漢字入力モードにするには?
TextBox1.IMEMode = fmIMEModeHiragana
10 コンボボックスのリストに現在開いているbook名全てを表示するには
Private Sub UserForm_Initialize()
 Dim objbook As Object
 For Each objbook In Workbooks
  ComboBox1.AddItem objbook.Name
 Next
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
11 ボタン、コマンドボタンの表示名(Caption)を改行するには
http://www.keep-on.com/~excelyou/2000lng4/200012/00120393.txt
  「ボタンの表示名(キャプション)を2段にしたい場合は?」 【VBAラウンジ】
Private Sub UserForm_Initialize()
 CommandButton1.Caption = "Q&Aラウンジ" & vbCr & "ExcelVBA"
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
Excel97、Excel2000 共通
ボタンに直接書きこんで[Ctrl]キーを押しながら[Enter]
 12 コンボボックスにフォーカスが来たら自動的にドロップダウンリストを表示するには
Private Sub ComboBox1_Enter()
 ComboBox1.DropDown
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
13 コンボボックスのリストを列方向でなく行方向で表示するには?
http://www.keep-on.com/~excelyou/2000lng4/200012/00120324.txt  
  「コンボボックスのリストを列方向でなく行方向で表示するには?」 【VBAラウンジ】
Private Sub ComboBox1_DropButtonClick()
 ComboBox1.List = Application.WorksheetFunction.Transpose(Range("a1:e1").Value)
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
14 テキストボックスをマウスでクリックした時、入力している文字をすべて範囲選択するには
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, _
                                ByVal X As Single,  ByVal Y As Single)
 With Me.TextBox1
  .SelStart = 0
  .SelLength = Len(.Text)
 End With
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
15 アクティブなファイルの、フォルダ名、ファイル名、シート名をラベルに表示するには
Private Sub UserForm_Initialize()
 Dim strBook As String
 strBook = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) 
 UserForm1.Label1.Caption = Dir(ActiveWorkbook.Path, vbDirectory)
 UserForm1.Label2.Caption = strBook
 UserForm1.Label3.Caption = ActiveSheet.Name
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
16 TextBoxの番号の部分に変数を入れてまとめて処理するには
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200107/01070123.txt
  「ユーザーフォーム上のデータをクリアするには?」 【VBAラウンジ】
http://www.keep-on.com/~excelyou/2000lng4/200012/00120076.txt
  「UserFormでのオブジェクトの順番?」 【VBAラウンジ】
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200104/01040165.txt  
  「テキストボックスの設定について」 【VBAラウンジ】
全てのテキストボックス、コンボボックス、チェックボックスを一気にクリアします。
 Private Sub CommandButton1_Click()
  Dim ctlTarget As Control
  For Each ctlTarget In Me.Controls
   Select Case TypeName(ctlTarget)
    Case "TextBox"
     ctlTarget.Text = ""
    Case "ComboBox"
     ctlTarget.ListIndex = -1
    Case "CheckBox"
     ctlTarget.Value = False
   End Select
  Next ctlTarget
 End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
TextBpx1〜10を、クリアします。
 Private Sub CommandButton1_Click()
  Dim i As Integer
  For i = 1 To 10
    Me.Controls("TextBox" & (i)).Text = ""
  Next i
 End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
TextBox2, 5, 7, 9, 12, 16を非表示にします。
 Private Sub CommandButton1_Click()
  Dim i As Integer, j As Integer
  For i = 1 To 6
   j = Choose(i, 2, 5, 7, 9, 12, 16)
   Me.Controls("TextBox" & j).Visible = False
  Next
 End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
17 テキストボックスからセルに入力する際、特定の文字だけ色を変えたい
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200103/01030447.txt  
  「文字の色を変えるには」 【VBAラウンジ】
A列最終行の下のセルに、テキストボックスの値を書き込む際、文字列に「にっぽん」があったら、
「にっぽん」だけを赤く、「にほん」があったら「にほん」だけを青くします。
Sub Test色変換()
 Dim MyR As Range
 On Error Resume Next
 MyStr$ = TextBox1.Text
 Set MyR = Range("A65536").End(xlUp).Offset(1, 0)
 MyR.Value = MyStr$
 For i% = 1 To Len(MyStr$) - 4
  Select Case MyR.Characters(i%, 3).Text
 Case "にっぽ"
  MyR.Characters(i%, 4).Font.ColorIndex = 3
 Case "にほん"
  MyR.Characters(i%, 3).Font.ColorIndex = 5
 End Select
 Next i%
 Set MyR = Nothing
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
18 Textbox1に漢字、Textbox2にふりがなを入力し、任意の1つのセルに表示するには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200104/01040365.txt  
  「Textbox1に漢字氏名、Textbox2にふりがなを入力し、任意の1つのセルに表示するには?」【VBAラウンジ】
Private Sub CommandButton1_Click()
 Cells(1, "A").Value = TextBox1.Text
 Cells(1, "A").Phonetic.Text = TextBox2.Text
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
19 コンボボックスに、全てのシート名を表示するには
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200105/01050137.txt  
  「セルに順番に入力するには」 【VBAラウンジ】
Private Sub UserForm_Initialize()
 Dim WS As Worksheet
 For Each WS In ThisWorkbook.Worksheets      
'各シートをループします
  Me.ComboBox1.AddItem WS.Name         
'シート名をコンボボックスに追加します
 Next WS
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
20 コンボボックスのリストに、シートの値を表示するには(親・子・孫コンボ)
  sheet1
  A B C
1 事業所 氏名
2 ○事業部 1課 佐藤太郎
3 ○事業部 1課 斎藤三國
4 ○事業部 2課 伊藤博文
5 △事業部 3課 相澤加奈子
6 △事業部 3課 秋山悠
7 △事業部 4課 菊池瑞恵
8 □事業部 5課 加藤加奈子
9 □事業部 6課 山田瑞恵
ユーザーフォームを開いた時、左のようなシートから、

ComB1のドロップダウンリストに、
  ○事業部△事業部□事業部
を表示し、その中から○事業部を選んだ場合
ComB2のドロップダウンリストに、
  1課、2課、

を表示し、さらにその中から1課を選んだ場合
ComB3のドロップダウンリストに、
  
佐藤太郎、斎藤三國
を表示します

Dim i As Integer, WS As Worksheet
Private Sub ComB1_Change()
 Set WS = Worksheets("sheet1")
 Me.ComB2.Clear
 For i = 1 To WS.Cells(Rows.Count, 1).End(xlUp).Row
  If WS.Cells(i, 1) = ComB1.Value Then
   If WS.Cells(i, 2) <> WS.Cells(i - 1, 2) Then
    Me.ComB2.AddItem WS.Cells(i, 2).Value
   End If
  End If
 Next
End Sub
Private Sub ComB2_Change()
 Set WS = Worksheets("sheet1")
 Me.ComB3.Clear
 For i = 1 To WS.Cells(Rows.Count, 2).End(xlUp).Row
  If WS.Cells(i, 2) = ComB2.Value Then
   If WS.Cells(i, 3) <> WS.Cells(i - 1, 3) Then
    Me.ComB3.AddItem WS.Cells(i, 3).Value
   End If
  End If
 Next
End Sub
Private Sub UserForm_Initialize()
 Set WS = Worksheets("sheet1")
 Me.ComB1.Clear
 For i = 2 To WS.Cells(Rows.Count, 1).End(xlUp).Row
  If WS.Cells(i, 1) <> WS.Cells(i - 1, 1) Then
   Me.ComB1.AddItem WS.Cells(i, 1).Value
  End If
 Next
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。

HOME  検索  索引  もくじ  関数目次ージへ        次ページへ

このページのTOPへ

 

 

 

 

inserted by FC2 system