Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
セルを選択している範囲の担当者名の重複していない一覧を利用したいのです。
投稿日時: 23/10/06 14:38:26
投稿者: takatada72

お疲れさまです。
 
VBAの理解が低い中で、ネットで見つけた内容を構築しながら、やっておりますので、
あまり、難しい回答は、避けて頂けると幸いです。
 
今回、Excel のシートに、担当者名が含められた一覧表があり、発売月などのフィルター
をかけたあとで、関係している行の担当者をセルで範囲を指定します。その後、下記の
マクロを実行して、重複していない担当者名と件数を関数に記憶させたいと思っております。
 
なぜか、最終行近くで、「Property Let プロシージャが定義されておらず、Property Get プロシージャからオブジェクトが返されませんでした。」のエラーが出るのですが、VBAのレベルが低い自分には
何を言っているのかがわかりません。

 
教えて頂ける方、ございますでしょうか
 
エラー箇所:
   If count > 0 Then firstItem = dict.keys(0)
    If count > 1 Then secondItem = dict.keys(1)
 
 
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−下記がこーどです。
  Dim rng As Range
    Dim cell As Range
    Dim dict As Object
    Dim count As Integer
    Dim firstItem As Variant
    Dim secondItem As Variant
 
    ' 選択範囲を設定
    Set rng = Selection
 
    ' 辞書オブジェクトを作成
    Set dict = CreateObject("Scripting.Dictionary")
 
    ' 選択範囲のセルをループ
    For Each cell In rng.SpecialCells(xlCellTypeVisible)
        ' セルが空でない場合、辞書に追加
        If Not IsEmpty(cell.Value) Then
            dict(cell.Value) = 1
        End If
    Next cell
 
    ' 重複しない担当者一覧を表示
    MsgBox Join(dict.keys, vbCrLf)
 
    ' 表示されている数を取得
    count = dict.Count
msgbox "件数:" & count
 
    ' 一番上と二番目のアイテムを取得(存在する場合)
    If count > 0 Then firstItem = dict.keys(0)
    If count > 1 Then secondItem = dict.keys(1)

回答
投稿日時: 23/10/06 15:06:19
投稿者: simple

    Dim ary As Variant
    ary = dict.keys
    If count > 0 Then firstItem = ary(0)
    If count > 1 Then secondItem = ary(1)
のように書くことを推奨します。

回答
投稿日時: 23/10/06 15:24:00
投稿者: higejee

 レイトバインディングのままなら simple さんの指摘通りですが、"Microsoft Scripting.Runtime" を参照設定して、
  
 Dim dict As Object → Dim dict As New Dictionary
  
とするだけ(この場合あとに出てくる Set dic = ... は不要)でもエラー回避できます。

投稿日時: 23/10/06 15:37:26
投稿者: takatada72

simpleさん、higejeeさん 早速、ありがとうございました。
 
higejeeさん 
ビックリです。
 
 Dim dict As Object → Dim dict As New Dictionaryでエラーがでなくなりました。
好きなように記録できました。
ありがとうございました。
 
simpleさん
ご丁寧に、コードを記載して頂きましてありがとうございました。
 
色々な対応方法を記録させて頂ました。
 
みなさま、ありがとうございました。