プロが教えるわが家の防犯対策術!

500のエクセルファイルがあり、それぞれのエクセルデータのA2からF2までのデータのをまとめた一覧表(1行目は、1枚目のエクセルファイルのA2-F2、2行目は2枚目のエクセルファイルの・・・、という感じでです)のを、新しいエクセルファイルもしくはテキストなどにでも手早く作れる方法をご存知の方、ご教授ください。コピペでやっていますが嫌になってしまいました。。マクロも触っては見たのですが、2枚目のエクセルファイルを2行目に、3枚目のエクセルファイルを3行目になどの方法の解決は思いつかず、挫折しました。よろしくお願いいたします

A 回答 (5件)

500のExcelファイルの一覧表は、同じシート名の同じ範囲にあるのですか?



>1行目は、1枚目のエクセルファイルのA2-F2、2行目は2枚目のエクセルファイルの・・・、
1枚目のExcelファイルとは、1個目のファイル?複数シートの1番目?

この回答への補足

有難うございます。
>1枚目のExcelファイルとは、1個目のファイル?複数シートの1番目?

複数シートではなく、複数のファイルになります。すべて同じフォルダに入っております。

また、ファイルは連番です。
一覧表は新規に作成して、
エクセルファイル1のA2-F2を、一覧表のA1-F1
エクセルファイル2のA2-F2を、一覧表のA2-F2
エクセルファイル3のA2-F2を、一覧表のA3-F3
・・・・
にできればなと思っております。
言葉足らずになり申し訳ございません。
もしよろしければお知恵をお貸しください。

補足日時:2008/01/15 11:23
    • good
    • 2

人間(質問者)がやっているときは、問題にならないが、プログラムでやると、すぐ問題になるのが、500のファイルをどういう範疇で選んでくる(指定する)かです。

プログラムの経験が少ないようで、質問に書いてない。
例えば
A.同一フォルダにある(それも対象外は含まれて無いか)
B.ブックがあるフォルダが同一で名前が例えば共通文字列+連番になっているとか。
やりたいことは、各ブックのある決まったシート(これの名称等が同じなのかも書いてない)のA2:F2の6セルのデータを採って、
データ集約ブックの第1行目にセット。
次のブックのA2:F2をデータ集約ブックの第2行目にセットを繰り返す
ということらしい。
必要なVBAのスキルは
(1)フォルダ内のエクセル・ブックの名称を全て捉える。
場合によっては、対象外は捨てる。
(2)Openした・読み込んだあるブックのA2:F2を捉える(Copy)
(3)データ集約ブックに貼り付けか値代入する。
(4)以上繰り返し。終了条件は。
質問者にとっては、丸投げ回答をそのまま使うならともかく、VBAでは荷が重いのでは。
そもそもVBAも経験無いのに500ものブックを作ったり、扱おうというのは、おかしいと思う。設計段階から、少ないブックに収まるよう考えるべきだ。エクセルは、そんなヘビーユーザーに適したサービスは考えられていない。
    • good
    • 2

>また、ファイルは連番です。


>エクセルファイル1のA2-F2を、一覧表のA1-F1
エクセルファイル1.xls って事?
それとも、1.xls って事?

あとは、ANo.2さんのコメントをまず理解して下さい。
    • good
    • 1

対象のフォルダをcドライブの「sample」とした場合で回答します。


新規エクセルブックのシート名タブを右クリックし「コードの表示」
右側のエディタエリアに下記コードを貼り付け、実行して下さい。
G列にファイル名が入るようになっています。不要であれば
Cells(rIdx, 7).Value = fName
を削除して下さい。


Sub getA_F()
Const myPath As String = "c:\sample\"
Dim rIdx As Long
Dim fName As String
fName = Dir(myPath & "*.xls")
Do Until fName = ""
Workbooks.Open Filename:=myPath & fName
rIdx = rIdx + 1
Me.Range(Cells(rIdx, 1), Cells(rIdx, 6)).Value = ActiveSheet.Range("A2:F2").Value
Cells(rIdx, 7).Value = fName
Windows(fName).Close
fName = Dir
Loop
End Sub
    • good
    • 11
この回答へのお礼

おかげさまで、一覧表を作ることが出来ました。有難うございました。

マクロ初心者なのでどれが定義語なのかわからず、こんな感じで解析させていただいてます。
Sub getA_F()
getA_F()・・・?保留
Const myPath As String = "c:\sample\"
myPath は文字列として定数扱いとする

Dim rIdx As Long  
Dim 変数宣言
Long  長整数型
rIdxは任意の文字
AAAでもかまわない
Dim fName As String
fnameは文字列として


fName = Dir(myPath & "*.xls")
Do Until fName = ""
保留

Workbooks.Open Filename:=myPath & fName
rIdx = rIdx + 1
繰り返し作業定義

Me.Range(Cells(rIdx, 1), Cells(rIdx, 6)).Value = ActiveSheet.Range("A2:F2").Value
(Cells(rIdx, 1), Cells(rIdx, 6))の範囲について開いたファイルの("A2:F2")で置き換え

Cells(rIdx, 7).Value = fName
(rIdx, 7)のセルにfName代入

・・・・・
まだ半分以下もわからず、悪戦苦闘しております。
お世話になりました。

お礼日時:2008/01/17 00:33

path は、適切なフルパスに変更してください。


ファイル名は、1.xls、2.xls、... 500.xls と想定しています、これ以外の形式の場合は、filename を変更します。
シート名は、Sheet1 と想定しています、これ以外の場合は、postfix 内の対応する文字列を変更します。

定数を適切に変更して実行できたら、'// 注意 としている行の "A1:F2" を "A1:F500" に変更します。
上記内容がわからない場合、以下のコードは実行しない方がよいと思います。

Sub do_it()
  Const path As String = "=""C:\Documents and Settings\Guest\My Documents\[""&"
  Const filename As String = "ROW()"
  Const postfix As String = "&"".xls]Sheet1'!R2C"""
  Dim src As Range
  Set src = Range("A1:F2") '// 注意
  With src.Columns(1)
    .FormulaR1C1 = path + filename + postfix
    .FormulaR1C1 = .Value
  End With
  Dim it As Range
  For Each it In src.Columns(1).Cells
    it.FormulaR1C1 = "='" + it.Value
  Next
  src.Columns(1).AutoFill src
  src.FormulaR1C1 = src.Value
  Set src = Nothing
End Sub
    • good
    • 6
この回答へのお礼

有難うございます。No.4さんのマクロで手一杯でまだ分解解析を行えておりません。後ほどこのマクロからも勉強させていただきます。
私の質問にお答えいただき有難うございました。
ご厚意に厚く御礼申し上げます。

お礼日時:2008/01/17 00:37

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

このQ&Aに関連する記事