Excel VBA質問箱 IV

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

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


13024 / 13644 ツリー ←次へ | 前へ→

【7385】フォルダ内の全ファイルの一部データ集計 サッサ 03/9/3(水) 20:46 質問
【7388】Re:フォルダ内の全ファイルの一部データ集計 INA 03/9/3(水) 23:17 回答
【7392】Re:フォルダ内の全ファイルの一部データ集計 サッサ 03/9/4(木) 8:54 お礼
【7395】Re:フォルダ内の全ファイルの一部データ集... INA 03/9/4(木) 9:45 回答
【7397】Re:フォルダ内の全ファイルの一部データ集... INA 03/9/4(木) 10:11 回答
【7404】Re:フォルダ内の全ファイルの一部データ集... サッサ 03/9/4(木) 11:50 お礼

【7385】フォルダ内の全ファイルの一部データ集計
質問  サッサ E-MAIL  - 03/9/3(水) 20:46 -

引用なし
パスワード
   初めて投稿させていただきますサッサと申します。早速なのですが、

c:\data\hk\hokkaido_001.xls
     \hokkaido_002.xls
     \hokkaido_003.xls
      ....
     \hokkaido_027.xls
   
c:\data\hokkaido_total.xls

のようなdataフォルダ内にある全エクセルファイルのsheet1のセルL2のデータを抽出してhokkaido_Tatol.xlsのB列に順に並べていって上書き保存するといったことをしたいのですが、何か手がかりを教えていただけないでしょうか。

実際の作業としては各ファイルが順次増えていき、その都度結果を集計したいのですが。

将来的には上記のようにL2セルだけでなく、セルL3をC列に、セルZ15をD列にといった具合に、はたまた、理想は抽出するセルおよび集計したデータの列を指定できるようしたいです。


試しに2つほど実際にファイルを開いて抽出作業をマクロ保存(下記)して、再現したところ、うまくいきませんでした。たぶん、ファイルを開くという命令がないように見えるのですが、、、、

何となく似ていそうな[#7341]さんスレッドで出てきたものを闇雲に試したところ
「Workbooks.Open FileName:=... のところで「読み取り専用です。アクセスできません」とエラーがでてしまいます。ちなみにOSはxp_proでフォルダの属性を変えることができなさそうです。また、excel2000で動かしています。

何でもかまいませんのでアドバイスいただけないでしょうか。よろしくお願いします。


Sub Macro1()
  Range("L3").Select
  Selection.Copy
  Application.WindowState = xlMinimized
  Windows("Book1").Activate
  Range("B1").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  ActiveWindow.LargeScroll ToRight:=-1
  Range("L3").Select
  Application.CutCopyMode = False
  Selection.Copy
  Windows("Book1").Activate
  Range("B2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End Sub

【7388】Re:フォルダ内の全ファイルの一部データ集...
回答  INA  - 03/9/3(水) 23:17 -

引用なし
パスワード
   まずは手作業で出来る部分を全て「マクロの自動記録」しては?
掲載しているコードは、部分的ですよね?

【7392】Re:フォルダ内の全ファイルの一部データ集...
お礼  サッサ E-MAIL  - 03/9/4(木) 8:54 -

引用なし
パスワード
   ▼INA さん:
>まずは手作業で出来る部分を全て「マクロの自動記録」しては?
>掲載しているコードは、部分的ですよね?

INAさん
上記のアドバイスありがとうございます。掲載しましたコードは、
データファイルを読み込んで、コピー、値複写、ファイルを閉じる、
といった作業のすべてです。

個人的にはその作業を繰り返すという作業については後で考えよ
うと思っているのですが、、、ただもう一度、やってみたら少し
違いますね、下記のようになりました。もう少し苦闘してみます。

Sub Macro2()
  Range("L3").Select
  Selection.Copy
  Application.WindowState = xlMinimized
  Windows("Book1").Activate
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
  Windows("hokkaido_200208.xls").Activate
  ActiveWindow.Close
End Sub

【7395】Re:フォルダ内の全ファイルの一部データ集...
回答  INA  - 03/9/4(木) 9:45 -

引用なし
パスワード
   試しに作ってみました。
出力結果を書き込みたいブック(hokkaido_total.xls)に以下のコードを
コピペして実行して下さい。
同じフォルダ内のExcelブックからデータを抽出します。

Private Sub CommandButton1_Click()
Dim ファイル As String
Dim 一覧 As String
Dim Result As Long

'##################################
' 同フォルダ内のExcelファイル検出
'##################################

  ファイル = Dir("*.xls")
  
  Do While ファイル <> ""
    If ファイル = ThisWorkbook.Name Then ファイル = ""
    一覧 = 一覧 & Chr(13) & ファイル
    ファイル = Dir()
  Loop

 Result = MsgBox("以下のファイルが見つかりました。実行しますか?" & Chr(13) & 一覧, 4, "ファイル確認")

 If Result = 7 Then
  Exit Sub
 End If


'########################
'   データのコピー
'########################
ファイル = Dir("*.xls")
 
 Do While ファイル <> ""
  If ファイル <> ThisWorkbook.Name Then
    'ファイルを開く
    Workbooks.Open Filename:=ファイル
    
    'セルL2→B列
    ThisWorkbook.Worksheets("sheet1").Range("B65536").End(xlUp).Offset(1, 0).Value = _
    ActiveWorkbook.Worksheets("sheet1").Range("L2").Value
    
    'セルL3→C列
    ThisWorkbook.Worksheets("sheet1").Range("C65536").End(xlUp).Offset(1, 0).Value = _
    ActiveWorkbook.Worksheets("sheet1").Range("L3").Value
    
    'セルZ15→D列
    ThisWorkbook.Worksheets("sheet1").Range("D65536").End(xlUp).Offset(1, 0).Value = _
    ActiveWorkbook.Worksheets("sheet1").Range("Z15").Value
    
    'ファイルを閉じる
    ActiveWorkbook.Close
  End If
  ファイル = Dir()
 Loop
  
 ThisWorkbook.Worksheets("sheet1").Range("B1:D1").Delete Shift:=xlUp

End Sub

【7397】Re:フォルダ内の全ファイルの一部データ集...
回答  INA  - 03/9/4(木) 10:11 -

引用なし
パスワード
   コピー元の「セル」とコピー先の「列」を指定できるようにしてみました。

Private Sub CommandButton2_Click()
Dim ファイル As String
Dim 一覧 As String
Dim Result As Long

'##################################
' 同フォルダ内のExcelファイル検出
'##################################

  ファイル = Dir("*.xls")
  
  Do While ファイル <> ""
    If ファイル = ThisWorkbook.Name Then ファイル = ""
    一覧 = 一覧 & Chr(13) & ファイル
    ファイル = Dir()
  Loop

 Result = MsgBox("以下のファイルが見つかりました。実行しますか?" & Chr(13) & 一覧, 4, "ファイル確認")
 
 If Result = 7 Then
  Exit Sub
 End If


'########################
' 抽出データの範囲指定
'########################

Dim コピー元 As String
Dim コピー先 As String
On Error GoTo 範囲エラー

コピー元 = Application.InputBox("コピー元のセルの番地を入力して下さい。")
コピー先 = Application.InputBox("コピー先の列を入力して下さい。")

Result = MsgBox("セル" & コピー元 & " の値を" & コピー先 & "列 に抽出します。", 1, "抽出範囲確認")

 If Result = 2 Then
  Exit Sub
 End If

'########################
'   データのコピー
'########################
ファイル = Dir("*.xls")
 
 Do While ファイル <> ""
  If ファイル <> ThisWorkbook.Name Then
    'ファイルを開く
    Workbooks.Open Filename:=ファイル
    
    'コピー元 → コピー先
    ThisWorkbook.Worksheets("sheet1").Range(コピー先 & "65536"). _
    End(xlUp).Offset(1, 0).Value = _
    ActiveWorkbook.Worksheets("sheet1").Range(コピー元).Value
 
    'ファイルを閉じる
    ActiveWorkbook.Close
  End If
  ファイル = Dir()
 Loop
  
 ThisWorkbook.Worksheets("sheet1").Range(コピー先 & "1").Delete Shift:=xlUp
 
Exit Sub

範囲エラー:
  MsgBox "入力した値が、正しくありません。"
  ActiveWorkbook.Close
End Sub

【7404】Re:フォルダ内の全ファイルの一部データ集...
お礼  サッサ E-MAIL  - 03/9/4(木) 11:50 -

引用なし
パスワード
   INAさん、本当にありがとうございます。感謝感激です。
先ほどまであーだコーダと、苦闘していたのですが、ほとんど進展せ
ず困っていました。

下記のコードでほぼ当初の目的は達成しそうです。各命令文の意味は
まだよくわかっていませんが、INAさんのコードを土台にして勉強し
てみます。

今後は抽出したデータを並び替えたり、他県のデータと組み合わせて
各解析をやらせたいのですが、これで手がかり足がかりができました。

本当にありがとうございました。


▼INA さん:
>コピー元の「セル」とコピー先の「列」を指定できるようにしてみました。
>
>Private Sub CommandButton2_Click()
>Dim ファイル As String
>Dim 一覧 As String
>Dim Result As Long
>
>'##################################
>' 同フォルダ内のExcelファイル検出
>'##################################
>
>  ファイル = Dir("*.xls")
>  
>  Do While ファイル <> ""
>    If ファイル = ThisWorkbook.Name Then ファイル = ""
>    一覧 = 一覧 & Chr(13) & ファイル
>    ファイル = Dir()
>  Loop
>
> Result = MsgBox("以下のファイルが見つかりました。実行しますか?" & Chr(13) & 一覧, 4, "ファイル確認")
> 
> If Result = 7 Then
>  Exit Sub
> End If
>
>
>'########################
>' 抽出データの範囲指定
>'########################
>
>Dim コピー元 As String
>Dim コピー先 As String
>On Error GoTo 範囲エラー
>
>コピー元 = Application.InputBox("コピー元のセルの番地を入力して下さい。")
>コピー先 = Application.InputBox("コピー先の列を入力して下さい。")
>
>Result = MsgBox("セル" & コピー元 & " の値を" & コピー先 & "列 に抽出します。", 1, "抽出範囲確認")
>
> If Result = 2 Then
>  Exit Sub
> End If
>
>'########################
>'   データのコピー
>'########################
> ファイル = Dir("*.xls")
> 
> Do While ファイル <> ""
>  If ファイル <> ThisWorkbook.Name Then
>    'ファイルを開く
>    Workbooks.Open Filename:=ファイル
>    
>    'コピー元 → コピー先
>    ThisWorkbook.Worksheets("sheet1").Range(コピー先 & "65536"). _
>    End(xlUp).Offset(1, 0).Value = _
>    ActiveWorkbook.Worksheets("sheet1").Range(コピー元).Value
> 
>    'ファイルを閉じる
>    ActiveWorkbook.Close
>  End If
>  ファイル = Dir()
> Loop
>  
> ThisWorkbook.Worksheets("sheet1").Range(コピー先 & "1").Delete Shift:=xlUp
> 
>Exit Sub
>
>範囲エラー:
>  MsgBox "入力した値が、正しくありません。"
>  ActiveWorkbook.Close
>End Sub

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