ここから本文です

重複しないリストを作る方法(マクロ)が上手く動きません。

you take Aさん

2019/5/2712:35:52

重複しないリストを作る方法(マクロ)が上手く動きません。

A1:FM120の表があります。1行目には項目が並んでいて、データは2行目から120行目まであります。この表のD列(column:4)からFM列(column:169)までの項目について、92行目~120行目までのデータから重複しないリストを、各列の122行目以降から作りたいのですが、これを走らせると、下から4行目の「Cells(i + 30, j) = A(i)」の部分で「実行時エラー'9':インデックスが有効範囲にありません。」というエラーが出て上手くいきません。どう直したら良いのか教えてください。
エクセルのバージョンは良く分からないのですが、最新版より一つ前のバージョンです。

Sub list()
Dim A As New Collection, i As Long, j As Long
On Error Resume Next

For j = 4 To 169
For i = 92 To 120
A.Add Cells(i, j), Cells(i, j)
Next i
On Error GoTo 0
For i = 92 To 120
Cells(i + 30, j) = A(i)
Next i
Next j
End Sub

閲覧数:
65
回答数:
4

違反報告

ベストアンサーに選ばれた回答

tri********さん

2019/5/2713:35:19

こういうことでしょうか。

Sub list()
Dim A As New Collection, i As Long, j As Long
Dim k As Long

For j = 4 To 169
For i = 92 To 120
On Error Resume Next
A.Add Cells(i, j).Value, CStr(Cells(i, j).Value)
On Error GoTo 0
Next i
i = 92
For k = 1 To A.Count
Cells(i + 30, j) = A(k)
i = i + 1
Next k
Set A = New Collection
Next j
End Sub

エラーがでるのはAをi=92~120でまわしているからです。
実際にはAは1からはじまって重複しない数までしか存在しません。
存在しない範囲が指定されたので"インデックスが有効範囲にありません"になります。
別途カウンタ変数を使って割り当てます。For k = 1 To A.Count

その他、Error Resume Next の位置がおかしいです。コレクションに追加するAddメソッドの直前に入れないと循環した2巡目以降でエラーになります。

Colledtion のキーには文字列しか入れられないので Cstr を入れておいたほうがいいです。

2巡目以降でCollection を再取得するので New Collection でリセットさせます。

質問した人からのコメント

2019/6/3 06:35:55

丁寧なご説明ありがとうございました。

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

hmm********さん

2019/5/2713:20:42

For i = 92 To 120
Cells(i + 30, j) = A(i)
Nex i
A(i)だとCollectionオブジェクトの92番目の要素から120番目の要素を取得しているが
(基数は1)
また列が変わった時の対応(リセット)も必要かな

tok********さん

2019/5/2712:53:03

本当にそこが原因ですか?
On Error Resume Nextを外して確認してみましょう。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ine********さん

2019/5/2712:45:59

Nextの位置が違う、

For j = 4 To 169
For i = 92 To 120
A.Add Cells(i, j), Cells(i, j)
Next i
Next j

これで、配列を格納でしょう

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる