Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10338 / 13646 ツリー ←次へ | 前へ→

【22388】一つのシートの各列に専用のリストボックスを作りたいのですが WB 05/2/17(木) 17:29 質問[未読]
【22395】Re:一つのシートの各列に専用のリストボックス... bykin 05/2/17(木) 21:24 回答[未読]
【22418】Re:一つのシートの各列に専用のリストボックス... WB 05/2/18(金) 18:28 お礼[未読]

【22388】一つのシートの各列に専用のリストボックス...
質問  WB  - 05/2/17(木) 17:29 -

引用なし
パスワード
   やりたいことですが、シート1にリストを作り、シート2のA列のセルをクリックするとユーザーホームのリストボックスが表示され選択した内容がシート2のアクティブなセルに表示されるように、というところまでは本を見ながらなったのですが、A列しかできません。B列、C列も同じようにしたい(B・C列はリストボックスの内容は個々にちがうもので)のですがどのようにすればよいのか教えてください。
OS  Windows XP SP2  エクセル2003を使っています。
VBAの記入は下記のようにしてあります。よろしくお願いします。
' ◆Worksheetのコード◆
'-----------------------------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Column = 1 Then         
    行 = Target.Row            
    UserForm1.Show             
  End If
End Sub
' ◆UserForm1のコード◆
'-----------------------------------------------------------------------------------------
Private Sub ListBox1_Click()          
  If 行 <> 1 Then              
    Cells(行, 1) = ListBox1.Value     
  End If
  UserForm1.Hide               
End Sub
'-----------------------------------------------------------------------------------------
Private Sub UserForm_Deactivate()       
  Unload Me                 
End Sub
'=========================================================================
' ◆標準モジュールのコード◆
'-----------------------------------------------------------------------------------------
Option Explicit
Public 行 As Variant              
'-------------------------------------------------------------------------
Sub auto_open()
  Load UserForm1               
End Sub

【22395】Re:一つのシートの各列に専用のリストボック...
回答  bykin  - 05/2/17(木) 21:24 -

引用なし
パスワード
   こんばんわ。

汎用的に使う場合は、何列目が対象なんかを判定せなあかんから、
その情報をユーザーフォームに与えておけばええんです。
こんなんかな?(注:セルのクリックやのうて、右クリックで起動させてます)

'--------------------------------------------------------------------
'Sheet2のモジュール

Option Explicit

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  If Target.Cells.Count = 1 Then
    If Target.Column < 4 Then
      Cancel = True
      Load UserForm1
      UserForm1.TargetColumn = Target.Column
      UserForm1.Show
      Unload UserForm1
      Set UserForm1 = Nothing
    End If
  End If
End Sub

'--------------------------------------------------------------------
'UserForm1のモジュール

Friend Property Let TargetColumn(ByVal n As Long)
  With Worksheets("Sheet1")
    ListBox1.RowSource = "Sheet1!" & .Range(.Cells(1, n), _
                     .Cells(.Rows.Count, n).End(xlUp)).Address
  End With
End Property

Private Sub ListBox1_Click()
  ActiveCell.Value = ListBox1.Value
  Me.Hide
End Sub

ユーザーフォームに列の数値を与えて、同時にリストを設定してます。
標準モジュールは不用なんで、削除(解放)してください。

それと Option Explicit を宣言するんやったら、全部のモジュールで宣言しておいてな。

試してみてな。
ほな。

【22418】Re:一つのシートの各列に専用のリストボック...
お礼  WB  - 05/2/18(金) 18:28 -

引用なし
パスワード
   遅くなりましたが、きbykinさんありがとうございます。
希望通りになりました。本当にありがとうございました。
またわからないことがありましたら書き込みますので、よろしくお願いします。

10338 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free