新規シートを追加してから貼り付け
昨日の記事で、次のような操作を行った。
- シート追加
- 配列貼り付け
infoment.hatenablog.com
日々、それなりに登場する操作だ。
唐突に、「毎回シートを追加する」のが面倒くさくなった。
そこで、配列をシートに貼り付ける関数に、新規にシートを作成するか否かの引数を追加してみた。
' 配列をシートへ貼り付け。 Public Function PasteArray(destination As Range, _ Optional paste_type As PasteType = ptRange, _ Optional to_new_sheet As Boolean = False) As ListObject ' 新規シート貼り付け指定の場合、アクティブなシートの直後に ' 新規シートを追加する。 If to_new_sheet Then Sheets.Add After:=ActiveSheet ' Rangeオブジェクトは、引数として受け取った時点でのActiveSheetに ' 属している(らしい)。従って、追加シートに貼り付けたい場合は、 ' 追加シートのアドレスで再セットする必要がある。 Set destination = ActiveSheet.Range(destination.Address) End If Dim TargetRange As Range Set TargetRange = destination.Resize(rMax - rMin + 1, cMax - cMin + 1) TargetRange = source_array If paste_type = ptTable Then Dim TableName As String TableName = "Table_" & Format(Now, "yyyymmdd_hhmmss") ActiveSheet.ListObjects.Add(xlSrcRange, _ TargetRange, _ , _ xlYes).Name = TableName Set PasteArray = ActiveSheet.ListObjects(TableName) End If End Function
結果、昨日のコードのこの部分、
Sheets.Add After:=ActiveSheet SQC.TargetArray(arr).PasteArray Range("A1"), ptRange
は、下記のとおり一行になった。
SQC.TargetArray(arr).PasteArray Range("A1"), ptRange, True
たった一行のことだけど、塵も積もれば山となるってことで。
クラスモジュールの全文(最新版)はこちら。
infoment.hatenablog.com
参考まで。