[[20181018103228]] 『VBA 多次元配列検索』(パオ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA 多次元配列検索』(パオ)

条件など詳細を提示できていないのですが、
処理の方法の考え方のアドバイスを頂きたく質問させていただきます。
(多次元)配列の扱いが理解できていません。


 複数ブックから(各ブックのシートは1枚)、セルの入力データを取得し、
 取得したデータを、重複検索や、条件毎に応じた検索を行い、
 処理を行っていきたいのです。

Typeを利用し、(1:ブック名 As String)(2:cellData As Variant)で
データ取得はできました。
 *ブック名も検索後の処理で必要になります。
 *項目を列に配置し、データ入力を行っていってる表。
 *ブック数が50ファイル程あります。

A.重複データの検索は、検索したい項目を、別の配列に1次元配列で、
  データを仕込んで、並べ変えを行い、<ForNext>でピックアップし、
  抽出したキーデータから、最初に取得した、  
  配列データを<Find>検索すればよいでしょうか?
  
  (検索したいデータは、キー番号、キー番号アルファベットが
   ついているデータ)

B.多次元配列で取得したデータ検索を<ForEach>で処理する場合は、
  どのように範囲していすればよいのでしょうか?

< 使用 Excel:Excel2016、使用 OS:unknown >


検索のたびに50ファイル開いていては非効率的ですから、一つのシートにまとめるコードと、検索するコードは別々に作ったほうが良いと思います。

別途Findするコードをかけば、非常にシンプルになります。
そうすればVariantに取り込むのも一発ですし、メモリ上で検索したい場合も便利です。

重複データの検索は一次元配列で処理するよりも、RemoveDuplicatesメソッドを使うか、Dictionaryオブジェクトを使ったほうが高速です。
※RemoveDuplicatesはバグがあるので、私はDictionaryのほうが好きです。

多次元データをForEachするということは行列関係なしに全件調べるということですかね?
特定の行、特定の列だけをForEachすることは出来ませんので、Forで対応すれば良いと思います。
たとえば・・・

    'i:行 j:列と仮定して

    '3列目に固定
    j = 3
    For i = LBound(cellData, 1) To UBound(cellData, 1)  ' ,1が行(一次元目)の要素数
        If cellData(i, j) = "word" Then
            '〜
        End If
    Next

    '5行目に固定
    i = 5
    For j = LBound(cellData, 2) To UBound(cellData, 2)  ' ,2が列(二次元目)の要素数
        If cellData(i, j) = "word" Then
            '〜
        End If
    Next

(名無し) 2018/10/18(木) 11:39


 >取得したデータを、重複検索や、条件毎に応じた検索を行い、 
 >処理を行っていきたいのです。 

 どの様な処理か不明ですが、その後どうするのですか?
(seiya) 2018/10/18(木) 12:04

回答ありがとうございました。

その後の処理は、今想定しているのは、下記内容です。
・検索(多くて2列)を指定し、キー検索し、一致データを出力
・別途ブックに記載の、複数キー(行)と一致するデータを出力

頂いたアドバイスを元に、
コード作成を頑張ってみます。

(パオ) 2018/10/19(金) 10:50


 私ならADO接続、SQLで問い合わせ、又はFilterでRecordSetを抽出します。
(seiya) 2018/10/19(金) 11:14

ありがとうございます。

頂いたアドバイスを勉強し、
チャレンジしてみます。

(パオ) 2018/10/19(金) 17:37


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.