2017-06-21 10 views
0

私は、学校のコーススケジュールを検証するExcel VBAプログラムを作成しています。主要なコンポーネントは、コース番号(キー)とそのコースがスケジュールされた回数(アイテム)を追跡するグローバルディクショナリオブジェクトです。私は正常に作成し、辞書をロードしました。私はコースキーに関連付けられた値を検索しようとしていますが、私はこのサイトで見つかった1行の例を使用してこれを行うことができませんでした。辞書検索が失敗します

intCourseCnt = gdicCourses( "BAAC 100")

または

intCourseCnt = gdicCourses.Item( "BAAC 100")

どちらも:私はこのコード行を使用したいです実際には「BAAC 100」の部分は文字列変数ですが、コースをハードコードするとうまくいかないでしょう。代わりに、以下のkludgyループコードを使用してコース数を調べる必要があります:

Private Function Check_Course_Dup_Helper(strCourse As String) As Boolean 
    Dim k As Variant 
    Check_Course_Dup_Helper = False 
    ' Read thru dictionary. Look to see if only 1 occurrence then jump out. 
    For Each k In gdicCourses.Keys 
     If k = strCourse Then 
      If gdicCourses.Item(k) = 1 Then 
       Check_Course_Dup_Helper = True 
       Exit Function 
      End If 
      Exit Function 
     End If 
    Next 
End Function 

これを書き換えてループなしでアイテムの値を検索できる方法はありますか?

ありがとうございます。

+0

あなたは「どちらの仕事も」とは言っていますが、これはどういう意味ですか? 'gdicCourses(strCourse)'を実行するとどうなりますか? –

+1

また、この辞書に入力するコードを表示することも考えられます。 (おそらく先頭/末尾の空白や非印字文字など) –

+0

チェックする(1)辞書が存在し、それを含んでいるかどうか確認してください正確なキーと正確なキーが何であるかを再確認する - 空白が含まれているか(2)辞書をアルファベット順に入力してから検索する –

答えて

0

すぐにお返事ありがとうございます。以下の答え:

デビッド、私はstrCourse変数を使用する場合は0に等しい結果受信変数は同じであることができる(「BAAC 100」)コード値プログラムの実行中は「空」であるgdicCourses。また、次のように、辞書にコードを入力します。範囲変数を使用するFor-Each-Nextループが採用されているプログラム内の別の場所にある値に正しくアクセスできるため、問題があるとは思わない。空白文字と印刷できない文字は存在しません。 私は、文字列ではなく辞書内の位置を参照するために範囲を使用する必要があると考えています。私は考えることができるすべての組み合わせを試しましたが、値はまだ "空"です。

Set gdicCourses = New Scripting.Dictionary 
For Each c In Worksheets("Tables").Range("combined_courses").Cells 
    If Not (gdicCourses.Exists(c)) Then 
     gdicCourses.Add c, (Application.WorksheetFunction.CountIF(Range("MWF_Table_Full"), c 
          (Application.WorksheetFunction.CountIf(Range("TTh_Table_Full"), c))) 
    End If 
Next 
関連する問題