
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 Workbook変数に変数を使ったファイル名を格納したい
Visual Basic(VBA)
-
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
VBAでワークブックの名前を変数にして開かせる?
Excel(エクセル)
-
-
4
名前の変わるブックをアクティブにしたい。
Excel(エクセル)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
ExcelVBAでBookを開く時にファイル名の一部だけを指定で
Access(アクセス)
-
8
エクセルマクロで不特定なファイル名を使用するには
Excel(エクセル)
-
9
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
-
10
EXCELマクロで、開いてはいるがアクティブでないファイルをアクティブにする方法?
Excel(エクセル)
-
11
EXCELのブック名を引数(変数)として設定するには
Visual Basic(VBA)
-
12
VBAで文字列を数値に変換したい
Excel(エクセル)
-
13
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
14
VBA: ブックをアクティベイトできない
Access(アクセス)
-
15
VBAのWindowオブジェクトとWorkbookオブジェクトの違い
Visual Basic(VBA)
-
16
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
17
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
18
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
19
[Excel] ファイル名を変数指定して保存するマクロ
Excel(エクセル)
-
20
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
別ブックから入力規則でリスト...
-
エクセルを共有するとPCによっ...
-
エクセルで参照しているデータ...
-
【マクロ】アクティブセルの時...
-
Excelの新しい空白のブックを開...
-
Excel(2010)のフィルターが保...
-
フォルダ内の複数ファイルから...
-
Excel 一枚のシートにある全て...
-
ワードやエクセルで「時間が来...
-
別フォルダにある同じ名前のブ...
-
「ブックの共有」を有効にして...
-
Excelで指定範囲のデータ...
-
フォルダ内の複数ブック・シー...
-
Excelで複数ブックの同一セルに...
-
【マクロ】【VBA】同じフォルダ...
-
エクセル 複数のブックを一度...
-
Excelでブックの共有を掛けると...
-
指定ファィルの指定シートをシ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】アクティブセルの時...
-
Excelの新しい空白のブックを開...
-
VBAでブックを非表示で開いて処...
-
エクセルの関数 ENTERを押...
-
エクセルを共有するとPCによっ...
-
Excelファイルをダブルクリック...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
Excelの警告について
-
Excelで複数ブックの同一セルに...
-
フォルダ内の複数ファイルから...
-
同じフォルダへのハイパーリン...
-
エクセルにおける,「ブック」...
-
別ブックから入力規則でリスト...
-
エクセルで別ブックをバックグ...
-
エクセルでウィンドウの枠固定...
-
エクセルファイルを開かずにpdf...
-
「ブックの共有」を有効にして...
おすすめ情報