電子書籍の厳選無料作品が豊富!

過去の質問で色々と助言を受け、以下のプログラムを作成しました。エラーはでないのですが
最後のMsgBoxで何も出てきません。

詳しい方教えていただけないでしょうか。




'1号機の品名を重複分もすべて格納する
Dim No1_M_number(100) As Variant


'1号機の品名で重複分を除いた配列
Dim M_number() As Variant

※色々ループ文で処理をしてNo1_M_number(0)~No1_M_number(67)
まで品名が格納されている。


'関数に配列を渡し、重複分除去



M_number = deleteDuplicateItem(No1_M_number())

Dim s As String
s = ""

s = Join(M_number, vbCrLf)

MsgBox s  ←ポップアップに何も表示されない



Function deleteDuplicateItem(ary() As Variant) As Variant()
'#####################################################################
'配列から重複している要素を削除する
'Dictionaryを使用するので、Microsoft Scripting Runtimeの参照設定が必要
'---------------------------------------------------------------------
'引数 :ary 重複を削除したい配列
'#####################################################################

 Dim Dic As Dictionary
 Set Dic = New Dictionary
 
 Dim i As Long
 
 For i = 0 To UBound(ary)
  If Dic.Exists(ary(i)) = False Then
   Dic.Add ary(i), ary(i)
  End If
 Next i
  
 deleteDuplicateItem = Dic.Keys()
 
 Set Dic = Nothing
 
End Function

A 回答 (12件中11~12件)

とりいそぎ。

要件だけ。

>For文途中で
>MsgBox m_Counter & "番目の品番は" & No1_M_number(m_Counter) & "です。
>のようにすると、以下のポップアップが1番目から順にでます。

>>「No1_M_number()」変数に配列として格納されているか
確かに、こうは書きましたが、それは、それは、正しく格納されていたら、当然、そのようにでます。

M_number = deleteDuplicateItem(No1_M_number()) 'ユーザー定義関数
の後の出力を、ブレークポイントで、ローカルウィンドウの変数の中身を見てください、と書いたつもりだったのですが。
    • good
    • 0
この回答へのお礼

申し訳ありません。ブレークポイントの使い方を調べたのですが、いまいちわからず、ツールバーの表示からローカルウィンドウをクリックしても何も起こらなかったため、変数に配列が格納されているのか確認できませんでした。他に確認方法はないでしょうか。

お礼日時:2019/11/13 17:31

以下で示すように、


コードの中の---ここの時点で、「No1_M_number()」変数に配列として格納されているか
ということです。デバッグ-ブレークポイントを設けて、ローカルウィンドウで、
変数の中身を確認します。問題は、配列を入れる部分が分からないことです。

Sub Test2()
 Dim No1_M_number(100) As Variant
'-------------------------------'私が試した方法
 For i = 1 To 100
  No1_M_number(i - 1) = Cells(i, 1).Value
 Next
'---------------------------------
 '1号機の品名で重複分を除いた配列
 Dim M_number() As Variant
 '関数に配列を渡し、重複分除去
'--------------<---ここの時点で、「No1_M_number()」変数に配列として格納されているか
 M_number = deleteDuplicateItem(No1_M_number())

 Dim s As String
 s = ""
 s = Join(M_number, vbCrLf)
 MsgBox s
End Sub
「VBA 配列で重複した単語が格納されてい」の回答画像1
    • good
    • 0
この回答へのお礼

途中の式は文が多いためここに入らないですが、For文途中で
MsgBox m_Counter & "番目の品番は" & No1_M_number(m_Counter) & "です。
のようにすると、以下のポップアップが1番目から順にでます。

6番目の品番は559135です。
7番目の品番は559135です。

30番目の品番は2628です。

お礼日時:2019/11/13 13:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!