dポイントプレゼントキャンペーン実施中!

あるフォルダにエクセルファイルが複数入っています。また同時にサブフォルダがあり、その中にもファイルが入っていて、その中もサブフォルダがはいっていて・・・この時、全てのファイルのA1に数値が入っているとして、このA1の数値を全部足したモノを新規のExcelブックを作り、そのA1に値を表示させたいみたいな事はできるでしょうか?もしくは実現するにはVBのような言語を使わないといけないのでしょうか?

A 回答 (4件)

やり方としては、以下の形になります。



必要なAPIは以下の3つです。
'ファイル検索
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
'次ファイル検索
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
'検索ハンドル開放
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

APIで使用する構造体は以下の通りです
Private Type WIN32_FIND_DATA
dwFileAttributes As Long 'ファイル属性
ftCreationTime As FILETIME '作成日
ftLastAccessTime As FILETIME '最終アクセス日
ftLastWriteTime As FILETIME '更新日
nFileSizeHigh As Long 'ファイルサイズ(上位)
nFileSizeLow As Long 'ファイルサイズ(下位)
dwReserved0 As Long '
dwReserved1 As Long '
cFileName As String * MAX_PATH 'ファイル名
cAlternate As String * 14 'ファイル名(8.3Ver)
End Type

Private Function mSheachFile(ByVal vstrRoot As String)
Dim lngHndle As Long '検索ハンドル
Dim lngRet As Long '検索結果

Dim usrWin32Fnd As WIN32_FIND_DATA 'ファイル情報
Dim intStLen As Integer '文字検索値
Dim strFileName As String 'ファイル名

'パス符号追加
If Right(vstrRoot, 1) <> "\" Then vstrRoot = vstrRoot & "\"

'フォルダ検索
lngHndle = FindFirstFile(vstrRoot & "*.*", usrWin32Fnd)
If lngHndle <> INVALID_HANDLE_VALUE Then
'検索結果あり
Do
'NULL文字を削除する
intStLen = InStr(usrWin32Fnd.cFileName, vbNullChar) - 1
If intStLen > 0 Then
'文字があれば取得ファイルの属性を調査
strFileName = Left(usrWin32Fnd.cFileName, intStLen)
If usrWin32Fnd.dwFileAttributes = vbDirectory Then
'取得ファイルの属性がフォルダ
If strFileName <> "." And strFileName <> ".." Then
'フォルダ内を検索する
Call mSheachFile(vstrRoot & strFileName)
End If
Else
'ファイル内を検索する
Call mFileChek(vstrRoot & strFileName)
End If
End If

'次検索
usrWin32Fnd.cFileName = String(Len(usrWin32Fnd.cFileName), vbNullChar)
lngRet = FindNextFile(lngHndle, usrWin32Fnd)

Loop While lngRet <> 0
End If
FindClose (lngHndle) '検索終了
End Function
    • good
    • 0

こんにちは。



Office カテゴリでも同じような内容がありましたが、
FileSearch オブジェクトか、1番さんの再帰の方法(私は使わないけれど)とか、他にも方法があります。ただ、FileSearch オブジェクトは使い勝手が悪いです。

できないわけではありませんが、ただ、こう言っては実も蓋もありませんが、Office 系では、フォルダを掘り下げていくということはあまりしませんね。せいぜい、ファイル検索までで、開けたりはしません。
    • good
    • 0

『あるフォルダ』の指定が一番のネックだと思います。


(OS(IE)のバージョンによって回答も替わると思いますよ)
OS と Excel のバージョンを明記されたら宜しいのでは?

> そのA1に値を表示させたいみたいな事はできるでしょうか?
はい

> VBのような言語を使わないといけないのでしょうか?
いいえ
VBA で可能です
    • good
    • 0

VBA の DIR() 関数を使用して、再帰呼び出しの関数 ( 自分で自分を呼び出す関数 ) を作ればできると思います。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!