Excel (VBA)

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

 
(Windows 10 Pro : Excel 2010)
LIKEで全部が検索されてしまいます
投稿日時: 19/03/10 09:43:37
投稿者: andoandoando

お世話になっております。
 
下記VBAを組みました。
 
調査用のC列には飛び飛びでデータが入っています。
そこから必要なものだけをリストに抜き出したいのです。
abcと入っているものを抜き出そうとしても、まるでC列をコピペしたようにリストに移されます。
それでまったく入っていない"aaaaaaaaaaaaaaaaaaaaaaaaaa"と入れたのですがこれでも同じようにC列がすべて抜き出されてリストに表示されます。
ary(ix, 3)は<subscript OUT OF range> と出ますのでこれが悪いのだと思うのですが。
たぶんこの状態だと飛ばさないといけないのがそのまま処理されているのかなと思います。
 
以上よろしくお願いいたします。
 
 
On Error Resume Next
Worksheets("調査用").Select
        Set rng = Range(Cells(4, 3), Cells(Rows.Count, 3).End(xlUp))
        ary = rng
        For ix = LBound(ary) To UBound(ary)
            If ary(ix, 3) Like "aaaaaaaaaaaaaaaaaaaaaaaaaa" Then
             Worksheets("リスト").Cells(j, 1) = ary(ix, 1)
            j = j + 1
            End If
        Next

回答
投稿日時: 19/03/10 10:29:30
投稿者: simple

まず、デバッグ中は
On Error Resume Next はコメントにして無効化してください。
エラーメッセージが抑止されて必要な情報が伝わりません。
 
> ary(ix, 3)は<subscript OUT OF range> と出ますので
インデックスが範囲を超えているということですね。
 
ary変数は何列あるのですか?
ary(ix, 3)が間違いでしょう。
もしくはaryの設定が間違いでしょう。

回答
投稿日時: 19/03/10 10:56:26
投稿者: WinArrow
投稿者のウェブサイトに移動

> Set rng = Range(Cells(4, 3), Cells(Rows.Count, 3).End(xlUp))
で、C列のセルが「rng」にセットされています。
 
それを
> ary = rng
で「ary」にセルの値を取り込んでいます。
ということは、「ary」は1列の配列ということになります。
 
結果的には、
 ary = Range(Cells(4, 3), Cells(Rows.Count, 3).End(xlUp)).Value
でも同じことです。
従って
>ary(ix, 3)
は間違いです。
ary(ix, 1)
ですね・・・
 
それから、Like を使った曖昧検索のときには
ワイルドカードを指定します。
>Like "aaaaaaaaaaaaaaaaaaaaaaaaaa"
は、= "aaaaaaaaaaaaaaaaaaaaaaaaaa" と同じことです。
 
 
>たぶんこの状態だと飛ばさないといけないのがそのまま処理されているのかなと思います。
この意図がスキップの事だとしたら
エラートラップはやめましょう。

投稿日時: 19/03/10 13:36:52
投稿者: andoandoando

simple 様
WinArrow 様
 
早速のご回答ありがとうございます。
 
動きました。
ありがとうございます。
 
配列についてわかってないのに使ってみたのですが、間違ってましたね。
ありがとうございました。