[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.