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

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

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

21 シートにコンボボックスを貼り付けて設定するには  
22 シートに貼り付けたコンボボックスを、任意のセルを選択した時だけ表示させるには
23 テキストボックスの値によって、リストボックスのリストを変更するには
24 リストボックスに、指定のセル範囲の値を逆順で表示するには?
25 シートに配置したリストボックスから他のシートの項目を選択し、該当するデータを表示するには?
26 文字サイズ・リストの大きさを自由に設定できるコンボボックスを、入力規則のリストのように使用するには
27 コントロールのExitイベントで、条件によってフォーカスを移動させないためには?
28 コンボボックスで選択した値によって、リストボックスの項目リストの表示を変更するには?
29 シート上のコマンドボタンを押した時、ホームページを表示するには?
30 ユーザーフォームで押したコマンドボタンごとに、処理を変えるには?
31 ユーザーフォームのリストボックスをクリックした時、アクティブなセルにその値を入力したい
32 テキストボックスの幅より多い文字を折り返すには?
33 リストボックスのリストに、シート内の2列以上の値を表示するには?
34
35
36
37
38
39
40

21 シートにコンボボックスを貼り付けて設定するには
1. あらかじめ、表示したい内容をシート内に入力しておきます。
2. 入力したリストの範囲を選択して、[挿入]-[名前]-[定義]で名前を付けます。
3. ツール、ユーザー設定、ツールバーのタグで、コントロールツールボックスにチェックを入れて
  ツールボックスを表示してください。
4. その中のコンボボックスをクリックし、シート状の任意の場所でドラッグして配置します。
  その際、大きさも調整してくださいね。
5. 次に、コンボボックスを右クリック、プロパティ
  LinkedCell に、コンボボックスで選択した内容を転記したい場所を指定します。(例 B1)
6. LestFillRange に、2番で付けた名前を入力します。
7. ×ボタンでプロパティを閉じ、コントロールツールボックスの左上にある
  三角定規のアイコンをクリックして、編集状態を終わります。
22 シートに貼り付けたコンボボックスを、任意のセルを選択した時だけ表示させるには
A1セルを選択したときだけ、コンボボックスを表示します。
 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  If Target.Row = 1 And Target.Column = 1 Then
   ComboBox1.Visible = True
  Else
   ComboBox1.Visible = False
  End If
 End Sub
  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
23 テキストボックスの値によって、リストボックスのリストを変更するには
Sheet1に、このように入力しておきます。
  A   B     C    D
1  1  みかん  りんご  ぶどう
2  2  なし   くり   もも
3  3  すいか  めろん  さくらんぼ
4  4  バナナ  あけび  びわ
5

ユーザーフォームのTextBox1に、1〜4の数値を入力した時、
A列の該当する行の、B列以降の値が、ListBox1に表示されます。

Private Sub TextBox1_Change()
 Dim N As String, i As Long, j As Integer, WS As Worksheet
 Set WS = Worksheets("sheet1")
 Me.ListBox1.Clear
 N = TextBox1.Text
 With WS
  For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
   If N = .Cells(i, 1) Then
    For j = 2 To .Cells(i, Columns.Count).End(xlToLeft).Column
     Me.ListBox1.AddItem .Cells(i, j).Value
    Next
   End If
  Next
 End With
End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。

24 リストボックスに、指定のセル範囲の値を逆順で表示するには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200205/02050242.txt 
 「リストボックスに逆順表示させるには?」 【VBAラウンジ】
Private Sub UserForm_Initialize()
Dim i As Long, j As Long
Dim vntBuf As Variant, myList As Variant
vntBuf = Worksheets("Sheet1").Range("A1:A5").Value
ReDim myList(LBound(vntBuf) To UBound(vntBuf))
j = LBound(vntBuf)
For i = UBound(vntBuf) To LBound(vntBuf) Step -1
myList(j) = vntBuf(i, 1)
j = j + 1
Next i
Me.ListBox1.List = myList
Me.ListBox1.ListIndex = 0
Me.ListBox1.ListIndex = -1
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
25 シートに配置したリストボックスから他のシートの項目を選択し、該当するデータを表示するには?
【sheet1】   【sheet2】
  A B C D     A B C D
1 注文番号 商品名 単価 金額   1 1      
2 1 aa 100 1000   2 注文番号 商品名 単価 金額
3 2 bb 101 1200   3 1 aa 100 1000
4 1 aa 100 1400   4 1 aa 100 1400

1. sheet2を表示し、【ツール】【ユーザー設定】【ツールバー】で
  【コントロールツールボックス】にチェックを入れます。
2. 【リストボックス】をクリックし、シート内の任意の場所にドラッグして配置します。
3. 配置した【リストボックス】を右クリックし、【プロパティ】を出し、
  【LinkidCell】に、A1 と入れ
  【ListFillRange】に、Sheet1!$A:$A と入れて、【プロパティ】を閉じます。
4. 再度【リストボックス】を右クリックし、【コードの表示】で

   Private Sub ListBox1_Click()

   End Sub
  
  と言うコードが出てきますので、
  この2行の間に、下のコードを貼り付けます
  
Dim a As String, i As Long, WS1 As Worksheet
Set WS1 = Worksheets("sheet1") '参照元シート
Range(Cells(2, 1), Cells(Cells(Application.Rows.Count, 1).End(xlUp).Row, 4)).ClearContents
a = Cells(1, 1)
With WS1
.Rows(1).Copy Range("A2")
For i = 2 To .Cells(Application.Rows.Count, 1).End(xlUp).Row
If .Cells(i, 1) = a Then .Rows(i).Copy Cells(Cells(Application.Rows.Count, 1).End(xlUp).Row + 1, 1)
Next
End With

5. 右上の×ボタンでシートに戻ります。
6. 【コントロールツールボックス】の中の、三角定規のアイコンをクリックし、
  デザインモードを終了します。
  
これで、【リストボックス】にsheet1のA列の注文番号が表示され、
クリックするとその行のデータがsheet2の3行目以降に書き出されます。   

26 文字サイズ・リストの大きさを自由に設定できるコンボボックスを、入力規則のリストのように使用するには
[コントロールツールボックス] の [コンボボックス] を、入力規則のリストのように使用します。
[コンボボックス] なら、文字サイズ、リストの大きさ等、自由自在です。
 【使い方】
  1. 新規のシートを表示し、最初の「コンボボックス作成」のコードを、マクロの使い方(1)標準モジュールの方法で実行します
  2. マクロの使い方(2)該当するシートのモジュールの方法で、後半のコードを書き込みます。
 【仕様】
  C列のセルを選択すると選択したセルの下にコンボボックスが表示され、作成したリストが設定されています。
  他の列を選択するとコンボボックスは非表示になります。
  コンボボックスの中の項目を選択すると、選択中のセルに項目が入力されます。

Sub コンボボックス作成()
 Dim i As Integer
 For i = 1 To 20
  Cells(i, 1) = "リスト" & i
 Next
 ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
    DisplayAsIcon:=False, Left:=Cells(1, 4).Left, Top:=0, _
    Width:=120, Height:=24).Select     
'Widthはリストの横幅、Heightは縦の長さを指定します
 With Selection
  .ListFillRange = "A:A"      
'リストに表示するセル範囲。他のシートの場合は"sheet1!A:A"とします
  .Object.ListRows = 15      
'リストに表示する項目数
  .Object.Font.Size = 14      
'リストの文字の大きさ
 End With
 Application.CommandBars("Control Toolbox").Visible = False
 Range("C1").Select
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 On Error Resume Next
 If Target.Column <> "3" Then
  ComboBox1.Visible = False
  Exit Sub
 End If
 With ActiveSheet.Shapes("ComboBox1")
  .Visible = True
  .IncrementTop Target.Top + Target.Height - .Top
  .IncrementLeft Target.Left - .Left
  .Select
  Selection.LinkedCell = Target.Address
 End With
 Target.Select
End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。

27 コントロールのExitイベントで、条件によってフォーカスを移動させないためには?
Exitイベントの場合、TextBox1.SetFocus としても次のコントロールにフォーカスが移ってしまいます。
TextBox1.SetFocus は必要なく、Cancel = True と入れるとフォーカスは現在のコントロールに残ります。

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 If TextBox1.Value < 10 Then                 
'テキストボックスの入力値が、10より小さい時
  MsgBox ("TextBox1 の入力値が正しくありません。")
  Cancel = True                         
'次のコントロールにフォーカスを移動させない
  TextBox1.Value = ""
 End If
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。

28 コンボボックスで選択した値によって、リストボックスの項目リストの表示を変更するには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200207/02070527.txt 
 「コンボボックスとリストボックスを連携させるには?」 【VBAラウンジ】
※ユーザーフォームに、コンボボックス、リストボックスを作成してください。
※Sheet1に以下のようなリストを用意します。
     A      B       C
1   G1    G2      G3
2   あ    ああ     a
3   い    いい     b
4   う     うう     c

Private Sub UserForm_Initialize()
 'ComboBox1セット
 Dim ico As Long
 ico = 1
 With ThisWorkbook.Worksheets("Sheet1")
  Do While .Cells(1, ico) <> ""
   Me.ComboBox1.AddItem .Cells(1, ico).Value
   ico = ico + 1
  Loop
 End With
 Me.ComboBox1.SetFocus
End Sub
Private Sub ComboBox1_Change()
 'ListBox1セット
 Dim ico As Long
 'Me.ListBox1.Clear
 ico = Me.ComboBox1.ListIndex + 1
 With ThisWorkbook.Worksheets("Sheet1")
  Me.ListBox1.List = .Range(.Cells(2, ico), _
  .Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value
 End With
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。

29 シート上のコマンドボタンを押した時、ホームページを表示するには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200207/02070085.txt 
 「コマンドボタンにハイパーリンクを貼り付けるには」 【VBAラウンジ】
1. シートに、コントロールツールボックスのコマンドボタンを配置します。
2. デザインモードの状態でコマンドボタンを選択し【挿入】【ハイパーリンク】でサイトのアドレスを入力します。
3. 次にコマンドボタンを右クリック【コードの表示】でシートのモジュールにこちらのコードを書き込みます。
    Private Sub CommandButton1_Click()
      Me.Shapes("CommandButton1").Hyperlink.Follow
    End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
30 ユーザーフォームで押したコマンドボタンごとに、処理を変えるには?
ユーザーフォーム上にコマンドボタンを二つ配置し、マクロ「test」を処理します。
'全てのコードをユーザーフォームのモジュールに書いた場合
Dim i As String
Private Sub CommandButton1_Click()
 i = Me.ActiveControl.Name
 Call test
End Sub
Private Sub CommandButton2_Click()
 i = Me.ActiveControl.Name
 Call test
End Sub
Sub test()
 If i = "CommandButton1" Then
  MsgBox i & " が押されました。処理を開始します。"
 ElseIf i = "CommandButton2" Then
  MsgBox i & " が押されました。終了します。"
 End If
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
ユーザーフォーム上にコマンドボタンを二つ配置し、マクロ「test」を処理します。
'マクロ「test」を標準モジュールに書いた場合、引数を渡します
Dim i As String
Private Sub CommandButton1_Click()
 i = Me.ActiveControl.Name
 test i
End Sub
Private Sub CommandButton2_Click()
 i = Me.ActiveControl.Name
 test i
End Sub
  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。

Sub test(ByVal i As String)
 If i = "CommandButton1" Then
  MsgBox i & " が押されました。処理を開始します。"
 ElseIf i = "CommandButton2" Then
  MsgBox i & " が押されました。終了します。"
 End If
End Sub
  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。

31 ユーザーフォームのリストボックスをクリックした時、アクティブなセルにその値を入力したい
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
 ActiveCell.Value = ListBox1.Value
End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
32 テキストボックスの幅より多い文字を折り返すには?
 http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200212/02120198.txt
 「テキストボックスの文字を折り返すには?」  【VBAラウンジ】
Textboxのプロパティで、
 Multiline を True
 Wordwrap を True
に設定します。

コードで書く場合こんな感じで。 
 Private Sub UserForm_Activate()
   Me.TextBox1.MultiLine = True
   Me.TextBox1.Wordwrap = True
 End Sub

  このコードの使い方は、マクロの使い方(4)ユーザーフォームのモジュールにあります。
33 リストボックスのリストに、シート内の2列以上の値を表示するには?
Private Sub UserForm_Initialize()
 With Worksheets("data_一般")
  ListBox1.Clear
  ListBox1.ColumnCount = 4
          'リストボックスの列は4列にする
  For i = 2 To .Cells(Application.Rows.Count, "A").End(xlUp).Row
   ListBox1.AddItem .Cells(i, 1).Value
     'シートのA列の値を、リストの一番左の列に
   ListBox1.List(i - 2, 1) = .Cells(i, 2).Value
  '同じくB列の値を、リストの二番目の列に
   ListBox1.List(i - 2, 2) = .Cells(i, 3).Value
  '同じくC列の値を、リストの三番目の列に
   ListBox1.List(i - 2, 3) = .Cells(i, 4).Value   
'同じくD列の値を、リストの四番目の列に
  Next
 End With
End Sub
34  
 
35  
 
36  
 
37  
 
38     
 
39  
 
40  
 

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

このページのTOPへ

inserted by FC2 system