- ベストアンサー
マクロ・VBAを使って同じファイル内にある・・・
同じファイル内にある複数のExcelブックに 一挙に同一作業を行うことは可能でしょうか。 たとえば、今マイドキュメントの「売上」という ファイルに神奈川売上、東京売上、埼玉売上・・・というブックがあるとします。全てのファイルのC列にA*Bという計算式をテーブルの一番下の行まで入力したいとします。こういったことは、可能なのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 フォルダーは、 "C:\My Documents\売上" とする 各ブック(東京売上等)の"Sheet1"に、C列=A列*B列 の式を入れる 1行目は見出し行としデータは2行目からとする 式を入れる最終行は、A列の最後のデータがはいっている行までとする ------------------------------------------------ Sub TEST() Dim myPath As String Dim myBook As String Dim WBK As Workbook Dim LastRow As Long Application.ScreenUpdating = False myPath = "C:\My Documents\売上\" myBook = Dir(myPath & "*.xls", vbNormal) Do While myBook <> "" Set WBK = Workbooks.Open(myPath & myBook) LastRow = Sheets("Sheet1").Range("A65536").End(xlUp).Row Range("C2:C" & LastRow).Formula = "=RC[-2]*RC[-1]" WBK.Close SaveChanges:=True myBook = Dir Loop Application.ScreenUpdating = True End Sub ------------------------------------------- 尚、式を入れる最終行がA列で判断できないときは、最終行を判断できる列番号に変える。 例えばそれが、E列だとすると上記のコードの Range("A65536")をRange("E65536")に変える。 他にも色々な方法はあるのですが一案ということで。 以上です。
その他の回答 (4)
- natsuma
- ベストアンサー率28% (2/7)
前半は、複数のExcelブックに同一作業を行う、 後半は、複数のシートに同一作業を行う、になっていますね。 >今マイドキュメントの「売上」というブックに神奈川売上、東京売上、埼玉売上・・・というシートがあるとします。 >全てのシートのC列にA*Bという計算式をテーブルの一番下の行まで入力したいとします。 マクロをご希望のようですが・・、 ご存知かもしれませんが、 「売上」というブックで、Shiftを押したまま 神奈川売上、東京売上、埼玉売上・・・の最後尾のシートを選択して、C1にA*Bという計算式を入力、 C1セルの右下にマウスをポイントして+をクリックしたままテーブルの一番下の行まで選択します。
- natsuma
- ベストアンサー率28% (2/7)
>同じファイル内にある複数のExcelブックに 同じフォルダ内にある・・・では? >たとえば、今マイドキュメントの「売上」という ファイルに ブックに・・・かな? >神奈川売上、東京売上、埼玉売上・・・というブックシート・・・かな?
補足
回答ありがとうございます。 >同じファイル内にある複数のExcelブックに というのは、間違いです。正しくは、ご指摘の通り、 売上というフォルダ内にある神奈川売上、東京売上、埼玉売上・・・というブックに計算式を一括入力 するというものです。申し訳ございませんでした。
- Zero_0
- ベストアンサー率35% (72/201)
#1です。すみません間違えました。 2,3,4行目のsheet(はsheets(のようにsが必要です。
- Zero_0
- ベストアンサー率35% (72/201)
可能です。 sub 計算式の入力 sheet("東京売上").select:gosub 式代入 sheet("埼玉売上").select:gosub 式代入 sheet("神奈川売上").select:gosub 式代入 exit sub 式代入: Range("C1").Select ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]" '計算式 Range("C1").Select Selection.AutoFill Destination:=Range("C1:C10"), Type:=xlFillDefault Range("C1:C10").Select return End sub のような感じでどうでしょう。とりあえず式は10列までしかコピーしていませんが。
お礼
ありがとうございます。 自身でも試してみて、うまくできました。 作業効率の大幅アップが期待できそうです。 本当に感謝します。