[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『掲載したマクロ【貼り付け方法の変更】ご教示願います。』(れん)
下記のマクロをマクロを実行しているファイルの「シート5」に実行したいです。
また、張り付ける際に値で実行したいです。。
Option Explicit
Sub book_sum_1sheet()
Dim sFile As String Dim sWB As Workbook, dWB As Workbook Dim dSheetCount As Long Dim i As Long Dim dl_Dir As String Dim SOURCE_DIR As String Dim DEST_FILE As String Dim flg As Long Dim Maxrow As Long, Maxcol As Long Dim lRow As Long 'データ最終行取得変数 Dim lCol As Long 'データ最終列取得変数 Dim lRow2 As Long 'データ最終行取得変数2
Application.ScreenUpdating = False '更新非表示
'ダイアログでフォルダ選択 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "保存フォルダを選択して下さい" If .Show = False Then Exit Sub dl_Dir = .SelectedItems(1) End With
SOURCE_DIR = dl_Dir & "\" DEST_FILE = SOURCE_DIR & "全法人予算表.xlsx"
'指定したフォルダ内にあるブックのファイル取得 sFile = Dir(SOURCE_DIR & "*.xls*")
'フォルダ内にブックがなければ終了 If sFile = "" Then Exit Sub
'集約用ブックを作成 Set dWB = Workbooks.Add ActiveSheet.Name = "全法人予算表"
flg = 0 Do '全法人予算表.xlsxのチェック If sFile <> "全法人予算表.xlsx" Then Set sWB = Workbooks.Open(Filename:=SOURCE_DIR & sFile, ReadOnly:=True)
'シート再表示 For i = 1 To Sheets.Count Sheets(i).Visible = True Next i Sheets(1).Select
sWB.Activate
'データを1シートにまとめる For i = 1 To Worksheets.Count sWB.Activate With Worksheets(i) lRow = .Cells(Rows.Count, 1).End(xlUp).Row lCol = .Cells(1, Columns.Count).End(xlToLeft).Column 'シートのデータが2行以上の場合にコピー If lRow >= 2 Then dWB.Activate lRow2 = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 .Activate .Range(Cells(2, 1), Cells(lRow, lCol)).Copy dWB.Worksheets(1).Cells(lRow2, 1) dWB.Worksheets(1).Activate Maxrow = Cells(Rows.Count, 1).End(xlUp).Row Worksheets(1).Range(Cells(lRow2, Maxcol + 1), Cells(Maxrow, Maxcol + 1)).Value = sWB.Name Worksheets(1).Range(Cells(lRow2, Maxcol + 2), Cells(Maxrow, Maxcol + 2)).Value = .Name
End If End With Next i 'コピー元ファイルを閉じる sWB.Close SaveChanges:=False End If
'次のブックのファイル名を取得 sFile = Dir() flg = flg + 1 Loop While sFile <> ""
'集約用ブックを保存して閉じる dWB.SaveAs Filename:=DEST_FILE dWB.Close SaveChanges:=False
ThisWorkbook.Sheets(1).Cells(2, 4) = dl_Dir
MsgBox "完了しました" & vbCrLf & "作業フォルダにファイルが作成されました"
Application.ScreenUpdating = True '更新表示
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows10 >
次に
>マクロを実行しているファイルの「シート5」
↓に注目してみましょう
.Range(Cells(2, 1), Cells(lRow, lCol)).Copy dWB.Worksheets(1).Cells(lRow2, 1)
>張り付ける際に値で実行
【マクロの記録】を使って、コピーしたあと、「形式を選択してはりつけ」-「値」という作業をコード化してみて、どのような命令を使っているか調べてみましょう。
(もこな2 ) 2020/12/25(金) 13:41
■1
VBAの世界では基本的にシートやセルなど(オブジェクトといいます)を明示すれば、いちいちアクティブにしたり選択したりする必要はありません。
■2
「標準モジュール」で「Cells(2, 1)」のような書き方をした場合、「ActiveSheet.Cells(2, 1)」のようにアクティブシートを指定したものとして扱われます。
したがって、想定外のシートを対象にしないためにも、対象のブックやシートは明示したほうがよいとおもいます。
■3
シートの非表示を解除(再表示)していますが、アクティブにしないなら不要だと思います。
■4
↓のように最終列をもとめていますが必要ですか?
lCol = .Cells(1, Columns.Count).End(xlToLeft).Column
データを集約するような場合、大体最大【列】は決まっているんじゃないでしょうか?
(項目数はどのファイルも一緒じゃありません?)
(もこな2 ) 2020/12/25(金) 13:55
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.