重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

VBA処理にて詳しい方は簡単だと思いますがなかなかできません。
以下の処理をしたいです。
①任意のCSVファイルを開く。
②①ファイルをエクセルファイルに変換する。
③もうひとつ任意のファイルを開ける。
④③のファイルのシート名(社員名簿)を②のファイルの先頭にコピーする。
③のファイルを閉じる。
以上です。

色々素人ながらに調べて書いたコードは下記になります。
お恥ずかしい出来なのは承知ですがなるべく親切に教えて頂きたいです。
たぶん変数とかの設定が出来ていないとは思うのですが。

Sub test()
Dim fl2 As String
Dim fl3 As String

fl2 = Application.GetOpenFilename
Workbooks.Open Filename:=fl2

ActiveWorkbook.SaveAs FileFormat:=xlNormal

fl3 = Application.GetOpenFilename
Workbooks.Open Filename:=fl3

fl3.Sheets("社員名簿").Copy _
Before:=fl2.Sheets(1)

Workbooks(fl3.xls).Close


End Sub

A 回答 (2件)

No.1です。



検証してないのでミスっているかもですが、こんな感じではどうですかね?

Sub test_2()
Dim FileName2 As String
Dim FileName3 As String
Dim fl2 As Workbook
Dim fl3 As Workbook

FileName2 = Application.GetOpenFilename
Set fl2 = Workbooks.Open(Filename:=FileName2)

fl2.SaveAs FileFormat:=xlNormal

FileName3 = Application.GetOpenFilename
Set fl3 = Workbooks.Open(Filename:=FileName3)

fl3.Sheets("社員名簿").Copy _
Before:=fl2.Sheets(1)

fl3.Close False '上書き保存するなら True で

'Set fl2 = Nothing '解放したいけどBookは開いたまま?
Set fl3 = Nothing

End Sub
    • good
    • 0
この回答へのお礼

すばらしい!
ありがとうございます。

完璧にできました。
やっぱりSetの使い方が凄い勉強になりました。
また仕事で使えます。

本当に感謝します。

お礼日時:2018/01/25 19:33

PCが逝ってしまったのでヒントだけ。



http://officetanaka.net/excel/vba/file/file02.htm

*純粋なファイル名とパスを取得する方法

ここの部分を見る事。
そうすれば変数:f2,f3に何が入っているかわかるはず。
⇒その前にメッセージボックスなどで
>fl2 = Application.GetOpenFilename
この直後に確認する癖をつけるようにされては?

”Bookを開く事が出来る”と言う事は”Bookのフルパス”が入っているのです。
その変数を
>fl3.Sheets("社員名簿")
このようには使えません。
そもそも宣言している型が違うはずですよ。(Workbookで宣言しSetステートメントを使用しているならともかく)

で、最初の見て欲しい記事のFileNameをWorkbooks(FileName).Sheets~とすれば良いかと。
変数名についてはそちらで適切なものに変えてみて。

・・・補足等に対して返信が上手く出来るかはわからない状態なので、頑張ってみて下さい。
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。
私自身があまり変数を曖昧にしか理解していないのが良くないのですが。
とにかく早く思うような処理をしたいと焦ってしまいますね。
オフィス田中のページは私もよく見ますのでちょっとじっくり腰を据えてやってみます。

お礼日時:2018/01/24 21:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!