こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルファイルを名前順に開いてくるマクロが作りたいのですが。。。

エクセルファイルを名前順に開いてくるマクロが作りたいのですが。。。

特定のフォルダ(C¥集計)に
ABC0001-勤怠表-佐藤.xls
ABC0002-勤怠表-山田.xls
ABC0003-勤怠表-上田.xls
・・・
ABC0030-勤怠表-橋本.xls
のように先頭のコードが順に割り振られているエクセルファイルがおいてあります。
(ABCは社名として固定)

これを
(1)佐藤のファイルを開き特定セルをコピーして別ファイルにペーストしファイル閉じ。
(2)同作業を山田→上田。。。橋本まで順にやりたいのです。

変数を宣言してまでは理解できるのですが、その変数を使ってファイル名等を定義して辺りからさっぱり分かりません。
かなりネット検索もして似たような事例を探したのですが、すっきりした回答がありませんでした。

まだVBA初心者ですが、別のマクロが動いて面白くなってきたところです。
助けていただけると幸いです。

投稿日時 - 2010-03-03 21:47:27

QNo.5722582

困ってます

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

>一次方程式と同じだ。。。という、この感覚が違うのでしょうか?
 「感覚」は大事ですが、「違う」かどうかは結果オーライだと存じます。

 お示しの内容でしたら、
"ABC0001-勤怠表-佐藤.xls"
という ファイル名 の部分が変化する訳ですから、これが変数「x」になるような考え方になるかと存じますね。
 つまり、「変化する部分」が「変数」になる、ということです。

 しかし、この場合、「変化する部分」は文字列であって、しかも「佐藤」の部分に規則性がありませんので、これを変数とするという考え方はちょっと難しいですが、「ABC0001の数字部分」には規則性がありますので、これを使うことはできるかも知れません。


 結論ですが、お尋ねのような内容の場合、ファイル名 を変数にする、という考え方ではなくて、[Dir 関数] を使って、「C:\集計」フォルダ 内のファイルを総なめにする(しらみつぶしに調べる)というのが常套手段かと存じます。

 [Dir 関数] の ヘルプ の [Dir 関数の使用例] を少し改変して、

Dim MyPath As String
Dim MyName
MyPath = "C:\集計\"
MyName = Dir(MyPath)
Do While MyName <> ""
 If MyName Like "ABC*-勤怠表-*.xls" Then
  Workbooks.Open Filename:=MyPath & MyName
 End If
 MyName = Dir
Loop

とすると、「C:\集計」フォルダ 内の「ABC*-勤怠表-*」という型の名前が付いている エクセルブック を順次開くことができます。


 ここでの ポイント は、[Dir 関数] と [Like 演算子] の使い方になりますが、双方とも ヘルプ をよくご覧ください。
 上記の コード を コードウィンドウ に コピペ した後、「Dir」なり「Like」のところを マウス で クリック して [F1] キー を押下すれば、それぞれの ヘルプ を開くことができます。

 ということで、ケースバイケース に「常套手段」を身に付けていくのがよいでしょうか。
 とは申しましても、素人ならではの、目の覚める様な素晴らしい「ヤリ方」を目にすることもありますので、「常套手段」はあっても、必ずしも絶対ではありませんので、危険性の少ない「ヤリ方」を勉強していかれれば結構かと存じます。

#なお、かく言う私も、かなりのド素人です。  (^凹^)

投稿日時 - 2010-03-04 15:11:52

お礼

ありがとうございました。
[Dir 関数] と [Like 演算子]をこの機会に自分なりに消化してみます。

>素人ならではの、目の覚める様な素晴らしい「ヤリ方」
当方、素人なので。。。
>フォルダ 内のファイルを総なめにする(しらみつぶしに調べる)
。。。に目が覚めました(笑)

重ねて。。。ありがとうございました。

投稿日時 - 2010-03-04 21:41:04

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

 先ず、お使いの Excel の バージョン を書きましょう。
 それと、自ずと VBA(Visual Basic for Application)だと分かりますが、ご質問の内容によっては判然としないこともありましょうから、
[技術者向] コンピューター > プログラミング > Visual Basic
の カテゴリ に投稿されるときは、「エクセル VBA」と明記された方がよいかと。。。

 さて、ご要望の作業内容は
>(1)佐藤のファイルを開き
>特定セルをコピーして
>別ファイルにペーストし
>ファイル閉じ。
というように細分化されるかと存じますが、例えば、Excel 2003 でしたら、[ツール(T)] - [マクロ(M)] - [新しいマクロの記録(R)] で (1) の作業を記録すると

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2010/3/4 ユーザー名 : DOUGLAS_
'

'
  Workbooks.Open Filename:="{佐藤のファイル の フルパス}\ABC0001-勤怠表-佐藤.xls"
  Application.Goto Reference:="R1C1"
  Selection.Copy
  Windows("{別ファイル の ブック名}").Activate
  Application.Goto Reference:="R1C1"
  ActiveSheet.Paste
  Windows("ABC0001-勤怠表-佐藤.xls").Activate
  ActiveWorkbook.Close
End Sub

というような コード が得られます。

>(2)同作業を山田→上田。。。橋本まで順にやりたい
 「Workbooks.Open Filename:=」に続く ブック名 に応じて「Application.Goto Reference:=」に続く セル位置 が変化するように変数などを利用して順次作業を進めます。
 この場合は、[For...Next ステートメント] などを利用することになります。

 ということで、先ずは、「新しいマクロの記録」を採ってみましょう。

投稿日時 - 2010-03-04 00:43:58

お礼

素早い対応ありがとうございました。
当方、エクセル2003でVBAの質問でございます。
よろしければもっと突っ込んで教えていただけないでしょうか?

>というような コード が得られます。
。。。までの新しいマクロの記録までは出来るのです。

感覚的な表現で申し訳ないのですが。。。
数学の一次方程式でいうxが上記のマクロ文のABC0001の数字部分で、これをDIM文にて冒頭で宣言する。
ここからの代入。。。とでもいうのでしょうか?
宣言した変数の使い回し方がさっぱり分からないのです。

一次方程式と同じだ。。。という、この感覚が違うのでしょうか?

投稿日時 - 2010-03-04 07:29:33

あなたにオススメの質問