複数選択したシートのシート名を取得
選択されているシートのコレクションを返すことのできる、
ActiveWindow.SelectedSheets
というプロパティがあることを初めて知ったので、備忘のために書いておきます。
ActiveSheet
と異なるのは、ActiveSheetは単一のシートが対象になるのに対し、ActiveWindow.SelectedSheetsは複数のシートを対象とすることができます。
複数のセルを選択して、Selectionで取得するようなイメージです。
実験として、選択中のシートのシート名をクリップボードに取得してみましょう。
「Ctrl」キーを押しながら、Sheet1、Sheet3、Sheet5を選択状態にして、マクロを実行。
こんな感じで、選択したシートのシート名を取得することができました。
For Each ~Nextを使って、シートのコレクションを順次処理するプログラムです。
Sub 複数選択したシートのシート名をクリップボードに取得() '選択したシートは左側から順次ループ処理されます Dim V As String Dim mySheet As Object Dim myLib As Object Set myLib = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") '参照設定なしでDataObjectのインスタンスを生成する For Each mySheet In ActiveWindow.SelectedSheets '選択したシートに対してループ処理を行う V = V & mySheet.Name & vbCrLf Next mySheet V = Left(V, Len(V) - 2) '最後の改行区切りを取り除く(CrLfは2文字) myLib.SetText V '変数の値をDataObjectに格納する myLib.PutInClipboard 'DataObjectのデータをクリップボードに格納する End Sub
※SubからEnd Subまでをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら。