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

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

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

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

マクロ

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

Q&A

解決済

1回答

794閲覧

VBA:Excelから2つシートを同時に取り込み、指定した位置へ移動させたい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

マクロ

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

0グッド

0クリップ

投稿2021/10/13 01:25

前提・実現したいこと

ユーザーフォームを使用しておりComboBox1で 1 が選択されている時、CommandButton1を押下し下記の処理を実現したいです。

ダイアログボックスでExcelを選択し
左から8番目のシートをマクロ実行ファイルへ取り込み、rawdataシートとして左から2番目に移動
左から2番目のシートをマクロ実行ファイルへ取り込み、集計シートとして左から3番目に移動
を処理をしたいです。

現状は
左から8番目のシートを取り込み、rawdataシートとして左から2番目に移動
のみ対応できてます。

シートを同時に2つ移動できず困っていますので、ご教示いただけますと幸いです。

該当のソースコード

VBA

1Private Sub CommandButton1_Click() 2 3 Dim filePath As Variant 4 filePath = Application.GetOpenFilename 5 6 Dim wb As Workbook: Set wb = ThisWorkbook 7 Dim wb1 As Workbook 8 9If ComboBox1 = "1" Then 10 11 On Error Resume Next 12 Set wb1 = Workbooks.Open(filePath) 13 Application.Visible = False 14 wb1.Activate 15 wb1.Worksheets(8).Move Before:=wb.Worksheets(2) 16 wb.Activate 17 wb.Worksheets(2).Select 18 Worksheets(2).Name = "rawdata" 19 '指定した列以外の削除 20 Range("A:A,C:D,K:L,O:R").Delete 21 22 Dim colcnt As Integer 23 24 '全列文字列で保存されている数値を数列に変換 25 colcnt = 1 26 While Cells(1, colcnt) <> "" 27 Columns(colcnt).TextToColumns Comma:=True 28 colcnt = colcnt + 1 29 Wend 30 31 On Error GoTo 0 32 If filePath = False Then 33 Exit Sub 34 Else 35 TextBox3.Value = filePath 36 End If 37 Exit Sub 38 39ElseIf ComboBox1 = "2" Then 40 41 On Error Resume Next 42 Set wb1 = Workbooks.Open(filePath) 43 Application.Visible = False 44 wb1.Activate 45 wb1.Worksheets(1).Move Before:=wb.Worksheets(1) 46 wb.Activate 47 wb.Worksheets(1).Select 48 Worksheets(1).Name = "sheet1" 49 On Error GoTo 0 50 If filePath = False Then 51 Exit Sub 52 Else 53 TextBox3.Value = filePath 54 End If 55 Exit Sub 56 57 End If 58 59End Sub 60

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

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

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

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

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

hex309

2021/10/13 02:00

同時に2つ移動する必要ありますか?1つはできているのであれば、同様の処理をもう1回行えばよいのでは?
退会済みユーザー

退会済みユーザー

2021/10/13 02:09

移動させたいシートの内容が違うため、同時に2つ移動する必要はあります。 同じ内容のシートでしたらおっしゃる通りかと思います。
hatena19

2021/10/13 02:24 編集

> 左から2番目のシートをマクロ実行ファイルへ取り込み、集計シートとして左から3番目に移動 上記のコードの記述がどこにもないので、当然です。 左から8番目のシートを取り込み、rawdataシートとして左から2番目に移動ができているなら、 上記の処理も書けますよね。
hex309

2021/10/13 02:24

すみません。言葉不足で。 次のような流れではだめなのかな、と思った次第です。 If ComboBox1 = "1" Then '8番目のシートの移動 '8番目のシートに対する処理 '2番目のシートの移動 '2番目のシートに対する処理 これであれば、 wb1.Worksheets(8).Move Before:=wb.Worksheets(2) の部分を wb1.Worksheets(2).Move Before:=wb.Worksheets(3) として、2番目のシートを移動すればよいのでは? それとも、1回のMoveメソッドで2つのシートを移動しなくてはならないのでしょうか?
退会済みユーザー

退会済みユーザー

2021/10/13 03:08

hex309さん 詳細にありがとうございます。 意図が理解でき、自身で対応できました。 hatena19さん 自身で何度が試し対応できなかったため記述せず質問させていただきました。 わざわざお時間を割いてまでご指摘いただきありがとうございます。
hatena19

2021/10/13 05:08 編集

自己解決できたのですね。 まとめて移動させる方法を回答しておきました。 2つのシート間で参照していたりすると一つずつではまずい場合がありますので、その場合は参考にしてください。
guest

回答1

0

ベストアンサー

通常は一枚ずつ移動させても問題ないと思いますが、
シート間で参照している場合、うまくいかない場合があるそうです。

1枚ずつコピーした場合との違い

ということで、まとめて移動するならArrayを使って下記のような感じで。

vba

1 Dim wb As Workbook 2 Set wb = ThisWorkbook 3 4 Dim wb1 As Workbook 5 Set wb1 = Workbooks.Open(filePath) 6 7 wb1.Activate 8 Worksheets(Array(wb1.Worksheets(2).Name, wb1.Worksheets(8).Name)).Move _ 9 Before:=wb.Sheets(2)

投稿2021/10/13 03:14

編集2021/10/13 03:22
hatena19

総合スコア34075

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

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

退会済みユーザー

退会済みユーザー

2021/10/13 05:08

ご回答までいただきありがとうございます! 大変助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問