よろしくお願いします。
Excelでアンケート集計を行なっています。
同じフォルダ内に様式が同じExcelファイルが百数十あります。
画像のように、1つのファイルの中に複数のシートが有り、【記入表】というシートだけ1つのファイルに集約したいのです。
その集約後、2行目、3行目の赤枠で囲っている回答部分を1つのシートに集約、集計等行なっていきたいと思っています。
これは可能でしょうか。
①各部署が回答してきたファイルを同一のフォルダ内に保存
②マクロ(マクロ以外でやり方があれば教えてください)でファイル内の【記入表】(名前は例です、全ての部署に同じ名前で配布)シートのみを別ファイルに集約
③集約したファイル内で集計シートを作り、各部署からの回答部分を集計できるように貼り付け
ということをしたいです。今までは手作業でコピーをしていました。
同じフォルダ内の複数ファイルを1つのファイルにまとめる、というマクロはみつけました。
(ただし、マクロの内容までは理解出来ず、コピペで使おうと思っています。)
ファイル内の特定のシートのみを集約する、ということは可能でしょうか。
シート名は全て【記入表】という名前になっています。(一意のシート名ではない)
また、集約後、回答部分の行を1つのシートに追加していく形で集約することは可能でしょうか。
自分の技術力のなさに辟易してしまいます。
どうぞお知恵を貸して頂ければとおもいます。
No.5ベストアンサー
- 回答日時:
以下のマクロを標準モジュールに登録してください。
回答一覧の3行目以降から設定します。
回答一覧の2行目の見出しはあなたが設定しておいてください。
不明点があれば、補足してください。
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
回答ありがとうございます。
教えて頂いたマクロで動かすことが出来ました。
大変助かりました。少しずつでも勉強していきたいと思います。
No.8
- 回答日時:
No4です
どうせ利用なさらないでしょうから、補足する必要もないとは思いましたが・・・
>C:\Users\XXX\のぶぶんが異様に長くなること、~~
業務を効率化しようとしているのではないかと思いますが、関数に限らず通常のシートの作業であれ、マクロであれ、効率よく考えることに関しては同じようなものです。
長いパスを全セルに記入しようとなどとする前に、どこかのセルに(例えばAセル)に、共通のパスを入力しておけば、後はそれを参照すれば済むという方法を思いつくはず。
どうせ文字列でパスを作成するのですから
A1 & ブック名 & "hoge"
的なことを考えれば済む話ではないのかなぁ・・
まぁ、一覧も無いようですし、使えない案でしょうから、どうでもよいのですけれど・・
No.7
- 回答日時:
今後、マクロを勉強するということですので、以下何点か、追記します。
1.インデントについて
このサイトにアップするとインデントが崩れます。
マクロはインデントがきちんとしていないと、非常に読みづらくなります。
下記にインデントをきちんとしたマクロがアップしてあります。(内容は同じです)
こちらを使用したほうが読みやすいです。
https://ideone.com/dbG4u4
2.参考書について
excel VBA できる大事典 を私は使用しています。
https://book.impress.co.jp/books/1120101091
これに大体の機能は網羅されています。
これば、難しければ、もっと優しい入門書から始めればよいかと思います。
書店で手に取って、自分にあいそうなものを見つけてください。
参考書は1冊で済むと思わずに3~4冊買うつもりでいた方が良いです。
そうすれば、そのうちの一冊は、非常にあなたにあったものが見つかるかと。
いずれにせよ、参考書は会社の経費で落とすようにしてください。
(本当に気に入ったものは自分で購入しても良いかもしれませんが・・・)
会社の経費が落ちないときは、図書館を利用する方法もあります。
3.参考になるサイトについて
office TANAKAが有名です。
私も利用しています。
但し、入門時は、もっと優しいサイトの方がよいかもしれません。
http://officetanaka.net/excel/vba/
No5、No6 と回答ありがとうございました。
まず、自分で動かして見たいと思います。
不明な点があれば、No5の回答のお礼欄に書かせて頂きます。
まずは御礼まで。
ありがとうございました。
No.6
- 回答日時:
No5です。
追伸:
Const Folder As String = "D:\goo\data7"
は、excelのブックを格納しているフォルダ名です。
上記はこちらで試験したときのフォルダ名です。
あなたの環境にあわせて適切に設定してください。
No.4
- 回答日時:
No1です。
>集計の際のINDIRECT関数の使い方についてもう少しお教えいただけないでしょうか。
単純な「別ブックからの1行の参照でしょうから、通常なら
='C:\Users\XXX\[対象ブック.xls]記入表'!C$3
のような要領で参照可能と思います。
このブック名の部分を入替えたいのでしょうから、参照先を文字列で作成し、INDIRECT関数で参照すればよいという意味です。
その際に、入替えるのにブックの一覧があると便利です。
あるいは、連番のような規則性のあるブック名であれば、一覧などなくても作成可能ですね。
>(一般的な関数の構造などは自分でもちろん調べます。)
はい。 一般的な関数ですので、調べてみてください。
ただし、INDIRECT関数の場合は、参照先のブックが閉じた状態だと参照できずに
#REF!
のエラー表示になります。
ですので、一旦は、対象ブックを開いてあげる必要があります。
(関数設定後にブックを開けば、値が表示されます)
その後、参照した値を保持するために、全体を「コピー」-「値をペースト」で固定値化すれば良いのでは、と言う意味の回答です。
でも、いろいろ調べたり試行錯誤している時間を考えれば、No1でも述べたように「コピペ」でこなした方が、結局、トータルの時間は早いと思います。
回答ありがとうございます。
回答されてきた百近くのブックを開いて、集計シートにINDIRECT関数を入力する、というのは仰るとおり、現実的ではないかもしれないと思いました。それであればコピペの方が早いかと。
特に私の技術力ではそうなってしまいそうです。。。
'C:\Users\XXX\[対象ブック.xls]記入表'!C$3
ですが、サーバ上に保存したファイルとなり、C:\Users\XXX\のぶぶんが異様に長くなること、対象ブック名も各部署が変更して回答してくるので、規則性がない可能性があるので、INDIRECT関数に入力する上記のようなパスを用意するのも一苦労となりそうです。
(百数十と書きましたが、場合によっては300、400くらいになりそうです)
コピペの方が効率的かもしれないです。。。。
No.3
- 回答日時:
>(関数だけでは私が行ないたいことは出来ないですよね)
できますが、現実的ではありません。
関数式でやるなら以下のようになります。
回答一覧シートのC3へ
c:\sample\回答1.xlsxの記入表のC3の内容を表示するには
C3へ
='c:\sample\[回答1.xlsx]記入表'!C$3
と記入します。
同様に
D3~H3は
='c:\sample\[回答1.xlsx]記入表'!D$3
・・・
='c:\sample\[回答1.xlsx]記入表'!H$3
と記入します。
これで1行目が完成です。
2行目は、回答2.xlsxの内容を表示するなら
C4へ
='c:\sample\[回答2.xlsx]記入表'!C$3
と表示します。
これを百数十個のファイルの数分設定します。
したがって、これらの設定だけで相当の手間がかかります。
次回は、そのあとへ追記するので、その分の手間も次回発生します。
それならば、今まで通り各ファイルの内容をコピペしたほうが速いでしょう。
関数式で効果があるのは以下のようなケースです。
同じブック内の同じシートの参照の場合
同じブック内の他のシートの参照の場合
他のブックの場合は、参照項目が少ない場合。(参照用のブックが少ないこと)
よって、マクロの方が現実的かと思います。
次の回答では、具体的なマクロの回答をいたします。
回答ありがとうございます。
何度も回答頂き大変ありがたいです。
マクロ、少しずつでも勉強したいです。
引き続き何卒よろしくお願いいたします。
No.2
- 回答日時:
補足要求です。
1.集約ファイルの集計シートのレイアウトは、添付図であってますか。
2.集約ファイルの集計シートのシート名は何でしょうか。
3.集約ファイルにマクロを格納する前提で良いですか。
(集約ファイルの拡張子は.xlsmになります)
4.同じフォルダ内の様式が同じExcelファイルの拡張子は.xlsxで間違いないでしょうか。
5.今回集計が終わった後、次回の集計を行う場合は、
集計シートの最後の行の後ろへ追記して行くのでしょうか。
それとも、以前のぶんをクリアして、集計シートの3行目から書き込んで行くのでしょうか。
回答ありがとうございます。
1.集約ファイルの集計シートのレイアウトは、添付図であってますか。
→はい、合っています。
2.集約ファイルの集計シートのシート名は何でしょうか。
→決まっていませんが【回答一覧】などにしたいと思います。
3.集約ファイルにマクロを格納する前提で良いですか。
(集約ファイルの拡張子は.xlsmになります)
→はい、マクロを格納する前提です。
(関数だけでは私が行ないたいことは出来ないですよね)
4.同じフォルダ内の様式が同じExcelファイルの拡張子は.xlsxで間違いないでしょうか。
→はい、各部署に配布し、回答し手頂くファイルも.xlsにします。
5.今回集計が終わった後、次回の集計を行う場合は、
集計シートの最後の行の後ろへ追記して行くのでしょうか。
それとも、以前のぶんをクリアして、集計シートの3行目から書き込んで行くのでしょうか。
→シートの最後の行の後ろへ追記していくことを考えています。
よろしくお願いします。
No.1
- 回答日時:
こんにちは
とにかく一つのシートにまとめてしまえばあとは何とかなるのでしょうから・・
各ファイル名の一覧などがあるのなら、INDIRECT関数で参照式を設定しておいて、ブックをまとめて開き、値をペーストで固定値化するのが簡単かも知れません。
ただし、シート名が異なると面倒です。
>シート名は全て【記入表】という名前になっています。(一意のシート名ではない)
どっちなんでしょうね?
一意のシート名のように読めますけれど・・・?
もちろん、マクロでも可能ですけれど、(失礼ながら、すぐに作成できる技量をお持ちというわけでもなさそうですので)学習して、作成して、テストして・・という時間を考えれば、200件程度なら手作業でコピペしてしまう方が遥かに速いと思います。
ご質問とは、方法はまったく変わってしまいますが・・・
Googleのアンケートフォームを使えば、集計は簡単にスプレッドシートにまとめることができたように思います。
ご参考までに。
https://www.makeleaps.jp/resources/articles/how- …
回答ありがとうございます。
Excelのマクロ、VBAは全く使ったことがなく、書かれているように、技術力を持ち合わせておりません。。。
また、今回はExcelの使用が前提になっています。。。
(Gpoogleは使えない)
シート名は【記入表】に統一されています。(全てのファイル内に【記入表】というシートが有り、重複してしまうと言うことで記載しました)
A部署の回答ファイル内の記入用シート
B部署の回答ファイル内の記入用シート
をINDIRECT関数を使えば1つのファイルのシートに集約できるのでしょうか。
各ファイル名の一覧がないと行けないのですね。。。それを作成する必要はありますね。
集計の際のINDIRECT関数の使い方についてもう少しお教えいただけないでしょうか。
(一般的な関数の構造などは自分でもちろん調べます。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Excel(エクセル) Excelの複数ファイルの複数行を別ファイル1つのシートにVBA、マクロで集約する方法 5 2022/09/13 06:30
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Excel(エクセル) Excel使用前提 同じフォルダ内にあるファイルの集約等をマクロでできますか 4 2022/09/06 19:03
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- システム vba シートの追加について 2 2023/05/17 15:58
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
複数ファイルから特定シートのコピー
Excel(エクセル)
-
複数のExcelファイルにある同名シートを1つのシートに一括でまとめるには?
Excel(エクセル)
-
ExcelのVBAで同一フォルダ内にあるファイルに同じ処理をしたい
Excel(エクセル)
-
-
4
エクセルで複数のシートをフォルダ化したい
Excel(エクセル)
-
5
フォルダ内の複数ファイルから特定のシートを一括削除
その他(Microsoft Office)
-
6
【ExcelVBA】全シートのセルの数式を値に変換する事は可能でしょうか?
Visual Basic(VBA)
-
7
同一フォルダ内の別ブックからシートをコピーするには? 「集計」フォルダ内に「項目別集計.xlms」と
Visual Basic(VBA)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
10
フォルダ内の複数ファイルから、特定セルだけを抽出し、並び替えて集約したい
Excel(エクセル)
-
11
EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約
Excel(エクセル)
-
12
複数ファイルにある特定のシートを一度に印刷したい
Excel(エクセル)
-
13
複数のExcelブックから特定シートの特定セル抽出
その他(Microsoft Office)
-
14
【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい
Excel(エクセル)
-
15
Excel VBAでオートフィルタで抽出した列データを別シートの最終行にコピーするには
Visual Basic(VBA)
-
16
複数エクセルから特定シートの特定行だけを別シートに抽出するマクロ
Excel(エクセル)
-
17
Excelで、複数ブックの複数シートを削除するマクロを教えて下さい
Excel(エクセル)
-
18
エクセルVBAで、値が入っている最終行の、右隣の値をコピーして、別のセルに貼り付けるコード
Excel(エクセル)
-
19
エクセルの2つのシートを並び替えで連動させる方法
Excel(エクセル)
-
20
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別シート参照のセルをシート毎...
-
エクセルの複数シートの保護を...
-
エクセルVBAでパスの¥マークに...
-
エクセルで前シートを参照して...
-
エクセルでファイルを開いたと...
-
EXCEL:同じセルへどんどん足し...
-
特定のシートの削除を禁止した...
-
Excel、同じフォルダ内のExcel...
-
エクセルで前のシートを連続参...
-
エクセルで複数設定したハイパーリンク先...
-
Excelのシートを、まとめて表示...
-
excelでシート毎の最終更新日を...
-
シートの保護のあとセルの列、...
-
[Excel]保護されたシートのマク...
-
Excelで同じシートのコピーを一...
-
EXCELで1ヶ月分の連続した日付...
-
シート番号からシート名を取得する
-
エクセルでファイル保存時に複...
-
エクセル マクロ実行時エラー’...
-
串刺し計算の中のあるシートを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
Excelのシートを、まとめて表示...
-
エクセルVBAでパスの¥マークに...
-
エクセルでファイルを開いたと...
-
excelでシート毎の最終更新日を...
-
別シート参照のセルをシート毎...
-
EXCEL:同じセルへどんどん足し...
-
前の(左隣の)シートを連続参...
-
エクセルで前シートを参照して...
-
Accessのスプレッドシートエク...
-
特定のシートの削除を禁止した...
-
シートの保護のあとセルの列、...
-
エクセルのシート名をリスト化...
-
VBAでシートコピー後、シート名...
-
EXCELで同一フォーマットのシー...
-
複数シートの特定の位置に連番...
-
エクセルで前のシートを連続参...
-
エクセルで複数設定したハイパーリンク先...
-
シートを追加・名前を次月に変...
おすすめ情報