過去ログ

                                Page     285
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼ListBoxにて・・・  いぬだわん 02/11/1(金) 10:00
   ┗Re:ListBoxにて・・・  つん 02/11/1(金) 15:58
      ┗Re:ListBoxにて・・・  いぬだわん 02/11/1(金) 17:06

 ───────────────────────────────────────
 ■題名 : ListBoxにて・・・
 ■名前 : いぬだわん
 ■日付 : 02/11/1(金) 10:00
 -------------------------------------------------------------------------
   こんにちは。
質問です。

Worksheet("Sheet1")があって、
2行目にあるデータ(C2〜)を
UserForm1を使い、ListBox1に表示させます。

UserForm1は
・ListBox1(2行目にあるデータ(C2〜)を表示)
・ListBox2(ListBox1からcmdSendによって送られたデータを表示)
・cmdSend(ListBox1の中から選択したデータをListBox2へ送る)
・cmdBack(ListBox2の中から選択したデータをListbox1へ返す)
・cmdOk(ListBox2のデータの列番号(Column)を取得)
のフォームを使います。

ListBox1の中のデータを選択して、
cmdSend(送る)ボタンを押したときに、
そのデータをListBox2に転送します。
cmdOk(OK)ボタンを押したときに、
ListBox2のデータの列番号(Column)を知りたいので、
MsgBoxを表示させたのですが、どうもうまくいかないようです。
下記に考えたコードを記しておきます。
わかる方がいらっしゃればご教授願います。

'ここから
Dim i, j As Integer
Dim blnCheckFlag As Boolean

Private Sub cmdBack_Click() '戻るボタンを押したとき
  
  For i = 0 To ListBox2.ListCount - 1
    If ListBox2.Selected(i) = True Then
      blnCheckFlag = False
      For j = 0 To ListBox1.ListCount - 1
        If ListBox1.List(j) = ListBox2.List(i) Then
          blnCheckFlag = True
          Exit For
        End If
      Next j
      If blnCheckFlag = False Then
        ListBox1.AddItem ListBox2.List(i)
        ListBox2.RemoveItem (ListBox2.ListIndex)
      End If
    End If
  Next i
  
End Sub

Private Sub cmdOk_Click() '列番号の取得
  For i = 0 To ListBox2.ListCount - 1
    MsgBox ListBox2 '←ここです
  Next i
End Sub

Private Sub cmdSend_Click() '送るボタンを押したときの操作
  
  For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then
      blnCheckFlag = False
      For j = 0 To ListBox2.ListCount - 1
        If ListBox2.List(j) = ListBox1.List(i) Then
          blnCheckFlag = True
          Exit For
        End If
      Next j
      If blnCheckFlag = False Then
        ListBox2.AddItem ListBox1.List(i)
        ListBox1.RemoveItem (ListBox1.ListIndex)
      End If
    End If
  Next i
  
End Sub

Private Sub UserForm_Initialize() 

  Dim rngRange As Variant
  Dim intDataColumns As Long 'データの数のカウント
  
  Worksheets("Sheet1").Select
  
  intDataColumns = Range("C2").CurrentRegion.Columns.Count
  
  rngRange = WorksheetFunction.Transpose(Worksheets("Sheet1").Range(Cells(2, 3), Cells(2, intDataColumns)))
  
  ListBox1.List = rngRange
  
End Sub
'ここまで
 ───────────────────────────────────────  ■題名 : Re:ListBoxにて・・・  ■名前 : つん <honey@sweetparty.ne.jp>  ■日付 : 02/11/1(金) 15:58  -------------------------------------------------------------------------
   いぬだわん さん、こんにちは

>cmdOk(OK)ボタンを押したときに、
>ListBox2のデータの列番号(Column)を知りたいので、
>MsgBoxを表示させたのですが、どうもうまくいかないようです。

えっと、これは、ListBox2にリストされた項目が、おのおのどの列のデータか?
ってのが知りたいんですよね?(文章変かな?)
ひとつひとつ値を見て、シートのデータとつきあわせて見ていくしかないと思います。
(・・・・・・・・・・多分)
こんな感じかな?

Private Sub cmdOk_Click()

  Dim Rng As Range

  For i = 0 To ListBox2.ListCount - 1
    Set Rng = Worksheets("Sheet1").Range("C2").CurrentRegion.Find(what:=ListBox2.List(i), lookat:=xlWhole)
    Debug.Print Rng.Column
  Next i
  
  Set Rng = Nothing

End Sub

それから・・・

>Private Sub UserForm_Initialize() 
>
>  Dim rngRange As Variant
>  Dim intDataColumns As Long 'データの数のカウント
>  
  ここで、いちいちセレクトする必要はないと思います。
>  Worksheets("Sheet1").Select
>  
  この行で、      ↓こんな感じで指定してやれば・・・
  intDataColumns = Worksheets("Sheet1").Range("C2").CurrentRegion.Columns.Count
>  
   この行の最後の部分、リストのデータはC2から始まってるから、「+2」が必要ではないですやろか?
  rngRange = WorksheetFunction.Transpose(Worksheets("Sheet1").Range(Cells(2, 3), Cells(2, intDataColumns+2)))
>  
>  ListBox1.List = rngRange
>  
>End Sub
>'ここまで

どーかなー?
 ───────────────────────────────────────  ■題名 : Re:ListBoxにて・・・  ■名前 : いぬだわん  ■日付 : 02/11/1(金) 17:06  -------------------------------------------------------------------------
   ▼つん さん:
こんにちは。

>>cmdOk(OK)ボタンを押したときに、
>>ListBox2のデータの列番号(Column)を知りたいので、
>>MsgBoxを表示させたのですが、どうもうまくいかないようです。

>えっと、これは、ListBox2にリストされた項目が、おのおのどの列のデータか?
>ってのが知りたいんですよね?(文章変かな?)

そうです。

ご教授いただいたコードでやってみたら、うまくできました。

そして、「他のこと」までご指摘頂き、
ありがとうございました。
勉強になりました。

いぬだわん、は、
いつも無理難題を質問しています。
Excel VBAの無理難題の限界はどこまでなんでしょうか?
ホントすみません・・・(汗)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 285