Excel VBA質問箱 IV

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

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


9396 / 13644 ツリー ←次へ | 前へ→

【27556】ComboBoxの重複 YU 05/8/11(木) 17:10 質問[未読]
【27559】Re:ComboBoxの重複 Jaka 05/8/11(木) 17:41 発言[未読]
【27560】Re:ComboBoxの重複 YU 05/8/11(木) 17:46 お礼[未読]
【27565】Re:ComboBoxの重複 ichinose 05/8/11(木) 20:36 発言[未読]
【27568】Re:ComboBoxの重複 kobasan 05/8/12(金) 9:01 質問[未読]
【27589】Re:ComboBoxの重複 kobasan 05/8/12(金) 15:43 発言[未読]
【27605】Re:ComboBoxの重複 ichinose 05/8/12(金) 17:19 発言[未読]
【27609】Re:ComboBoxの重複 kobasan 05/8/12(金) 19:28 お礼[未読]
【27571】Re:ComboBoxの重複 YU 05/8/12(金) 10:00 お礼[未読]

【27556】ComboBoxの重複
質問  YU  - 05/8/11(木) 17:10 -

引用なし
パスワード
   こんにちわ。
コマンドボタンに表示するものをダブらせない方法を教えていただけないでしょうか。
過去ログにあるはず!!と思ったんですが、見つけられず、途方にくれてしまいました・・・。すいません。

いろいろ参照して、下記のコードができたんですが、
オブジェクト変数またはWithブロックが設定されていません
と出るんです。

sub aaa ()
'入力されているデータを拾い出してくる↓
Ua_IMax = Worksheets("顧客一覧").Range("D65536").End(xlUp).Row
Set Ua_IRange = Worksheets("顧客一覧").Range("D2:D" & Ua_IMax)
On Error Resume Next
For Each Ua_IR In Ua_IRange
  MyColl.Add Ua_IR, CStr(Ua_IR.Value)
Next
On Error GoTo 0
MemberCount = MyColl.Count
Application.EnableEvents = False
  ComboBox2.Clear
  For Ua_Ii = 1 To 20
    ComboBox2.AddItem MyColl(Ua_Ii).Value
  Next Ua_Ii
  Application.EnableEvents = True

End Sub

どうかよろしくお願いしますm__m

【27559】Re:ComboBoxの重複
発言  Jaka  - 05/8/11(木) 17:41 -

引用なし
パスワード
   もう帰るので情報だけ..。
ここに少し書いてあります。
因みにMatchは、配列、リストボックス相手だと5461行分だっけか?までしか、使えません。

オートフィルタの絞込み
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=84;id=FAQ

【27560】Re:ComboBoxの重複
お礼  YU  - 05/8/11(木) 17:46 -

引用なし
パスワード
   ▼Jaka さん:
>もう帰るので情報だけ..。
>ここに少し書いてあります。
>因みにMatchは、配列、リストボックス相手だと5461行分だっけか?までしか、使えません。
>
>オートフィルタの絞込み
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=84;id=FAQ

ありがとぉございますm__m
これ、過去ログで見つけてました!
難しそうなので逃げてました・・・すいません・・・
あぁ、こんなんぢゃ上達しませんね・・・

【27565】Re:ComboBoxの重複
発言  ichinose  - 05/8/11(木) 20:36 -

引用なし
パスワード
   YU さん、Jakaさん、こんばんは。

>難しそうなので逃げてました・・・すいません・・・
>あぁ、こんなんぢゃ上達しませんね・・・

>いろいろ参照して、下記のコードができたんですが、
オブジェクト変数またはWithブロックが設定されていません
と出るんです。
せっかくコードを投稿されたのですから上記のエラーがコードのどこで
発生したかも記述してください。
わかりやすく質問を記述する事も上達する一歩だと
私は思っています。


'================================
Sub aaa()
'入力されているデータを拾い出してくる↓
  Dim mycoll As New Collection
' ↑これを入れてください
  Ua_IMax = Worksheets("顧客一覧").Range("D65536").End(xlUp).Row
  Set Ua_IRange = Worksheets("顧客一覧").Range("D2:D" & Ua_IMax)
  On Error Resume Next
  For Each Ua_IR In Ua_IRange
   mycoll.Add Ua_IR, CStr(Ua_IR.Value)
   Next
  On Error GoTo 0
  MemberCount = mycoll.Count
  Application.EnableEvents = False
  ComboBox2.Clear
  For Ua_Ii = 1 To MemberCount
   ComboBox2.AddItem mycoll(Ua_Ii).Value
   Next Ua_Ii
  set mycoll=nothing '←これも付けといて・・・
  Application.EnableEvents = True

End Sub

【27568】Re:ComboBoxの重複
質問  kobasan  - 05/8/12(金) 9:01 -

引用なし
パスワード
   みなさん おはようございます。

(1)について、質問させてください。

>  On Error Resume Next
>  For Each Ua_IR In Ua_IRange
>   mycoll.Add Ua_IR, CStr(Ua_IR.Value) '<==(1)
>   Next
>  On Error GoTo 0

(1)の部分は下のどれでも、無重複データを作ることができました。
mycoll.Add Ua_IR, CStr(Ua_IR.Value)
mycoll.Add Ua_IR, Ua_IR.Value
mycoll.Add Ua_IR, Ua_IR.text
しかし、
mycoll.Add Ua_IR
mycoll.Add Ua_IR.Value
mycoll.Add Ua_IR.text
では、リストは作れますが、エラーが発生しないので、無重複データを作ることはできませんでした。

Collectionでは、重複データを入れようとするとエラーが発生します。
これを利用して、無重複データができることはわかります。

addのヘルプを見ても知りたい点を見つけることができなかったので、
mycoll.Add Ua_IR, CStr(Ua_IR.Value)
             ~~~~~~~~~~~~~~~~~
~~~~のはたらきと、どのようなコレクションができているのか、
どなたか解説してくださいませんか。

【27571】Re:ComboBoxの重複
お礼  YU  - 05/8/12(金) 10:00 -

引用なし
パスワード
   ▼ichinose さん:
>YU さん、Jakaさん、こんばんは。
>
>>難しそうなので逃げてました・・・すいません・・・
>>あぁ、こんなんぢゃ上達しませんね・・・
>
>>いろいろ参照して、下記のコードができたんですが、
>オブジェクト変数またはWithブロックが設定されていません
>と出るんです。
>せっかくコードを投稿されたのですから上記のエラーがコードのどこで
>発生したかも記述してください。
>わかりやすく質問を記述する事も上達する一歩だと
>私は思っています。
>
>
>'================================
>Sub aaa()
>'入力されているデータを拾い出してくる↓
>  Dim mycoll As New Collection
>' ↑これを入れてください
>  Ua_IMax = Worksheets("顧客一覧").Range("D65536").End(xlUp).Row
>  Set Ua_IRange = Worksheets("顧客一覧").Range("D2:D" & Ua_IMax)
>  On Error Resume Next
>  For Each Ua_IR In Ua_IRange
>   mycoll.Add Ua_IR, CStr(Ua_IR.Value)
>   Next
>  On Error GoTo 0
>  MemberCount = mycoll.Count
>  Application.EnableEvents = False
>  ComboBox2.Clear
>  For Ua_Ii = 1 To MemberCount
>   ComboBox2.AddItem mycoll(Ua_Ii).Value
>   Next Ua_Ii
>  set mycoll=nothing '←これも付けといて・・・
>  Application.EnableEvents = True
>
>End Sub

ありがとぅございます。出来ました^^
「mycollを何に宣言すればいいのかわからないんです」
っていうのも明記してなかったです・・・。すいません。気をつけます。

いつもわけのわからない文章だけで理解して、
返信してくださる回答者の方に、感謝し、尊敬致します。
ありがとうございましたm__m

【27589】Re:ComboBoxの重複
発言  kobasan  - 05/8/12(金) 15:43 -

引用なし
パスワード
   みなさん 今日は。

正しいかどうかは別として、次の様な理解に達しました。
間違っていたら教えてください。


  '-----同じ要素を追加しようとすると、エラーが発生するのを利用
  On Error Resume Next
  For Each c In Sheets("Sheet1").Range("A2", LastC)
     mycoll.Add c, c       '<===  '一意データ作成
    'mycoll.Add c, "a"      '<===おもしろい動きをしました
    'mycoll.Add c, c.Value    '<===
    'mycoll.Add c, c.Text    '<===
    'mycoll.Add c, CStr(c.Value) '<===
    'mycoll.Add [Collectionの要素], [Collectionの値(キー)](この値で同じか調べている)
    'エラー内容
    'このキーは既にこのコレクションの要素に割り当てられています
    '
    '
    '[Collectionの要素], [Collectionの値(キー)]の言葉が正しいかどうかは別として、
    'エラー内容といろいろな試行錯誤から、次のようなことが分かりました。
    'Collectionには、[Collectionの要素]が格納されて、
    '[Collectionの値(キー)]で、値が同じか調べているみたいだというのが分かりました。
    
    
  Next
  On Error GoTo 0
  '-----
  Application.EnableEvents = False
  ComboBox1.Clear
  For i = 1 To mycoll.Count
     ComboBox1.AddItem mycoll(i).Value  '<===
    'ComboBox1.AddItem mycoll(i).Address  '<===
  Next

【27605】Re:ComboBoxの重複
発言  ichinose  - 05/8/12(金) 17:19 -

引用なし
パスワード
   ▼kobasan さん:
こんにちは。
>正しいかどうかは別として、次の様な理解に達しました。
>間違っていたら教えてください。
ざっと見た限り、正しい解釈だと私は思います。

Keyとは「位置を表す数値の代わりに使用できる重複しない文字列」です。
この性質を利用して重複チェックを行っていると言う事です。
よって、Keyを省略してしまうと、重複チェックが出来ない
ということになります。


他にもDictionary オブジェクトを使っても可能です。
このサイトを検索すればコード参照が出来ると思います。

【27609】Re:ComboBoxの重複
お礼  kobasan  - 05/8/12(金) 19:28 -

引用なし
パスワード
   ichinose さん 今晩は。
説明ありがとうございます。

>Keyとは「位置を表す数値の代わりに使用できる重複しない文字列」です。
>この性質を利用して重複チェックを行っていると言う事です。
>よって、Keyを省略してしまうと、重複チェックが出来ない
>ということになります。

Keyの事がよく分かりました。

>他にもDictionary オブジェクトを使っても可能です。

Dictionaryも当たってみます。
ありがとうございました。

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