エクセルをデータベースとして扱うのは可能ですか?

解決


かかし  2004-06-25 00:22:29  No: 84185

2つのエクセルシートより、1つのエクセルシートを作成しております。
  基本的には作成できたのですが、処理速度が遅くて困っております。

  AとBのエクセルシートがあり、
  r=1
  として    
  エクセル1の(r,A)のセル内の値をエクセル2のA列の中から検索していって、
  あればエクセル2の該当する行のC列に入っている値を抽出する。
  という処理を行っているのですが(分かりにくいですね)
  毎回、エクセル2のA列の値の全件検索を行ってしまっています。
  (見つかればそこで検索処理は終了するのですが、ない場合は一番下まで検索して、ない用の処理を行っています。)

  ACCESSとかだとSQL文を使用して、検索できるのですが、
  EXCELはデータベースとして扱うのはできるのですか?
  私は、全件検索しか方法はないかなと思っていたのですが。。。
  
  もし可能であれば、なにかヒントを御願い致します。


魔界の仮面弁士  2004-06-25 00:38:09  No: 84186

> EXCELはデータベースとして扱うのはできるのですか?

一応は、ADOやDAOのRecordsetとして扱う事ができますが、
個人的には、あまりお奨めしません。

素直に、ExcelのFindメソッドを使って検索された方が良いかと。


まさお  2004-06-25 18:35:59  No: 84187

内容からすると、For 〜 Next 文を使用しているようですネ。
  行が多いと時間がかかるでしょうネ。

  魔界の仮面弁士さんのおっしゃるように Find を使用した方がはるかに
高速になりますが、追加でアドバイスです。

  Excelシートの大きさにもよりますが、シート全体を検索するより
検索対象の場所が決まっているのなら、Rangeを設定するとより高速に
なります。

  かかしさんの場合のように「エクセル2のA列の中から」と場所が決まっ
ているのなら
    Dim RA as Range
    Dim var as Variant
    Set RA = Range("A1:Axxx")  ' xxx=最終行
    Set var = RA.Find(what:="検索word")

  としたほうが

    Set var = Cells.Find(what:="検索word")

より、高速に検索できます。


かかし  2004-06-25 20:40:27  No: 84188

魔界の仮面弁士様  まさお様
  ご回答有難う御座いました。
  無事、解決することができました。

  また、まさお様の回答を踏まえ、処理速度が非常に上がりました。
  ご参考までに、作成した結果を以下に記載します。

  Dim RA As Range
  Dim var As Variant
  Set RA = Range("A1:A5000")    ' 5000=最終行
  Set var = RA.Find(what:=uketsuke)
                    
  m = xlSheet2.Cells.Find(uketsuke).Row
  n = xlSheet2.Cells.Find(uketsuke).Column
  xlSheet.Cells(r,s).Value = xlSheet2.Cells(m, n).Value
  
  'r・sは変数として宣言
  '(r,s)のワクに検索した値をはめ込む


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加