ここから本文です

エクセルのマクロでArray関数を使って複数のシートを一枚のシートに統合しています...

kom********さん

2012/6/1907:02:47

エクセルのマクロでArray関数を使って複数のシートを一枚のシートに統合しています。
シート名の指定方法で悩んでいます。
以下に詳しくします。
どなたかお知恵を拝借できればと思います。 よろしくお願いします。

シート名「さくら」というシートと「もも」というシートを一枚の新しいシートにします。
各シートには番号や名称等のデータが入っていますが、そのデータ範囲をコピーして、新シートに貼りつけています。
このように使っています。

Dim 開始セル As String
Dim シート名 As Variant
シート名 = Array("さくら","もも")

Sheets.Add After:=Sheets(Sheets.Count)
Sheets(シート名(1)).Activate
ActiveCell.CurrentRegion.Select
開始セル = ActiveCell.Address

Selection.Resize(1).Copy
Sheets(Sheets.Count).Range("A1").PasteSpecial

※ For i = 1 To 2
Sheets(シート名(i)).Activate
Range(開始セル).CurrentRegion.Select
Selection.Offset(1).Resize(Selection.Rows.Count - 1).Select
Selection.Copy Sheets(Sheets.Count).Cells(Rows.Count, 1).End(xlUp).Offset(1)
Next i

....
とこのような感じです。


今は統合したいシート名をマクロに書きこんでいますが、VBエディターを開かなくてもシート名が指定できるようにしたいです。
※の i = 1 to 2 の 2 は、変数を使って対応出来ましたが、 マクロは超超初心者の私はシート名の指定の仕方で悩んでいます。
Array関数にはこだわりがあるわけではありません。

どうぞよろしくお願いします。

閲覧数:
1,304
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

tss********さん

編集あり2012/6/1909:45:20

開きたいシート一覧を作成していいのなら、

Sub シート選択()

Dim c As Range
Dim maxrow As Integer

maxrow = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row

For Each c In Worksheets("Sheet1").Range("A1:A" & maxrow)

Worksheets(c.Value).Select

Next c

End Sub

としてもできると思います。

これは、Sheet1のA列のA1から1セル1シート名を入力していれば
何行になってもA列に記入したシート名を選択するようにできます。

ですので、追加で対象シートを増やしたい時は、
Sheet1のA列に追加してあげれば
コード的には変更が必要ありません。

シートが変更になる事が多いのでしたら
この方法も結構使えると思いますので
試してみてはどうでしょう?

このコードは、単純にシートを選択するだけになっていますので
実際のコードと組み合わせて使用してください。

質問した人からのコメント

2012/6/20 08:15:36

ありがとうございました。 まさに、これ!です。 調子よく動いてくれています。ありがとうございました。

他の方もご回答ありがとうございました。
シートのグループ化という方法もあるのですね。 これはシート名を入力しなくて良いので楽ですね。 また使ってみたいです。
質問の焦点がぼやけていたにも関わらず皆さんすぐによいご回答を下さってありがとうございました。 すごいです。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

riv********さん

2012/6/1909:34:53

シートのグループ化(シートのタブをCtrlキーを押しながらクリックしていく)を使ったらどうでしょう。

グループ化されたシートはActiveWindow.SelectedSheetsというコレクションになりますので

Sub Macro1()
Dim ws As Worksheet, wsm As Worksheet
Sheets.Add After:=Sheets(Sheets.Count)
Set wsm = ActiveSheet
For Each ws In ActiveWindow.SelectedSheets
'ここでwsからwsmに必要な領域をCopy
Next
End Sub
このようなコードで処理できます。

るたさん

2012/6/1909:12:03

どのようにシート名を指定したいですか?

例えば、Sheet1のA1、A2セルに各々のシート名称を入力したいとした場合は以下の通りとなります。

With WorkSheets("Sheet1")
シート名 = Array(.Range("A1").Value,.Range("A2").Value)
End With

どのようにシート名を指定したいのかを示すと、求めている回答がつくと思います。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる