win98、エクセル2000を使用しています。
VBA初心者です。
前年のファイルのデータを次年度にコピーしたいのです。
変数を使って前年を動的に選択したいので、
わからないながら、下記のように書いてみました。
とりあえず、Workbooks.Open fNameまでは
作動するのですが、それぞれを交互にactiveに出来ません。
下記の記入自体にも自信はないのですが、
とりあえず→の部分にどのように書けばそれぞれを
activeにできるのでしょうか?
苦労しています。教えていただけると助かります。
お願いします。
・・・・・・・・・・・・・・・・・・・・・・・・・
Dim fName
Dim gName
fName = "c:\Windows\デスクトップ\日計表\" & ActiveSheet.Range("b2") & "年度.xls"
gName = "c:\Windows\デスクトップ\日計表\" & ActiveSheet.Range("d5") & "年度.xls"
Workbooks.Open fName
'6月・・・・・・・・・36
'→ここでgNameをactiveにしたい・・・・・・・・
Sheets("06月").Select
ActiveSheet.Unprotect
'→ここでfNameをactiveにしたい・・・・・・・・
Sheets("06月").Select
Range("C7:F36").Select
Selection.Copy
・
・
ちなみにファイル名はgNameは2005年度、fNameは2004年度で同じ日計表というホルダにあります。
・
・・・・・・・・・・・・・・・・・・・・・・・・・
No.1ベストアンサー
- 回答日時:
1)ファイル名で指定する方法・・・ブック名だけを保存する変数fName2、gName2を作成します。
Dim fName2 As String
Dim gName2 As String
fName2 = ActiveSheet.Range("b2") & "年度.xls"
gName2 = ActiveSheet.Range("d5") & "年度.xls"
としておけば、gNameとfNameを開いた後は、それぞれ
Workbooks(fName2).Activate
Workbooks(gName2).Activate
でそれぞれをActiveにできます。
2)ブックのインデクスを参照する方法
上の例ではgNameを開くコマンドが書かれていませんが、本来なら、開いた順に
インデックスが加算していきます。つまり、元々3つのブックが開いている状態で新たに
Workbooks.Open fName
としてブックfNameを開いた場合、このブックのインデックス番号は4となるわけです。
つまり最後に開いたブックのインデックス番号は現在開かれているブックの総数に等しい
ということです。したがって、
Workbooks.Open fName
Workbooks.Open gName
という順番でブックを開いていたとしたら、gNameをアクティブにしたい場合は、
Workbooks(Workbooks.Count).Activate となり、fNameをアクティブにしたい場合は
Workbooks(Workbooks.Count - 1).Activate となるわけです。
ここからが重要ですが、データ処理を行う際に毎度ブックを切り替える必要は
ありません。
Workbooks(Workbooks.Count - 1).Activate
Sheets("06月").Select
Range("C7:F36").Select
Selection.Copy
fName を Active にし、「06月」シートを選択し、セル範囲「C7:F36」を選択し、
最終的に選択されたものをコピーする。
それなら
Workbooks(Workbooks.Count - 1).Sheets("06月").Range("C7:F36").Copy
fName の 06月 シートのセル範囲 C7:F36 をコピーする。
の1行でまとまりますね。まとまるだけでなく、余計な動作がなくなるため
処理がずっと早くなりますよ。
ご回答ありがとうございます。
Workbooks(Workbooks.Count).Activate
Workbooks(Workbooks.Count-1).Activate
で切り替えが、お陰さまで出来ました。
まだ、知識不足のためおぼつきませんが、
Workbooks(Workbooks.Count - 1).Sheets("06月").Range("C7:F36").Copy
という書き方も勉強してみます。
No.2
- 回答日時:
ちょっとよろしいですかしらね。
ひとつ気になったのは、
>ActiveSheet.Unprotect
ですが、
プロテクトで、 EnableSelection という特別や処置をしてなければ、そのままでよいはずですね。
今、コードを考えただけのSample です。
きちんと実際に試したわけではありませんが、今のままでは、保存するわけではないので、問題はないと思います。
'<このプロシージャは、標準モジュールを基準にしています>
'---------------------------------------
Sub OpenBooks()
Dim fName As String
Dim gName As String
Dim LastBk As Workbook
Dim CurrBk As Workbook
Const myPath As String = "c:\Windows\デスクトップ\日計表\"
'以下の2行は、コード自体が変更するかもしれないような気がします。
'これは、セルからでも取れます。
Const myMonth As String = "06月"
Const myCopyRng As String = "C7:F36"
'
fName = ActiveSheet.Range("b2") & "年度.xls"
gName = ActiveSheet.Range("d5") & "年度.xls"
If Len(fName) <= 6 Or Len(gName) <= 6 Then
MsgBox "ファイル名が見つかりません。", 16
Exit Sub
End If
'
On Error Resume Goto ErrHandler 'ブックが開かなかった時を想定
Set LastBk = Workbooks.Open(myPath & fName)
Set CurrBk = Workbooks.Open(myPath & gName)
LastBk.Worksheets(myMonth).Range(myCopyRng).Copy _
CurrBk.Worksheets(myMonth).Range("C7")
'
LastBk.Close False '前年度のファイルは閉じる
'LastBk.Save '保存して、開いたままにする
On Error GoTo 0
ErrHandler:
If Err.Number > 0 Then
MsgBox Err.Number & "(" & Err.Description & ")"
End If
Set LastBk = Nothing
Set CurrBk = Nothing
End Sub
'---------------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBAでワークブックの名前を変数にして開かせる?
Excel(エクセル)
-
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
-
4
エクセルVBA Workbook変数に変数を使ったファイル名を格納したい
Visual Basic(VBA)
-
5
名前の変わるブックをアクティブにしたい。
Excel(エクセル)
-
6
vbaでファイルを開くパス名に変数を使いたい
Visual Basic(VBA)
-
7
EXCELのブック名を引数(変数)として設定するには
Visual Basic(VBA)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
エクセルマクロで不特定なファイル名を使用するには
Excel(エクセル)
-
10
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
11
VBAでセル値からフォルダ名を取得するコードについて
Excel(エクセル)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
14
EXCELマクロで、開いてはいるがアクティブでないファイルをアクティブにする方法?
Excel(エクセル)
-
15
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
16
excelで直前に参照していたブックに戻るマクロは作れますか?
Excel(エクセル)
-
17
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
18
エクセルでエラーが出て困っています。
Excel(エクセル)
-
19
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
20
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでブックを非表示で開いて処...
-
エクセルで参照しているデータ...
-
エクセルの関数 ENTERを押...
-
エクセルを共有するとPCによっ...
-
エクセルで別ブックをバックグ...
-
Excelでブックの共有を掛けると...
-
Excel(2010)のフィルターが保...
-
vbaでpdfを開いて1ページ目のみ...
-
WorkBooksをオープンさせずにシ...
-
エクセルで「ディスクがいっぱ...
-
エクセルVBAで、PDFファイルを...
-
Excel VBAでブックを閉じる時、...
-
【マクロ】【VBA】別ブックへの...
-
エクセルファイルを開かずにpdf...
-
Excelで複数ブックの同一セルに...
-
フォルダ内の複数ファイルから...
-
エクセルで開いていないbookの...
-
Excelファイルをダブルクリック...
-
複数のブックをひとつのブック...
-
外部ブック参照が#REF!になって...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
エクセルを共有するとPCによっ...
-
エクセルで参照しているデータ...
-
WorkBooksをオープンさせずにシ...
-
Excel(2010)のフィルターが保...
-
フォルダ内の複数ファイルから...
-
Excelでブックの共有を掛けると...
-
複数ファイルから特定シートの...
-
エクセルで「ディスクがいっぱ...
-
Excelで複数ブックの同一セルに...
-
エクセルファイルを開かずにpdf...
-
エクセルで別ブックをバックグ...
-
エクセルで50行ごとに区切った...
-
外部ブック参照が#REF!になって...
-
エクセル2016です。「ブッ...
-
エクセルの関数について教えて...
-
エクセルシートの一部を送りたい
-
ブックのピボットを別ブックに...
-
Excel起動時に特定のワークシー...
おすすめ情報