[[20090102120723]] 『こんなこと出来ますか?』(とぅー) ページの最後に飛ぶ

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

 

『こんなこと出来ますか?』(とぅー)

はじめまして。諸先輩方どうぞよろしくお願いします。

 エクセルは業務でデータ処理グラフ作成資料作成が出来るくらいの実力です。
 マクロ等は使用したことがありません。 
 環境はwinXP、office2000です。

 内容は、
あるファルダ内に
 xlsファイル”a.xls、b.xls、c.xls・・・”と複数有る。
 a.xlsの内容はある設備のデータが記録されたものであり
 a.xls、b.xls、c.xls・・・すべて同じ形式でデータが並んでいる。
 a.xls、b.xls、c.xls・・・のファイルから、特定の行列のマスのデータを
 新規のエクセルファイルに、羅列したい。

 これを自動的にしたいのですがどうしたらよいでしょうか?

 マクロを使用することで上記内容が可能ですか?
 可能ならば方法を教えていただきたくお願いいたします。

 10や20のファイルなら頑張って手作業しようと思ったのですが、1000を
 超えるファイル数なので、こまっております。

 どうかご教授下さい。


 基本さえわかれば、あとはご自身でカスタマイズするつもりなら今回の程度
 でもよいかもしれませんが、マクロを使用したことがないということで、
 希望の動作の回答を得るには条件が不十分です。

 ・読み込むファイルはどのように指定するのですか?
    すべてあるフォルダ内にあって、読み込み順は順不同でよいのですか?
 ・読み込むセルの位置はどこですか?
 ・書き込むセルの位置はどこですか?
   その位置の対応は?
 ・一度読み込めば、更新は必要ないですか?

 まずこのあたりを、明示いただけますか。
 (Mook)

早速のご対応ありがとうございます。

●読み込むファイルはどのように指定するのですか?

A:指定するとはどういうことが教えて頂けますか。

●すべてあるフォルダ内にあって、読み込み順は順不同でよいのですか?

A:ファイル名、昇順で行いたい。
  ex:ファイル名;F-101 -808871-CHR 

 *数字の箇所のみ、Noが不規則に飛び飛びで増えていきます。

●読み込むセルの位置はどこですか?

A:

 ファイル名:F-101  -808871-CHR A2、A3、A4、B2、B3、B4、C2、C3、C4

 ファイル名:F-101  -808880-CHR a2、a3、a4、b2、b3、b4、c2、c3、c4
   ・
   ・
   ・

●書き込むセルの位置はどこですか?

A:下記のように書き込みたく

   新規ファイル 

                 A   B   C
       1  A2     B2     C2
             2  A3     B3     C3
             3  A4     B4     B4  
             4  a2     b2     c2
             5  a3     b3     c3
             6  a4     b4     c4 
             ・ ・   ・   ・ 
             ・ ・   ・   ・       
             ・ ・   ・   ・ 
             ・ ・   ・   ・ 
             ・ ・   ・   ・ 

●その位置の対応は?

A:位置対応とはどういうことか教えて頂けますか。

●一度読み込めば、更新は必要ないですか?

A:更新の必要はありません。

以上、お手数ですが、よろしくお願いいたします。


 指定というのは、どこにあるファイルからデータを読むかということです。
 指定フォルダ内のファイルすべてということであれば、今回の実装でよいでしょう。

 位置の対応というのは、読み込んだデータを書き込み先のファイルのどこに書くか
 ということですが、例示でその点は記載されているのでよいです。

 読み込む位置は、シートに関する情報がなかったので、先頭シートを想定して
 います。

 まず、makeList を実行してみてください。
 読み込むファイル一覧が先頭シートにできます。

 それで問題なかったら、loadData を実行してみてください。
 最後尾のシートに、データが3行ずつ読み込まれます。
 (Mook)

 '-----------------------------
 Const DATA_PATH = "C:\Data"    '★★ パスをデータのあるフォルダに書き換え

 '-----------------------------
 Sub makeList()
 '-----------------------------
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim dstWS As Worksheet
    Set dstWS = Worksheets.Add(before:=Worksheets(1))

    Dim ff As Object
    Dim ll As Long
    ll = 1
    For Each ff In fso.GetFolder(DATA_PATH).Files
        If InStr(UCase(ff.Name), ".XLS") > 0 Then
            dstWS.Cells(ll, "A").Value = ff.Name
            ll = ll + 1
        End If
    Next
    dstWS.Range("A:A").Sort key1:=dstWS.Range("A1"), order1:=xlAscending, Header:=xlNo
 End Sub

 '-----------------------------
 Sub loadData()
 '-----------------------------
    Dim srcWS As Worksheet
    Set srcWS = Worksheets(1)

    Dim dstWS As Worksheet
    Set dstWS = Worksheets.Add(after:=Worksheets(Worksheets.Count))

    Dim lastRow As Long
    lastRow = srcWS.Range("A" & Rows.Count).End(xlUp).Row

    Dim ll
    Dim WB As Workbook
    For ll = 1 To lastRow
        Set WB = Workbooks.Open(DATA_PATH & "\" & srcWS.Cells(ll, "A").Value)
            WB.Worksheets(1).Range("A2:C4").Copy Destination:=dstWS.Range("A" & ((ll - 1) * 3 + 1)).Resize(3, 3)
        WB.Close
    Next
 End Sub


Mook殿

 ありがとうございます。

 上記プログラムをvisual basicのシートに貼り付け
 内容に少々変更を加えてプログラムを実行させたら
 意図通りにデータを処理することが出来ました。

 今回初めて、マクロというものを使用し
 これまでコピペで長時間かけて行っていた作業が
 これほどにまで短時間で処理が行え驚きました。

 今回を期に、このような機能を勉強したいと考えております。
 先ず手始めに何から始めれば良いか、教えて頂けませんか?

 ・学習用のお勧めのサイト、
 ・お勧めの本
 ・この機能を使えばどのようなことが出来るのか?  などなど

 勉強した上で、今回教えて頂いたプログラムを解読し
 変更を加えて行きたいと考えています。

 小生の実力としては
 マクロ機能に関しては全くの無知です。

 プログラムを扱ったことがあるのは、
 学生時代に、C言語を用いて、ジャンケンゲームを作った経験があるくらいです。

 何度もお手数かけますが教えてください。
 よろしくお願いいたします。


 動いたようでなによりです。
 動いていれば別にかまわないのですが、今回のように複数シートにまたがる処理は
 シートモジュールではなく標準モジュールでやったほうがよいかと思います。

 Cのプログラム経験があるのでしたら、VBA の取得はそう難しいことではないと思い
 ます。

 習得のスタイルは人それぞれだとは思いますが、私としては
 >勉強した上で・・・
 というより、わからないことを使いながら覚えていく方が手っ取り早い気がします。
 便利なもので、ちょっとしたわからないことはネットで調べられるご時世ですから。

 お勧めのサイトはこの学校ももちろんですが、下記のサイトが基本的なことから
 応用まで全体を網羅しており、私もいまだにときどき参考にしています。
http://www.asahi-net.or.jp/~ef2o-inue/top01.html

 本はとくにお勧めというわけではないですが、またま本屋で手に取った
 「できる大辞典 EXCEL VBA」
 を使いました。あまり複雑なことは書いてありませんが、基本を覚えるにはよかった
 と思います。

 まぁ何はともあれ、使って覚えるのが一番でしょう。
 (Mook)

 こんにちは

 本題とは関係ありませんがちょっと気になったので社会常識をひとつ。

 質問者さんの
 >Mook殿
 という返事、

 現在では(いや昔からかな?)敬称の「殿」は自分と同輩または目下の者に対して使うもの
 だったと思います。回答してくださる方に対しては、無難には「さん」、かしこまるなら
 「様」付けの方がよろしいかと思います。

 (とおりすがり)


Mook 様

この度は本当にありがとうございました。

とおりすがり 様

ご指摘ありがとうございます。
今後気をつけます。


コメント返信:

[ 一覧(最新更新順) ]


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