アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロは初心者です。
現在、複数のシートの表を新しいシートに1つの表にまとめた表をつくるマクロを組んでいます。
具体的にはaというシートに
ああ いい うう ええ おお
3 2 3 4 5
3 2 3 4 5
3 2 3 4 5
3 2 3 4 5
3 2 3 4 5
bというシートに
かか きき くく けけ ここ
3 2 3 4 2
3 2 3 4 2
3 2 3 4 2
3 2 3 4 2
3 2 3 4 2
という表がそれぞれあり、

「全データ」というシートをつくりそこに以下のように1つの表にまとめたいと考えています。

ああ いい うう ええ おお かか きき くく けけ ここ
3 2 3 4 5 3 2 3 4 2
3 2 3 4 5 3 2 3 4 2
3 2 3 4 5 3 2 3 4 2
3 2 3 4 5 3 2 3 4 2
3 2 3 4 5 3 2 3 4 2


マクロは組むことが出来たのですが、
aやbの表の値を変えると「全データ」に出来ている表の値も同時に更新されるようにしたいです。
どのように組み直せばよろしいでしょうか。
組んだマクロを下記に記載します。

Sub sh_check()
Dim newSh As String
Dim Sh As Worksheet
Dim myFlag As Boolean
newSh = "全データ"
myFlag = False
For Each Sh In ThisWorkbook.Worksheets
If Sh.Name = newSh Then
myFlag = True

Worksheets(newSh).Cells.ClearContents
Worksheets(newSh).Move before:=Sheets(1)
Exit For
End If
Next Sh

If myFlag = False Then
ActiveWorkbook.Worksheets.Add(before:=Worksheets(1)).Name = newSh
End If

End Sub
Sub matome()
Dim Sh
Dim i As Integer
Dim lRow As Long
Dim lRow2 As Long
Dim lCol2 As Long
Dim sh1 As String
Dim sh2 As String
Dim lCol As Long
Dim range1 As Range

Application.ScreenUpdating = False

sh_check


sh1 = "a"
sh2 = "b"

With Worksheets(sh1)
lRow = .Cells(Rows.Count, 2).End(xlUp).Row
lCol = .Cells(1, Columns.Count).End(xlToLeft).Column
If lRow >= 2 Then
lCol2 = Worksheets(1).Cells(1, Columns.Count).End(xlToLeft).Column + 1
If lCol2 = 2 Then lCol2 = 1
.Activate
.Range(Cells(1, 1), Cells(lRow, lCol)).Copy Worksheets(1).Cells(1, lCol2)
End If
End With


With Worksheets(sh2)
lRow = .Cells(Rows.Count, 2).End(xlUp).Row
lCol = .Cells(1, Columns.Count).End(xlToLeft).Column
If lRow >= 2 Then
lCol2 = Worksheets(1).Cells(1, Columns.Count).End(xlToLeft).Column + 1
If lCol2 = 2 Then lCol2 = 1
.Activate
.Range(Cells(1, 2), Cells(lRow, lCol)).Copy Worksheets(1).Cells(1, lCol2)
End If
End With


Worksheets(1).Activate
Range("A1").Select
Application.ScreenUpdating = True
End Sub

A 回答 (1件)

「aやbの表の値を変えると『全データ』に出来ている表の値も同時に更新されるようにしたいです。

」ですと処理が重くなってしまうのでやめた方が良いです。
それよりも『全データ』シートを開いた時に変更されていれば良いはずなので『全データ』のシートモジュールの『Worksheet_Activate()』イベントで『matome』をコールした方が良いと思います。
ただ、このままだといくつかの問題が有ります。
① 先に『全データ』シートが無いと『Worksheet_Activate()』イベントにコードを書き込む事ができません。
②『○○.Activate』みたいな物がいくつかあるので直さないといけません。
---------------------------------------------------------------
話は変わりますが、提示のコードでは『b』シートの1列目が『全データ』シートで抜けてしまいます、修正が必要ですよ。
    • good
    • 0

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