• ベストアンサー
  • すぐに回答を!

Excel マクロで別BookのSheetをコピー

  • 質問No.9285668
  • 閲覧数214
  • ありがとう数2
  • 回答数1

お礼率 30% (30/97)

下記で別の.xlsxファイルを開いたのですが、開いたファイルのシートを今のファイル(.xlsm)のシートにコピーして最後に.xlsxファイルを閉じたいのです。色々検索してみたのですが、中々、思うようなものに巡り合えず質問させて頂きました。
何卒、宜しくお願い致します。

Dim strCdir As String
Dim strFname As String

With CreateObject("WScript.Shell")
'カレントディレクトリ控え
strCdir = CurDir
'カレントネットワークパスの設定
.currentdirectory = "\\fileserver\ANT\IT\91_Users\700_objecti\その他業務\Excel"
'ファイルを開くダイアログ表示
strFname = Application.GetOpenFilename("挿入ファイル,*.xlsx")
If strFname <> "False" Then
MsgBox "選択したファイル名は" & strFname & "です。"
Else
MsgBox "キャンセルされました。"
Exit Sub
End If
'カレントディレクトリ復元
.currentdirectory = strCdir

End With

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 65% (267/405)

以下の2ヶ所を変更してください。

(1)冒頭の変数宣言部

Dim strCdir As String
Dim strFname As String
   ↓
Dim strCdir As String
Dim strFname As String
'開いたブック格納用の変数
Dim baseBook As Workbook
'シート格納用の変数
Dim mySt As Worksheet


(2)中盤の開くダイアログ表示後

MsgBox "選択したファイル名は" & strFname & "です。"
    ↓
'ファイルを開きworkbook型変数へ代入
Set baseBook = Workbooks.Open(Filename:=strFname, ReadOnly:=True)
With ThisWorkbook 'マクロブックに対して処理
  '開いたブックの全シートを変数に1つずつ代入しながら繰り返し
  For Each mySt In baseBook.Worksheets '
    '変数に代入されたシートをマクロブックの最終シートの次にコピー
    mySt.Copy Before:=.Worksheets(.Worksheets.Count)
  Next mySt
End With
'ブック変数を閉じる
baseBook.Close


ネットでは数多くの参考資料やサンプルプログラムがありますが、
これらは臨機応変に対応できるように極力最小構成のコードで記載されていることが多く、自分の意図したこととすべてマッチするようなコードに出会える可能性はあまりありません。
要は、sampleであり解説であり目的のコードを応用する力を身に着けることが一番の近道かと思います。
「Excel VBA ファイル 開き方」
「Excel VBA ファイル 閉じ方」
「Excel VBA シート コピー」など
目的に応じたサンプルコードを見つけて組み合わせ、
つなぎ合わせること(つなぎ合わせに多少の知識が必要ですが入門レベルです)
で今回のようなコードは出来上がるかと思います。

コードの意味を調べてみてください。
今回のコードには軽くコメントを記載していますので、
それも参考にしてみてください。
お礼コメント
chi_ko6262

お礼率 30% (30/97)

また回答を頂いて大変助かりました。ありがとうございました。そしてまた、ご意見も参考にさせて頂きます。まだExcelのVBAを初めて約1週間程度なのでなかなかうまくいかず、ついついここで質問をしてしまいます。
これからもご助言を頂く機会があるかと思いますが、その時は何卒宜しくお願い致します。もちろんコードの意味などを勉強して自分のものにしたいと思っています。月並みですが本当にありがとうございました。
投稿日時:2017/01/25 20:15
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ