こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL VBA 複数シートを1シートまとめる

お世話になります。

面談.xlsというブックがあります。
このブックの中には一番左に[集計]というシートがあり、右隣から[個人別面談 田中],[個人別面談 山本],[個人別面談 高橋],という個人別のシートが複数あります。(可変です)

やりたいこと
(1)[集計]シートに[集計開始]というボタンを設置してクリック
(2)右隣の[個人別面談 田中]シートを読み込む
(3)[集計]シートのB1に[個人別面談 田中]のA1を挿入
[集計]シートのB2に[個人別面談 田中]のB1を挿入
[集計]シートのB3に[個人別面談 田中]のC1を挿入
(4)次の[個人別面談 山本]シートを読み込む
(5)[集計]シートのC1に[個人別面談 山本]のA1を挿入
[集計]シートのC2に[個人別面談 山本]のB1を挿入
[集計]シートのC3に[個人別面談 山本]のC1を挿入
(6)次の[個人別面談 高橋]シートを読み込む
(7)[集計]シートのD1に[個人別面談 高橋]のA1を挿入
[集計]シートのD2に[個人別面談 高橋]のB1を挿入
[集計]シートのD3に[個人別面談 高橋]のC1を挿入
(8)完了!

※[集計開始]ボタンをクリックすると[集計]シートB1~D3の値は毎回クリアする仕様にしたいです
環境 Excel2013

会社でこのような仕組みをVBAで作れと言われましたが当方初心者で困っています。
どなたかお知恵をお借りできませんでしょうか?
よろしくお願い致します。

投稿日時 - 2016-05-25 16:19:49

QNo.9177771

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは
説明通りの状態なら、フォームボタンに下記マクロを登録して試して下さい。
Sub test()
  Dim i As Long
  With ThisWorkbook.Worksheets
    For i = 2 To .Count
      .Item(1).Cells(1, i) = .Item(i).Cells(1, 1)
      .Item(1).Cells(2, i) = .Item(i).Cells(1, 2)
      .Item(1).Cells(3, i) = .Item(i).Cells(1, 3)
    Next
  End With
End Sub

投稿日時 - 2016-05-25 16:30:43

お礼

ushi2015さん、ご連絡ありがとうございました!
(当方からのご連絡が遅くなりまして申し訳ありません)

ご教授いただきました方法で実現できました!
完璧に実現できました。
本日提出すつことができました。

本当に助かりました!
この度は本当にありがとうございました!

投稿日時 - 2016-06-02 22:25:55

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

ブックを用意する
ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける

sub macro1()
 dim c as long
 worksheets("集計").range("B1:IV3").clearcontents
 for c = 2 to worksheets.count
  worksheets("集計").range("A1:A3").offset(0, c - 1).value = application.transpose(worksheets(c).range("A1:C1").value)
 next c
end sub

ファイルメニューから終了してエクセルに戻る
集計シートにオートシェイプの図形やテキストボックスでボタン絵柄を作成する
右クリックしてマクロの登録を開始,macro1を登録して完成。






#ホントの情報提供がメンドクサくて,てきとーに相談内容を書いて教われば自力で応用できると考えたご相談ですね。頑張ってしっかり作成してください。

投稿日時 - 2016-05-25 23:14:49

お礼

keithinさん、ご連絡ありがとうございました!
(当方からのご連絡が遅くなりまして申し訳ありません)

いつもありがとうございます。

ご教授いただきました方法で実現できました!
完璧に実現できました。

まったくもってご指摘通りです。
ただ情報提供がメンドクサくいわけではなく、なるべく簡単にお伝えするために質問を簡単にしようと思いました・・。
ご気分を悪くされたのならお詫び申し上げます。

この度は本当にありがとうございました!

投稿日時 - 2016-06-02 22:32:26

ANo.2

質問の文章はよく書けていると思う。
しかし、課題丸投げですな。ここはVBAコード要求の丸投げをする場所でないと思う。
上司に、質問コーナーで教えてもらって作れた、と伝えないと、今後質問者への要求が拡大して、質問者が窮地に陥るかも。
ーー
標準モジュールに下記をコピペ
Sub test01()
Set shu = Worksheets("集計")
c = 2 '集計シートは最初B列から書き出し
'-前シートの繰り返し処理
For Each sh In Worksheets
If sh.Name <> "集計" Then '集計シートは例外除外
MsgBox sh.Name
'--処理ーー
shu.Cells(c, 1) = sh.Range("A1")
shu.Cells(c, 2) = sh.Range("B1")
shu.Cells(c, 3) = sh.Range("C1")
c = c + 1 '次シートは次の右列へ
'---
End If
Next
'--
End Sub
実行して質問者の仕様とOKならば、シートにコマンドボタンを作り、そのクリックイベント部にTest01を書けばよい。
ーー
テストデータ
Sheet2 A1:C1
a b c
Sheet3 A1:C1
d  e  f
Sheet4 A1:C1
g  h i
「集計」シート A2:c4
a b c
d e f
g h i
急いで作ったので、代入の辺のコードのセルが誤っておれば上記のコードを修正してください。

投稿日時 - 2016-05-25 17:23:48

お礼

imogasiさん、ご連絡ありがとうございました!
(当方からのご連絡が遅くなりまして申し訳ありません)

ご教授いただきました方法で実現できました!
完璧に実現できました。

本当にいつも丸投げしてしまっています。。
上司には全部WEBで教えてもらってる、と言ってあります。
そのれを承知で依頼してくるので、自分でもいけないな、と思っていますが要求が立て続けにくるので。。。

詳しいコードのご紹介ありがとうございました。
完璧に実現できました。

この度は本当にありがとうございました!

投稿日時 - 2016-06-02 22:29:43

あなたにオススメの質問