Excel VBA質問箱 IV

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

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


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

【55949】リストボックスの表示の仕方がわかりません かずお 08/5/25(日) 16:34 質問[未読]
【55950】Re:リストボックスの表示の仕方がわかりま... kanabun 08/5/25(日) 17:53 発言[未読]
【55951】Re:リストボックスの表示の仕方がわかりま... kanabun 08/5/25(日) 19:39 発言[未読]
【55953】リストボックスの表示の仕方がわかりません かずお 08/5/25(日) 20:54 質問[未読]
【55954】Re:リストボックスの表示の仕方がわかりま... kanabun 08/5/25(日) 21:04 発言[未読]
【55955】Re:リストボックスの表示の仕方がわかりま... かずお 08/5/25(日) 21:24 お礼[未読]
【55956】Re:リストボックスの表示の仕方がわかりま... kanabun 08/5/25(日) 21:49 発言[未読]

【55949】リストボックスの表示の仕方がわかりませ...
質問  かずお  - 08/5/25(日) 16:34 -

引用なし
パスワード
   一つの配列を二つのListBoxに表示していますが、煩雑さを無くすためListBoX1にはAをListBox2にはA以外を表示したいのですが「*」の使い方もわかりませんので、どの様にしたら良いか何方かご教授をお願いします。

  A列  B列
1 品名 …
2  C3  …
3  A2  … 
4  A4  …
5  C1  …
6  D1  …

ListBoX1にはAの行のみをListBox2にはA以外の行を表示したいのですが宜しくお願いします。

【55950】Re:リストボックスの表示の仕方がわかり...
発言  kanabun  - 08/5/25(日) 17:53 -

引用なし
パスワード
   ▼かずお さん:
>一つの配列を
> ListBoX1にはAを
> ListBox2にはA以外を表示したいのですが


>  A列  B列
>1 品名 …
>2  C3  …
>3  A2  … 
>4  A4  …
>5  C1  …
>6  D1  …
>
提示のサンプルで 1列目だけを配列に入れれば、
こんな風でもできます。(Excel2000 以降)

Private Sub UserForm_Initialize()
 Dim arry
 arry = Application.Transpose(Range("A2", Range("A65536").End(xlUp)))
 ListBox1.List = Filter(arry, "A", True)
 ListBox2.List = Filter(arry, "A", False)
End Sub

【55951】Re:リストボックスの表示の仕方がわかり...
発言  kanabun  - 08/5/25(日) 19:39 -

引用なし
パスワード
   上の例は サンプルデータではうまくいきますが、

BA200
CA100
D-00A

というようなデータではうまく仕分けできません。

文字通り 「Aで始まる」で仕分けるときは、 一例ですが、
Like 演算子でつぎのように 判定します

Private Sub UserForm_Initialize()
 Dim arry, i As Long, iMax As Long
 Dim List1() As String, k1 As Long
 Dim List2() As String, k2 As Long
 
 arry = Application.Transpose(Range("A2", Range("A65536").End(xlUp)))
 iMax = UBound(arry)
 ReDim List1(1 To iMax)
 ReDim List2(1 To iMax)
 For i = 1 To UBound(arry)
   If arry(i) Like "A*" Then '← ここで 判定
     k1 = k1 + 1
     List1(k1) = arry(i)
   Else
     k2 = k2 + 1
     List2(k2) = arry(i)
   End If
 Next
 ReDim Preserve List1(1 To k1)
 ReDim Preserve List2(1 To k2)
 ListBox1.List = List1()
 ListBox2.List = List2()
End Sub

【55953】リストボックスの表示の仕方がわかりませ...
質問  かずお  - 08/5/25(日) 20:54 -

引用なし
パスワード
   kanabunさん お世話になります。お休みの日にありがとう御座います連絡が遅くなりすみません。結果を申しあげますと

実行時エラー'9':
インデックスが有効範囲にありません。 となり、UserFormが表示されません

Re Dim ステートメントで範囲指定をして Like 演算子で「Aと何か」をListBox1へ
そうでなければListBox2へ という感じはわかるのですが… これは範囲がおかしいという事でしょうか。宜しくお願いします。

【55954】Re:リストボックスの表示の仕方がわかり...
発言  kanabun  - 08/5/25(日) 21:04 -

引用なし
パスワード
   ▼かずお さん:
こんばんは。

>実行時エラー'9':
>インデックスが有効範囲にありません。 となり、UserFormが表示されません

エラーの出る行は
> arry = Application.Transpose(Range("A2", Range("A65536").End(xlUp)))
の行ですか?

【55955】Re:リストボックスの表示の仕方がわかり...
お礼  かずお  - 08/5/25(日) 21:24 -

引用なし
パスワード
   kanabunさん ごめんなさい。 原因は Aの前にスペースが入っていました。

大変ご迷惑をお掛けし申し訳無く思っています。
本当にありがとう御座いました。これを基に発展させたいと思っています。
今後ともご指導のほど宜しくお願いいたします。

ありがとう御座いました。

【55956】Re:リストボックスの表示の仕方がわかり...
発言  kanabun  - 08/5/25(日) 21:49 -

引用なし
パスワード
   ▼かずお さん:
>kanabunさん ごめんなさい。 原因は Aの前にスペースが入っていました。
>
あ、そちらのほうで インデックスエラーでしたか。。

Aで始まるアイテムが一つもないことは多いにありうることなので、
If文で ひとつもヒットしなかったら、ReDim 以降は実行しないことに
しときましょうか?

 If k1 Then
   ReDim Preserve List1(1 To k1)
   ListBox1.List = List1()
 End If
 If k2 Then
   ReDim Preserve List2(1 To k2)
   ListBox2.List = List2()
 End If

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