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 'ここまで |
いぬだわん さん、こんにちは >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 >'ここまで どーかなー? |
▼つん さん: こんにちは。 >>cmdOk(OK)ボタンを押したときに、 >>ListBox2のデータの列番号(Column)を知りたいので、 >>MsgBoxを表示させたのですが、どうもうまくいかないようです。 >えっと、これは、ListBox2にリストされた項目が、おのおのどの列のデータか? >ってのが知りたいんですよね?(文章変かな?) そうです。 ご教授いただいたコードでやってみたら、うまくできました。 そして、「他のこと」までご指摘頂き、 ありがとうございました。 勉強になりました。 いぬだわん、は、 いつも無理難題を質問しています。 Excel VBAの無理難題の限界はどこまでなんでしょうか? ホントすみません・・・(汗) |