質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

71015閲覧

エクセルマクロでシート名をセルからひっぱりたい

macro-beginner

総合スコア25

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/01/25 06:21

For i = 1 To 10 If i > 10 Then MsgBox "Bookがそんなにありません" Exit For End If Workbooks.Open op.Range("C2").Offset(i - 1, 0).Value With ActiveWorkbook Range("A1:AU3100").Copy Workbooks("CAB-Grapf.xls").Worksheets("sheet" & i).Range("A1:AU3100").PasteSpecial Paste:=xlPasteAll

このコードでやりたい事はセルC2からC11までのパスから指定のブックを開きそれをコピーして、
CAB-Grapf.xlsの各シートに貼り付けたいのですが、
今現在のコードだと、Worksheets("sheet" & i)となっているのでシート名が"sheet1"とか"sheet2"でしか読み込めません。

シート名は変更予定なのでこのままだといちいちマクロを修正しなければなりません。

なので指定のセルに例えばSampleと記入しておき、その値をひろってシートをよみこみたいです。

つまり、

Workbooks("CAB-Grapf.xls").Worksheets("sheet" & i).Range("A1:AU3100").PasteSpecial Paste:=xlPasteAll

の"sheet"の部分をセルからひっぱった値にしたいという事です。

いろいろ試してはみたのですが、ことごとく玉砕されてしまったのでどなたか教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

セルの値はCells.Valueで取得できます。
例えばB5セルの値であれば、Cells(5, 2).ValueとかCells(5, "B").Valueといった式で取得できます。

今回はこれを複数取りたいので、ループ処理で回します。
例えば最初から10シートとわかっていれば、

For i = 0 To 9 '対象シート名を取得 strSheetName = Cells(5 + i, "B").Value 'B5~B14まで順番にセルの値を取得 '貼り付け Workbooks("CAB-Grapf.xls").Worksheets(strSheetName).Range("A1:AU3100").PasteSpecial Paste:=xlPasteAll Next

といったコードで取得になります。

対象シートがいくつあるのかわからない場合、ループする回数も判断しなければなりません。

Do~Loopで無限ループして、B列が空欄になったらループを抜ける方法や、
B列の最終データ行(B列最下行から[CTRL]+[↑]を操作したセル)を調べてその行までループする方法などがあります。

'Do~Loopするサンプル i = 0 Do strSheetName = Cells(5 + i, "B").Value 'B5セルから順番にセルの値を取得 If strSheetName = "" Then Exit Do '取得したセル内容が空欄ならループを抜ける i = i + 1 Loop
'B列最終データまでループするサンプル For i = 5 To Cells(Rows.Count, "B").End(xlUp).Row '5行目~最終データ行までループ strSheetName = Cells(i, "B").Value 'セルの値を取得 Next

ブック内のすべてのシートを対象とするならもう少し楽にできそうですが、今回はセル値からシート名を取得したいということでしたので、ここでは割愛します。

参考になれば幸いです。

投稿2017/01/25 07:46

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macro-beginner

2017/01/25 08:04

できました!ありがとうございました!
guest

0

ActiveSheetのセル "B1" にシート名が書かれているとして以下でいいのでは?

VBScript

1Dim sheetName As String 2sheetName = ActiveSheet.Range("B1").Value 3 4Workbooks("CAB-Grapf.xls").Worksheets(sheetname).略 5

セル B1 ~ B10 にシート名が文字列として記載されているとして以下のように
取得セルの範囲指定で"B"にループ変数の値を文字列として連結する

VBScript

1Dim sheetName As String 2For i = 1 To 10 3 sheetName = ActiveSheet.Range("B" & CStr(i)).Value 4 Workbooks("CAB-Grapf.xls").Worksheets(sheetname).略 5Next 6

投稿2017/01/25 06:43

編集2017/01/25 07:38
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macro-beginner

2017/01/25 07:06

ご回答ありがとうございます。 すみません、説明が足りませんでした・・・ For文で回してシートが10枚ほどできるのでそれぞれのシート名を各セルからもってきたいのです。 例えば"B1"がsample1、"B2"がsample2、"B3"がsample3,というように記入してあったとして、 "sheet"の部分をその各セルから引張りたいのです。 つまり、"sheet1"を"sample1"、"sheet2"を"sample2"というような感じです。
Y.H.

2017/01/25 07:38 編集

for文でループして"B"にループ変数の値を文字列として連結するだけですよね? 一応回答に追記しておきました。
macro-beginner

2017/01/25 08:04

できました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問