[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートの複数選択』(一番弟子)
皆さまお世話になります。
excelvbaで質問です。
シート数が毎回違います2Sheetから36Sheetぐらいです。
そこでSheet2から最後まで複数シートを選択したいのです。
VBAの作り方をご教授ください。
よろしくお願いいたします。
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
>シートの複数選択(Select) https://excel-ubara.com/excelvba5/EXCELVBA204.html
「VBA シート 複数選択」
で、検索しました。
(まっつわん) 2024/11/19(火) 16:06:15
Sheets(i).Select (False)
Next
(ヘイヘイポーラ) 2024/11/19(火) 16:13:57
こうなのか
Sub sample1()
Worksheets("Sheet2").Select
For i = Worksheets("Sheet2").Index + 1 To Worksheets.Count
Worksheets(i).Select False
Next
End Sub
それともこうなのか
Sub sample2()
For i = 2 To Worksheets.Count
Worksheets(i).Select i = 2
Next
End Sub
質問文からは読み取れないので、良い方で (´・ω・`) 2024/11/19(火) 16:21:22
すべて試しましたが、一番左のシートも選択してしまいます、
左から2番目のシートから最後のシートを選択して左から2番目のシートを開けたいのですが。
よろしくお願いいたします。
(一番弟子) 2024/11/19(火) 17:12:12
横から失礼します。
全て試してみましたが、
>一番左のシートも選択してしまいます、
ということはありませんでした。 (OK) 2024/11/19(火) 17:28:46
シートの選択部分は、(´・ω・`)さんの 2024/11/19(火) 16:21:22 発言でOKでは?
> 2番目のシートを開けたい
は、シート選択はそのままで、表示されるシートが2番目のシートということでしょう。
Worksheets(2).Activate
を加えればいいでしょう。
(xyz) 2024/11/19(火) 20:13:14
詳しく申し上げますと
1番左のシートのB4〜I4の値を2番目のシートから最後のシートまでのB6〜I6にコピペしたいのです
1番左のシートが原票みたいな感じで読み込んだデータをシート展開するので毎回シート数が異なります。
よろしくお願いします。
(一番弟子) 2024/11/19(火) 22:31:09
目的を最初に明示したほうがいいですね。 22:31:09のものが目的なら、いままで質問してきた、複数のシートを同時に選択する必要なぞありません。 できないことはないですが、普通にFor .. Next で繰り返しを行うのがよいでしょう。 頑張ってください。 (xyz) 2024/11/19(火) 22:44:52
手作業ならばその発想でOKですが、マクロだと逆に難しくなるので、既に提案があるように、ループ処理で1シートずつ処理することをオススメします。
(もこな2 ) 2024/11/20(水) 00:08:52
そのように書いたのではないですか?
実際に実行したコードを提示してくだされば、
回答側で添削ができるのですが。。。
基本的にマクロを作るときは、「選択」が主目的でない場合は、
あえて選択しません。選択しなくても文章で指定すれば事足ります。
手動の場合は、「選択」することで色々なことを指定するようになるので、
選択が必要になりますが。
Selectしない>>
http://officetanaka.net/excel/vba/speed/s2.htm
参考コード
Sub test002()
Dim ws As Worksheet
For Each ws In Worksheets
'左から1番目をコピー
If ws.Index = 1 Then
ws.Range("B4:I4").Copy
'それ以外に貼り付け
Else
ws.Paste ws.Range("B6:I6")
End If
Next
Application.CutCopyMode = False
End Sub
変数の使い方や、繰り返しの構文、条件分岐の構文
基礎ですので、しっかり勉強してみてください。
(まっつわん) 2024/11/20(水) 08:49:23
私がテストした限りでは、 (´・ω・`)さんの「sample2」しか正常にワークしなかったけどなぁ・・
Sub sample2()
Dim i As Long
For i = 2 To Worksheets.Count
Worksheets(i).Select i = 2
Next
tenki
End Sub
Sub tenki()
Worksheets(1).Range("B4:I4").Copy Worksheets(2).Range("B6")
Windows(1).SelectedSheets.FillAcrossSheets Worksheets(2).Range("B6:I6")
End Sub
(半平太) 2024/11/20(水) 09:33:02
解説しますね
Worksheet.Select メソッド https://learn.microsoft.com/ja-jp/office/vba/api/excel.worksheet.select
Select True とすると(省略した場合はTrueと同じ) そのシートだけが選択されます。シートタブをクリック Select False とすると、選択されているシートに追加で選択です。シートタブを Shift+クリック と同じ
For i = 2 To Worksheets.Count Sheets(i).Select False Next というコードでは ・1番目のシートが選択されている状態で実行すると、1番目のシートに2番目のシートが追加で選択されて・・・ 全部のシートが選択されてしまいます。 ・1番目以外のシートが選択されている状態で実行すると、最初に選択されていたシートがActiveままになり 2番目のシートがActiveになりません と、結果が実行前に選択されていたシートに依存することになります。
これを防止するには 2番目のシートを選択するときは、引数にTrueを指定(もしくは省略)し、 2番目以降のシートを選択するときは、引数にFalseを指定する必要があります。 (´・ω・`) 2024/11/19(火) 16:21:22 はそうなっています。
で、話の流れはシート選択しない方ループで対処する方がいいのではないかとなっていると思いますが 私もその方がいいと思います。 (´・ω・`) 2024/11/20(水) 09:35:54
おなか一杯かと思いますが、折角書いたので、その供養のために投稿しておきます。
test1を推奨します。 test3のようにすれば可能は可能です。 (もっと気の利いたものが投稿されました。↓は素朴な手法です。) test2は参考です。
速度は、 (早い) test1 < test3 < test2 (遅い) の順です。 参考にしてください。
Sub test1()
Dim k As Long
For k = 2 To Worksheets.Count
Worksheets(1).[B4:I4].Copy Worksheets(k).[B6]
Next
End Sub
Sub test2()
Dim k As Long
Worksheets(1).[B4:I4].Copy
For k = 2 To Worksheets.Count
Worksheets(k).[B6].PasteSpecial Paste:=xlPasteAll
Next
Application.CutCopyMode = False
'各シートのセル選択は修正せず
End Sub
Sub test3()
Dim k As Long
Worksheets("Sheet2").Select
For k = Worksheets("Sheet2").Index + 1 To Worksheets.Count
Worksheets(k).Select False
Next
Worksheets(1).[B4:I4].Copy
Worksheets(2).[B6].PasteSpecial Paste:=xlPasteAll
Worksheets(2).[A1].Select '貼り付け先が選択されているのを解除
Application.CutCopyMode = False
Application.Goto Worksheets(1).[A1] '各シートの選択も解除されます
End Sub
sample1は sheet2の位置に依存しているということなんでしょうか。(解説がございました) (xyz) 2024/11/20(水) 09:40:11
手作業で作業していた事なので、そのまま記録マクロ感覚で考えていました。
参考になりました。
今から頑張って、作成します。
皆さまご丁寧な対応ありがとうございます。
(一番弟子) 2024/11/20(水) 09:49:14
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.