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

よろしくお願いします。
詳しい方、お知恵を貸してください。

アンケートのExcelシートを配布し、【記入表】というシートの4-6行目に記入してもらい1つのシートに集約したいと思っています。(画像をご参照ください)

対象者は500近くで有り、500近くのExcelファイルを1つのフォルダに格納、
別ブックの【回答一覧】というシートに集約したいと思っています。

今までは4-6行目を選択し、コピーして【回答一覧】シートに貼り付けをしていました。

同じことの繰り返しなので、マクロで何とか出来ないかと思っています。

下記の画像でコピーしたい【記入表】シートの
表頭の3行目を除いた4-6行目(行全体をコピーし、セルの範囲指定ではない方法でやりたいです)

を値貼り付けで(関数やリスト入力の値が入っている場合有り)

別ブックの【回答一覧】シート

に集約したいのです。

マクロで出来るのでしょうか。

回答の3行ずつが、【回答一覧】シートに値貼付けされていくイメージです。
この際、Aさんという回答部分にBさんの回答が上書きされないようにしたいです。

【回答一覧】シートに

Aさんの【記入表】4-6行目が【回答一覧】の4-6行目
Bさんの【記入表】4-6行目が【回答一覧】の7-9行目
Cさんの【記入表】4-6行目が【回答一覧】の10-12行目

という感じに集約していきたいのです。

各人から回答を記入したシートを同じフォルダ内に集約しておけば
可能でしょうか。

お知恵を貸してください。

よろしくお願いします。

「Excelの複数ファイルの複数行を別ファ」の質問画像

A 回答 (5件)

No4です。

No4の補足のような結果を得る場合、マクロでは
1回目の実行時にファイルA,B,Cがあって、
2回目に実行時にファイルE,Fが追加されたことを認識するのは困難です。
(不可能ではないが、まじめにこれをきちんとやると、各回の実行毎にどのファイルを処理したかを、記録しておく必要があります)

よって、やり方としては、2つの案が考えられます。
1案:
毎回、フォルダ内にあるexcelファイルを全て処理する。
毎回、集計シートを一旦クリアした後、4行目から書き込んでいく。

2案:
処理したexcelファイルは、他のフォルダ(処理済みフォルダ)を作成しておき、手作業で処理済みフォルダへ移動する。新しく追加されたファイルのみ、格納用フォルダに格納し、処理を行う。


1案の長所はファイルを移動する手間が発生しない。
短所は、ファイル数が500になると処理時間が長くなる。

2案の長所/短所は1案と逆になります。

どちらを採用するかはあなたが判断してください。
    • good
    • 0
この回答へのお礼

度々の回答ありがとうございます。

1案で行なおうとする場合、どのようなマクロの文となりますでしょうか。

各ファイルの4行目から6行目(列は全範囲)を各シートごとに追加していきたいのです。

Aさんのファイル4-6行目を集計ファイルの4-6行目
Bさんのファイル4-6行目を集計ファイルの7-9行目

という感じです。

500ファイルを同じフォルダ内に入れて一気に処理したいと思うのです。

なんとかできないでしょうか。。。

お礼日時:2022/09/27 10:47

今回集計が終わった後、次回の集計を行う場合は、


集計シートの最後の行の後ろへ追記して行くのでしょうか。
それとも、以前のぶんをクリアして、集計シートの4行目から書き込んで行くのでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

下記が回答になっていますでしょうか。

同じフォルダ内に(A、B、C)(①)ファイルがあり、1度集計、その後、D、Eファイル(②)が同じフォルダ内に追加された場合、

(A、B、C、D、E)(③)フォルダを集計

つまり、③=①+②

となり、新しく追加されたファイル(②)のみ、行の後ろへ追記していく形としたいです。

度々すみません。よろしくお願いします。

お礼日時:2022/09/15 06:11

こんにちは



既質問のNo5様の回答の要領で行えば同じことです。
https://oshiete.goo.ne.jp/qa/13132300.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
既質問のNo5様の回答のどの部分を変更すればよいのでしょうか。

下記を利用して
セル(3行目、A列)から(6行目、行全体)
を選択するにはどうしたらよいのでしょうか。。。
     
↓既質問における回答↓
Option Explicit
Public Sub アンケート集計()
Const Folder As String = "D:\goo\data7" 'excelファイル格納フォルダ
Dim fname As String 'ファイル名
Dim wb2 As Workbook '記入表のブック
Dim ws1 As Worksheet '回答一覧
Dim ws2 As Worksheet '記入表
Dim maxrow As Long '回答一覧の最大行
Dim row1 As Long '回答一覧の処理行
Set ws1 = Worksheets("回答一覧")
maxrow = ws1.Cells(Rows.Count, "C").End(xlUp).Row 'C列の最大行取得
If maxrow < 2 Then maxrow = 2 '2行未満なら2行に修正
row1 = maxrow + 1 'maxrowの次の行から書き込み
fname = Dir(Folder & "\*.xlsx") '指定フォルダ内の*.xlsxを取得
If fname = "" Then
MsgBox (Folder & "内に.xlsxなし")
Exit Sub
End If
Do While fname <> ""
'該当ファイルをオープン
Set wb2 = Workbooks.Open(Folder & "\" & fname)
Set ws2 = wb2.Worksheets("記入表")
'記入表から回答一覧へ6セル分まとめて転記
ws1.Cells(row1, "C").Resize(, 6).Value = ws2.Cells(3, "C").Resize(, 6).Value
wb2.Close SaveChanges:=False
'回答一覧の処理行に1加算
row1 = row1 + 1
'次のexcelファイルを取得
fname = Dir()
Loop
MsgBox ("処理完了")
End Sub

お礼日時:2022/09/15 06:07

列の最大数は、決まってないのでしょうか。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
行全体をコピーしたいので(3行目なら3行目のA列からXFD列)
列の最大数はA列からXFD列となります。

回答になっていますでしょうか。

お礼日時:2022/09/15 05:54

rangeを配列に入れてセル=配列とすればできそうな気がします。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。

rangeを配列に入れて、セル=配列

というのがわかっていません。。。

お手数ですが、例文のようなものを教えて頂けますでしょうか。

お礼日時:2022/09/15 05:56

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング