[[20160308184916]] 『ブックを開かずにデータを取得する方法』(せな) ページの最後に飛ぶ

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

 

『ブックを開かずにデータを取得する方法』(せな)

Private Sub CommandButton1_Click()
Dim sh1, sh2
Set sh1 = Workbooks("データ表.xlsx").Sheets("Sheet1")
Set sh2 = Workbooks("入力表.xlsx").Sheets("Sheet1")
d = sh1.Range("A65536").End(xlUp).Row
On Error Resume Next
For i = 2 To d

If sh1.Cells(i, "AB") = UserForm1.TextBox1 Then

    sh2.Cells(2, "A") = sh1.Cells(i, "B")
    Exit For
End If
If sh1.Cells(i, "AE") = UserForm1.TextBox1 Then
    sh2.Cells(2, "A") = sh1.Cells(i, "B")
    Exit For
End If
If sh1.Cells(i, "AH") = UserForm1.TextBox1 Then
    sh2.Cells(2, "A") = sh1.Cells(i, "B")
    Exit For
End If
Next i
End Sub

データ表=C:\Users\※※※\※※※\
入力表=C:\Users\△△△\※※※\

ユーザーフォーム1のテキストボックス1と同じ文字列がデータ表のAB列にあればB列のデータを入力表のA2に、AB列になければAE列で探し、AE列になければAH列で探す、、ということをしています。

ブックを開かずにデータを取得する方法を教えてください。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 このテーマ、相当魅力的なんでしょうねぇ。過去から、何度となく、議論されています。
 最近では、

[[20151023213330]]? 『別Bookからのデータ転記について』(エイチ・アイ)

 ここでも、掘り下げた検証が行われていますので、必要性があるなら、目を通してください。

 特段の理由(ブックのサイズが何十メガもあり開くのが大変 等々)がない限り、素直に開いて処理するのが
 ベストだと思いますがね。

(β) 2016/03/08(火) 19:19


Application.ScreenUpdatingをFalseにして、とApplication.Calculationを手動にして、
ループの外で1回だけUserForm1.TextBox1を変数に代入(ループ内は変数と比較)するだけでも、高速化できそうですよ?
他の方法を尋ねるのは、VBAの通常命令ではどうしても対応しきれない状態になってからでも良いかと。

また、過去検証していない案として、ブックをZIPファイルとして扱い、ここからSheet1.xmlを展開。
MSXML2.DOMDocumentオブジェクトでも使って、直接XMLファイルを読み込んで処理、なんて方法もありそうです。
(???) 2016/03/09(水) 11:13


コメント返信:

[ 一覧(最新更新順) ]


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