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

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

新規登録して質問してみよう
ただいま回答率
85.35%
マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

1253閲覧

セル値(シート名)を選択し空白の場合をご教示願います。

chizuru0224

総合スコア3

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/06/11 08:54

ご教示願います。

下記のように、2つのブックがあり、1つのブックのセル値(A2)に入力しているブックを開き、2つ目のブックの
"シート1"、C列のセル値(C1)に入力しているシートに移動し(E3)をコピーし("集計表.xlsm")の(I2)に貼付をしていくのですが

シート1のC列の入力されているセルが追加したり削除したりします。
(C2)が削除になった場合、空白ができエラーになります。
C列で空白のセルの場合は、次に入力されている(C3)の作業にいく場合をご教示ください。
宜しくお願い致します。

Sub ブック()
'
' ブック Macro
'
Dim r As Range
For Each r In Range("A2")
Workbooks.Open ThisWorkbook.Path & "" & r.Value
Next

Sheets("シート1").Select

Dim str As String
**str = Worksheets("シート1").Range("C1")
**
Worksheets(str).Select

Range("e3").Select
Selection.Copy

Windows("集計表.xlsm").Activate
Range("I2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

For Each r In Range("A2") Workbooks.Open ThisWorkbook.Path & "\" & r.Value Next

Sheets("シート1").Select

str = Worksheets("シート1").Range("C2")

Worksheets(str).Select

Range("e3").Select
Selection.Copy

Windows("集計表.xlsm").Activate
Range("I3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

For Each r In Range("A2") Workbooks.Open ThisWorkbook.Path & "\" & r.Value Next

Sheets("シート1").Select

str = Worksheets("シート1").Range("C3")

Worksheets(str).Select

Range("e3").Select
Selection.Copy

Windows("集計表.xlsm").Activate
Range("I3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

End Sub

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

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

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

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

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

guest

回答1

0

ベストアンサー

VBA

1Sub Sample() 2 3 '2つのブックがあり、1つのブックのセル値(A2)に入力しているブックを開き、 4 Dim wb1 As Workbook, wb2 As Workbook 5 Set wb1 = ThisWorkbook 6 Set wb2 = Workbooks.Open(wb1.Path & "\" & wb1.Worksheets(1).Range("A2").Value) 7 8 '"シート1" 9 Dim ws As Worksheet 10 Set ws = wb2.Worksheets("シート1") 11 12 '("集計表.xlsm")の(I2) 13 Dim destCell As Range 14 Set destCell = Workbooks("集計表.xlsm").Worksheets(1).Range("I2") 15 16 Dim i, wsName As String 17 For i = 1 To ws.Cells(ws.Rows.Count, 3).End(xlUp).Row 18 19 '"シート1"、C列のセル値(C1)に入力しているシートに移動し 20 wsName = ws.Cells(i, 3).Value 21 If wsName <> "" Then 22 '(E3)をコピーし("集計表.xlsm")の(I2)に貼付 23 wb2.Worksheets(wsName).Range("E3").Copy destCell 24 Set destCell = destCell.Offset(1) 25 End If 26 Next 27 28End Sub

<追記>
コメントの1.にあったような、対象のブックがA2、A3、、、と複数ある場合は、
以下のようにFor Nextをひとつ増やしてあげる感じでいけるのではないかと思います。
(試せていないのでおかしなところがあったら適宜直してください。)
なお、以下の例ではOffsetで出力セルをずらしていますが、
出力セルの行番号を保持する変数を用意して、都度カウントアップするほうが
わかりやすいかもしれません。

VBA

1Sub Sample2() 2 3 '2つのブックがあり、 4 Dim wb1 As Workbook, wb2 As Workbook 5 6 '1つのブックのセル値(A2,A3...)に入力しているブックを開き、 7 Set wb1 = ThisWorkbook 8 Dim r, wbName 9 For r = 2 To wb1.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row 10 wbName = wb1.Path & "\" & wb1.Worksheets(1).Cells(r, 1).Value 11 Set wb2 = Workbooks.Open(wbName) 12 13 '"シート1" 14 Dim ws As Worksheet 15 Set ws = wb2.Worksheets("シート1") 16 17 'コピー先セル : ("集計表.xlsm")の(I2,I3...) 18 Dim destCell As Range 19 Set destCell = Workbooks("集計表.xlsm").Worksheets(1).Cells(Rows.Count, 9).End(xlUp).Offset(1) 20 21 Dim i, wsName As String 22 For i = 1 To ws.Cells(ws.Rows.Count, 3).End(xlUp).Row 23 24 '"シート1"、C列のセル値(C1)に入力しているシートに移動し 25 wsName = ws.Cells(i, 3).Value 26 If wsName <> "" Then 27 '(E3)をコピーし("集計表.xlsm")の(I2,I3...)に貼付 28 destCell.Value = wb2.Worksheets(wsName).Range("E3").Value 29 Set destCell = destCell.Offset(1) 30 End If 31 Next 32 33 Next 34 35End Sub 36

投稿2021/06/11 23:46

編集2021/06/14 10:19
jinoji

総合スコア4592

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

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

chizuru0224

2021/06/14 04:01 編集

jinoji様、ご教示いただきありがとうございます。 もう2点ほどご質問ですがご教示願います。 1、上記の方法でブック("A2")と追加でA3(ブック名)にも入力があった場合、("I3")に追加して貼付ける方法 2,値で貼付け方法 宜しくお願い致します。
jinoji

2021/06/14 04:03

取り急ぎ2の方だけ回答すると、 destCell.Value = wb2.Worksheets(wsName).Range("E3").Value とするか、 wb2.Worksheets(wsName).Range("E3").Copy 1.については、A3までなのか、A4,A5・・・と続くことを想定しているかによるのかなと思います。 destCell.PasteSpecial Paste:=xlPasteValues とするかのどちらかでいけると思います。
chizuru0224

2021/06/14 09:14

jinoji様、早くのお返事ありがとうございます。 宜しければお時間があるとき1の内容をご教示いただきますと幸いです。 宜しくお願い致します。
chizuru0224

2021/06/19 00:56

jinoji様、ご教示いただきありがとうございます。 また宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問