[[20140627114334]] 『VBAについて教えてください』(Yukkie) >>BOT

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

 

『VBAについて教えてください』(Yukkie)

Excelファイル(ファイル名:人事記録)があります。
名前、受講講座、スキルの項目に分かれています。
そこに、他のフォルダの中にあるファイルの中身を
持ってきたいと考えています。

 ---------------------------------------------------------
 名前 |     受講講座     |   スキル   |
 ---------------------------------------------------------
 〇〇 |****|****|xxxx|aaaa|bbbb|cccc|

元データは、部署毎フォルダが分かれており
ファイル名が、「スキルシート_社員名_更新日」となっております。
シートで何年度かがわかるようになっています。
シート名が「yyyy年度」と記載しております。

  ---------------------------------------------------------
 名前		|〇〇
 ---------------------------------------------------------
 受講講座	|****
		|****
		|xxxx
		|aaaa
 ----------------------------------------------------------
 スキル	|bbbb
		|cccc
 yyyy年度(シート名)

人事記録ファイルには全社員の名前が記載されており、
スキルシート(全員同じ書式です)のファイル名で名前を参照して
yyyy年度のシート内の、スキル・受講講座を
人事記録ファイルの社員名の所に記載されるように持ってきたいのですが
どうすればできますか?

VBAは簡単なのは見よう見まねでやったことはありますが
深くは理解していません。

どのようにすれば出来るのか教えてください。
よろしくお願いいたします。

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


 直接当てはめるのも出来なくはないと思いますが、フォルダ構成やファイル名など
 よくわからない部分もありますので、まずは各ファイルの情報を収集して、そこから
 VLOOKUP なり整形でまとめられないでしょうか。

 とりあえず
[[20120206161956]] 『フォルダー内の複数のBOOKから 同じ項目を 別のBOOKに一覧にする』(ayakohana)
 の焼き直しですけれど、指定したフォルダ下のデータを一覧にするサンプルです。
 A2 に「ファイル名」、B2に「シート名」、C2以降の2行目に収集したいセル位置を列挙して
 下記を実行してみてください。

 変更点はシート名を記載するようにしたことと、サブフォルダを集計するようにした点です
 (あとコードの日本語化)。

 Option Explicit
 '// -------------------------------
 Sub データ収集の実行()
 '// -------------------------------
    Dim Fso As New Scripting.FileSystemObject '// ツール 参照設定 から MicroSoft Scripting Runtime にチェック

    Dim 集計シート As Worksheet
    Set 集計シート = ActiveSheet

    Dim 対象フォルダ
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show <> True Then Exit Sub
        対象フォルダ = .SelectedItems(1)
    End With

    データ収集 集計シート, Fso.GetFolder(対象フォルダ)
 End Sub

 '// -------------------------------
 Sub データ収集(集計シート As Worksheet, フォルダ As Folder)
 '// -------------------------------
    Dim 行 As Long
    行 = 集計シート.Cells(Rows.Count, "A").End(xlUp).row + 1

    Dim 最終列 As Long
    最終列 = 集計シート.Range("A2").End(xlToRight).Column

    Dim 列 As Long

    Dim ファイル As file
    Dim シート As Worksheet
    For Each ファイル In フォルダ.Files
        If InStr(ファイル.Name, ".xls") > 0 Then
            With Workbooks.Open(ファイル.Path)
                For Each シート In .Worksheets
                    集計シート.Cells(行, "A").Value = ファイル.Name
                    集計シート.Cells(行, "B").Value = シート.Name
                    For 列 = 3 To 最終列
                        集計シート.Cells(行, 列).Value = .Worksheets(1).Range(集計シート.Cells(2, 列).Value).Value
                    Next
                    行 = 行 + 1
                Next
                .Close False
            End With
        End If
    Next

    Dim サブフォルダ As Folder
    For Each サブフォルダ In フォルダ.SubFolders
        データ収集 集計シート, サブフォルダ
    Next
 End Sub
(Mook) 2014/06/28(土) 12:26

ありがとうございました。
フォルダがある場所や、ファイル名など保存してある名前に
変更して確認します。

また不明点がありましたら相談いたします。

取り急ぎお礼まで。
(Yukkie) 2014/06/30(月) 11:22


コメント返信:

[ 一覧(最新更新順) ]


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