VBAの勉強を始めてみた

色々試しています。

複数選択したシートのシート名を取得

選択されているシートのコレクションを返すことのできる、

 

ActiveWindow.SelectedSheets

 

というプロパティがあることを初めて知ったので、備忘のために書いておきます。

 

ActiveSheet

 

と異なるのは、ActiveSheetは単一のシートが対象になるのに対し、ActiveWindow.SelectedSheetsは複数のシートを対象とすることができます。

複数のセルを選択して、Selectionで取得するようなイメージです。

 

実験として、選択中のシートのシート名をクリップボードに取得してみましょう。 

「Ctrl」キーを押しながら、Sheet1、Sheet3、Sheet5を選択状態にして、マクロを実行。

f:id:kouten0430:20180420231309j:plain

 

こんな感じで、選択したシートのシート名を取得することができました。

f:id:kouten0430:20180420231341j:plain

 

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までをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら