[[20180417155005]] 『fileを開かず値を取得する』(マクロン) ページの最後に飛ぶ

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

 

『fileを開かず値を取得する』(マクロン)

Excel VBAでご質問です。
BIGデータがあり開くだけでも時間がかかるために「Excel 4.0」
を使って書き込みをしたいです。

http://officetanaka.net/excel/vba/tips/tips28.htm
を参考に以下の構文を作成しました。

Sub Sample2()

 Dim mb As Workbook
 Dim SH As Worksheet
 Dim wb2 As Workbook
 Dim myfdr As String
 Dim gName As String
 Dim i As Long

 Set mb = ThisWorkbook
 Set SH = mb.ActiveSheet
 myfdr = ThisWorkbook.Path
 gName = Dir(myfdr & "\*あああ*.xls*")
 Set wb2 = myfdr & "\" & gName

 ' Set wb2 = Workbooks.Open(myfdr & "\" & gName)

   For i = 1 To ws1.Range("A" & Rows.Count).End(xlUp).Row 'A列2行目     〜最終行まで順番に処理

      'Cells(i, 1) = ExecuteExcel4Macro("'C:\test\[Book1.xls]       Sheet1'!R" & i & "C1")

       'Cells(i, 1) = ExecuteExcel4Macro("'ThisWorkbook.Path &       \[Book1.xls]Sheet1'!R" & i & "C1"

       Cells(i, 1) = ExecuteExcel4Macro("gName.[Book1.xls]          Sheet1'!R" & i & "C1"
    Next i

 End Sub

やりたいことはBOOKを開かず 同じフォルダーの「あああ」のファイルから

 データを転記したいです。
どなたか構文の訂正方法をご教示ねがいます。 

< 使用 Excel:Excel2013、使用 OS:Windows8 >


>データを転記したいです。
1つのエクセルファイルからどれくらいの量のセルを参照するつもりですか?
1つなら「Excel 4.0」の方が速いのかな。。。
開いても高速化の方法が少しはありそうだけど。。。

https://excel-ubara.com/excelvba5/EXCELVBA242.html

この辺も参考に。。。
https://books.google.co.jp/books?id=hFXtCgAAQBAJ&printsec=frontcover&hl=ja#v=onepage&q&f=false
↑の16P〜20P当り

あぁ、すでに田中さんのところを参考にしているのですね。。。

>やりたいことはBOOKを開かず 同じフォルダーの「あああ」のファイルから
ん?どのシートのどのセルの話ですか?

個人的にはブックを開かずにというのは有り得無くて、
開いたように見えてないだけかなと思ってます。(勘違いかも)
ファイルが一つでセルが100個とかだと開いた方が速そうですね。

(まっつわん) 2018/04/17(火) 16:29


まっつわんさん

「あああ」のファイル

データ量は 250,000KB 400,000行です
そのなかの、使用したいのは6列だけです。

A1からXX6までタイトル行。使用いたい列の中にも多数の結合があります。
取り出したデータは新規に同じフォルダーに名前付けて保存。
リンクでaccessに取り込み使用したいです。

(マクロン) 2018/04/17(火) 16:48


>accessに取り込み使用したい
ならば、別の方法が良いでしょう。

で、マクロはExcel側に書くのですか?
Access側から好きなように取り込めそうな気がしないでもないですが、
(同じオフィス製品なので連携の方法がありそう?)

ちょっとアクセスは解らないですが、

>A1からXX6までタイトル行。使用いたい列の中にも多数の結合があります。
結合っていうのはセルの結合のことですか?
それ、やめた方がいいと思います。

多分開いて整形しなおしてからアクセスに渡した方がよいかと。。。

あとは他の方の書き込みをお待ちください。

(まっつわん) 2018/04/17(火) 16:57


データ量がかなり多いですね。よくExcelで開けるものです。Accessでもちょっと重そうな量であり、DBサーバを用意すべき量ですよ。 それに、列数も648列? 多すぎです。 DB設計からやり直して、システム構築し直す事をお薦めします。

結合がある、とは、セル結合している部分があるのでしょうか? セル結合の無い、余分な列は削除した、素直な別ブック別シートを用意し、手作業でもマクロでも良いのでそこにデータをコピー。 それをDBサーバなりAccessなりの機能を使ってインポートさせましょう。

それと、ExecuteExcel4Macroを1行毎に呼び出すのは、止めた方が良いと思います。 ブックを開かなくとも、命令内ではファイルを開いたり、読み飛ばしたりしますから。 試す気にはなりませんが、普通にマクロでブックを開いてコピーする方が速いように思いますよ。(1セルだけ抜き出す、とかなら有効な方法ですが、40万回抜き出すなんて、無茶…)

どうしてもExecuteExcel4Macro案を捨てられないならば、元コードのままの1セル抜き出しでも良いので、それを1000回くらいループさせて(できれば後ろの行から)、処理時間を測定してみると良いでしょう。 得られた時間を400倍して、それが耐えられる時間かどうかで決められるかと思います。
(???) 2018/04/17(火) 17:54


皆様
ありがとうございます。一度「Power Query」を試しにやってみることにしました!!!
又何かありましたらよろしくお願いいたします。

(マクロン) 2018/04/17(火) 19:56


コメント返信:

[ 一覧(最新更新順) ]


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