Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5590 / 13645 ツリー ←次へ | 前へ→

【49912】データを転記 mega 07/6/27(水) 21:59 質問[未読]
【49914】Re:データを転記 neptune 07/6/27(水) 22:14 発言[未読]
【49916】Re:データを転記 mega 07/6/27(水) 22:25 発言[未読]
【49923】Re:データを転記 neptune 07/6/28(木) 9:30 発言[未読]
【49929】Re:データを転記 mega 07/6/28(木) 21:38 発言[未読]
【49933】Re:データを転記 neptune 07/6/28(木) 22:33 発言[未読]
【49995】Re:データを転記 mega 07/7/2(月) 20:53 お礼[未読]
【49915】データを転記 mega 07/6/27(水) 22:19 質問[未読]

【49912】データを転記
質問  mega  - 07/6/27(水) 21:59 -

引用なし
パスワード
   こんばんは。
いつも勉強させていただいております。

いい方法があれば教えていただきたく
書かせていただきました。よろしくお願いいたします。

全データ.xls sheet名data (情報の期間は2007年4月から2008年3月)                        
A    B    C     D     E    F    G        N
    NO.    2007年4月    2007年5月    2007年6月    2007年7月    2007年8月    ・・・    2008年3月
済    11    0    0    160    0    0        0
変更    11    0    0    0    150    0        0
済    13    210    250    0    0    300        0
変更    13    0    410    0    0    300        0
済    16    250    0    0    0    0        0
済    17    0    0    0    0    0        0

11.xls                        
sheet3                        
A    B    C     D     E        L
2007年6月    2007年7月    2007年8月    2007年9月    2007年10月    ・・・    2008年5月
160    0    0    0    0        
                        
sheet1                        
A    B                    
番号NO.    11                    
                        
13.xls                        
sheet3                        
A    B    C     D     E        L
2007年4月    2007年5月    2007年6月    2007年7月    2007年8月    ・・・    2008年3月
210    250    0    0    300        0
                        
sheet1                        
A    B                    
番号NO.    13                    

下記のコードは11.xlsや13.xlsの各モジュールに書いています。
シート1のB1セルの番号が全データ.xlsのB列にあり、かつA列が"済"になっている
ものを探す

全データのC1:N1と各xlsのシート3のA1:L1の月があったところの下に
データを入力させる

ことをしています。

(各エクセルのシート3は始まり月が違いますが
1年分しか書きません。)

しかし、全データのエクセルがかなり大きい容量で
開くのに1分ほどかかってしまいます。
どうにか時間を短縮させるか
全データ.xlsを開かずにデータを写す・・などということは
できるのでしょうか?


Sub 参照()
 Dim WS As Workbook
 Dim i As Integer
 Dim montharray As Variant
 Dim TheNO As Long
 Dim R, C As Range
 Dim MR As Variant
 
  
 Set WS = Workbooks.Open("C:\document and settings\ddd\my documents\4204.xls")
 
 With Worksheets("data")
  For i = 0 To 11
   montharray = Array("2007年4月", "2007年5月", "2007年6月", "2007年7月", "2007年8月", "2007年9月", _
          "2007年10月", "2007年11月", "2007年12月", "2008年1月", "2008年2月", "2008年3月")
    
   .Cells(1, i + 3).NumberFormatLocal = "yyyy年m月"
  Next i
 End With
 
 TheNO = ThisWorkbook.Worksheets("Sheet1").Range("B1").Value
 
 For Each R In WS.Worksheets("data").Range("B2:B800")
   If R.Value = TheNO Then
    
     If R.Offset(, -1) = "済" Then
      For Each C In WS.Worksheets("data").Range("C1:N1")
      
       With ThisWorkbook.Worksheets("Sheet3")
         MR = Application.Match((C.Value), .Range("A1:L1"), 0)
          If Not IsError(MR) Then
           .Cells(2, MR).Value = WS.Worksheets("data").Cells(R.Row, C.Column).Value
          End If
       End With
      Next
     End If
   
   End If
 Next


End Sub

【49914】Re:データを転記
発言  neptune  - 07/6/27(水) 22:14 -

引用なし
パスワード
   こんにちは

提案です。Accessで作り直すというのはナシですか?

表計算機能においては比較になりませんけど、やり方しだいでは
Excelで出来る事のほぼ全ては出来ますよ。

多量のデータを扱うならDB機能においてはやはりExcelの比ではありません。
餅は餅屋にまかせた方が何かと楽チンです。

【49915】データを転記
質問  mega  - 07/6/27(水) 22:19 -

引用なし
パスワード
   データがガタガタしているので
もう一度かきなおしました。
よろしくお願いいたします。


全データ.xls sheet名data (情報の期間は2007年4月から2008年3月)                        
A  B    C      D     E    F     G        N
   NO. 2007年4月 2007年5月 2007年6月 2007年7月 2007年8月・・・2008年3月
済  11    0    0     160    0     0        0
変更 11    0    0     0     150    0        0
済  13    210   250    0     0     300       0
変更 13    0    410    0     0     300       0
済  16    250   0     0     0     0        0
済  17    0    0     0     0     0        0

11.xls                        
sheet3                        
A       B      C     D     E         L
2007年6月 2007年7月 2007年8月 2007年9月 2007年10月 ・・・ 2008年5月
160    0    0    0    0      0  
                        
sheet1                        
A    B                    
番号NO. 11                    
                        
13.xls                        
sheet3                        
A        B    C     D      E        L
2007年4月 2007年5月 2007年6月 2007年7月 2007年8月 ・・2008年3月
210    250     0        0    300       0
                        
sheet1                        
A     B                    
番号NO.  13                    

【49916】Re:データを転記
発言  mega  - 07/6/27(水) 22:25 -

引用なし
パスワード
   ▼neptune さん:
お返事ありがとうございます。

>こんにちは
>
>提案です。Accessで作り直すというのはナシですか?
>
>表計算機能においては比較になりませんけど、やり方しだいでは
>Excelで出来る事のほぼ全ては出来ますよ。
>
>多量のデータを扱うならDB機能においてはやはりExcelの比ではありません。
>餅は餅屋にまかせた方が何かと楽チンです。

全データ.xlsを管理しているのは違うところなので・・・
難しいです。。。

【49923】Re:データを転記
発言  neptune  - 07/6/28(木) 9:30 -

引用なし
パスワード
   こんにちは

>全データ.xlsを管理しているのは違うところなので・・・
>難しいです。。。
そうなんですか、それは残念。

少し処理に名前を付けてみます。
>下記のコードは11.xlsや13.xlsの各モジュールに書いています。
>シート1のB1セルの番号が全データ.xlsのB列にあり、かつA列が"済"になっている
>ものを探す
↑抽出処理

>全データのC1:N1と各xlsのシート3のA1:L1の月があったところの下に
>データを入力させる
↑入力処理


>(各エクセルのシート3は始まり月が違いますが
>1年分しか書きません。)
1行目の項目名は特定、若しくは作業中に生成できると推定。

>しかし、全データのエクセルがかなり大きい容量で
>開くのに1分ほどかかってしまいます。
ファイルサイズはどれぐらいか?

>どうにか時間を短縮させるか
保留。Bookをまともに開く限り多分無理では?

>全データ.xlsを開かずにデータを写す・・などということは
>できるのでしょうか?
やれば出来ますが、いろいろ方法があるので保留。

取り合えず、
・どのような頻度、例えば月に一度開いて処理するだけか?、それとも毎日、
 日に何度も開かなければいけないのか?
・どのようなデータがどの程度(項目数*件数のような表現が好ましい)
・ExcelBookのファイルサイズは?又、どこにあるのか?ネットワーク上?

の情報で対処方法は変わってきますと思われますから、その情報をUPしてはどうですか?
有効なアドバイスが受けられる可能性が高まります。

※私は出来るアドバイスはしますが、請け負いはしませんので悪しからず。
 サンプルは書きますが、そのまんまズバリは書きません。

他の識者のアドバイスもお待ち下さい。

【49929】Re:データを転記
発言  mega  - 07/6/28(木) 21:38 -

引用なし
パスワード
   ▼neptune さん:
こんばんは。


>>しかし、全データのエクセルがかなり大きい容量で
>>開くのに1分ほどかかってしまいます。
>ファイルサイズはどれぐらいか?
>

5MBほどでした。
かなり大きい、、は言い過ぎました。。

>取り合えず、
>・どのような頻度、例えば月に一度開いて処理するだけか?、それとも毎日、
> 日に何度も開かなければいけないのか?

11.xlsとかを開き、全データ.xlsの情報を転記するのは
各エクセル、月に0〜2回ほどです。日は決まっていません。
商品番号の名前が付いたエクセルは30ファイルほどあります。

>・どのようなデータがどの程度(項目数*件数のような表現が好ましい)
全データ.xlsに入力されている値は仕入量です。
たとえば商品番号11は・・
○○○○年△月にこれだけ仕入れます、という数値です。
一年度分(2007年4月から2008年3月)までの予定仕入量が
がっちり決まっている場合は商品番号の左セルに”済”と書いてあります。

この全データ.xlsの仕入量を
私がまとめている
商品番号別xlsに反映させようとしています。

11.xlsであれば(sheet3)
2007年6月から商品番号11を取り扱っているため

A       B        L
2007年6月 2007年7月・・・2008年5月
160      0 

と2007年6月から2008年3月分まで転記。
sheet3には5月までありますが
全データ.xls自体に2008年4月と5月のデータがないため
空になります。


もし取り扱いが2007年7月からであれば
A       B        L
2007年7月 2007年8月・・・2008年6月


になります。

sheet1には
A     B
番号NO.   11

と入っているので
このB1の番号を
全データ.xlsのB列で探させて、行を読んでいます。


>・ExcelBookのファイルサイズは?又、どこにあるのか?ネットワーク上?

各商品番号のエクセルは650KMほどです。
全データ.xlsはメールで送られてくるので置く場所はどこでもいいわけなんですが
C:\document and settings\ddd\my documents配下

−全データ.xls
−フォルダ−フォルダ−11.xls
−フォルダ−フォルダ−13.xls
−フォルダ−フォルダ−17.xls

でおいております。


ご教授ください。
宜しくお願い致します。

【49933】Re:データを転記
発言  neptune  - 07/6/28(木) 22:33 -

引用なし
パスワード
   こんいちは

だいぶ判ってきました。

5MBってのはDataのみのExcelだと結構重いですよね。

私ならの話をします。

私なら、全データ.xlsが更新されて送付されて来る度に、mdbか、最悪
CSVファイルに落とします。(面倒なのでVBAで自動化します。)

そして、プログラム用ExcelBookを1つ作成しておくか、AddInを作成します。
案1mdb編
1.そのプログラム用Bookから、必要なBook例えば11.xls等を開きます。
2.ADO,若しくはDAOを使用して、mdbから必要なデータを抽出します。
3.抽出したデータを、11.xlsに転記します。

案2 CSVファイル編
1.そのプログラム用Bookから、必要なBook例えば11.xls等を開きます。
2-A.ADO,若しくはDAOを使用して、CSVから必要なデータを抽出します。
2-B  又は、CSVファイルを全て読み込みメモリ上においておき必要な
   データを検索、抽出します。
3.抽出したデータを、11.xlsに転記します。

案2の2-A,2-Bはどちらでもいいですが、Aの方が少し速いでしょう。
2-Bもデータがたいした量ではないので読み込みはほんの数秒と思います。
検索も検索量が多分たいした量ではないのでストレスを感じない程度
の処理速度と思います。(工夫次第でAと変わらないくらい速くはなりますが)

以上、「私ならこうするかもしれない」でした。

【49995】Re:データを転記
お礼  mega  - 07/7/2(月) 20:53 -

引用なし
パスワード
   解決に時間がかかっております。
まだできていませんが
お礼を先に申し上げたいと思います。
ありがとうございます。

質問が出た際にはまたよろしくお願い致します。

5590 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free