[[20180301101621]] 『複数ブックの同一セルに一括入力する方法』(サラサラ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数ブックの同一セルに一括入力する方法』(サラサラ)

教えて下さいm(_ _)m

同一フォルダに50ほどファイルがあり、ファイル名はそれぞれ職員の名前となっています。

職員名のファイルとは別に集約ファイルが同じフォルダにあります。
集約ファイル及び職員名ファイルの書式は全て同じものとなっています。

そこで教えていただきたいことは、全員の職員名ファイルのC3セルに「3」と入力したいのです。

一つ一つファイルを開いて、「3」と入力するのは大変なので、マクロを使い一括で入力できないでしょうか?

集約ファイルの中にマクロボタンを作成し、一括で入力したいと考えています。
よろしくお願いいたします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


>マクロを使い一括で入力できないでしょうか?
出来ると思います。

>集約ファイルの中にマクロボタンを作成し、一括で入力したいと考えています。
>よろしくお願いいたします。
作成依頼でしょうか?
掲示板の規約上ダメとはなっていませんが、単純に作成依頼を受けて下さる方はあまりいらっしゃらないように思います。
もし、ご自身で途中まで作っていてどこかで詰まってしまっているのであれば、提示するとアドバイスがいただけるとおもいます。
すくなくとも、現段階ですと、わからない箇所がわからないので、私にわかるかわからないのでアドバイス出来ることが無いです。

(もこな2) 2018/03/01(木) 10:46


もこな2様

ありがとうございます。
ネットで調べたマクロを参考に、以下のマクロを作成したのですが、デバッグする箇所がありうまく作動しませんでした。
よろしくお願いします。

Sub 月の一括入力()

Dim Myfile, Filepath As String

 Filepath = ThisWorkbook.Path & "\"
 Myfile = Dir(Filepath)
 Do While Myfile <> ""
 Workbooks.Open Filename = Filepath & Myfile ←ここがデバッグします。 
 Workbooks(Myfile).Activate
 Worksheets(1).Cells(3, 3).Value = "3"
ActiveWorkbook.Save
 Myfile = Dir()
 Loop

End Sub

(サラサラ) 2018/03/01(木) 11:24


> ←ここがデバッグします。
というのを「ここでコンパイルエラーが出てしまいます。」と解釈すると

Workbooks.Open Filename = Filepath & Myfile

Workbooks.Open Filename:= Filepath & Myfile

と修正すればよいとおもいます。
(もこな2) 2018/03/01(木) 12:52


もこな2様 ありがとうございます。

その部分のコードを「:=」として、実行したところ、
「集計ファイルは既に開いています。2重に開くとこれまでの変更は破棄されます。集計ファイルを開きますか?」と表示されました。
それで、「はい」をクリックしたところ、しばらくして「マイクロソフトエクセルは動作を停止しました」と表示され、停止してしまいました。

集計ファイルは開いた状態で、その集計ファイルのシート上にマクロボタンを作成し、そのボタンにマクロを登録して実行しました。

マクロについては、あまりくわしくないため教えていただければありがたいです。
(サラサラ) 2018/03/01(木) 13:28


修正案をこっそり作っていたのですが、リアルでちょっと忙しくなってしまったので要点だけ。

ご提示のコードだと、自ブックが保存されてるフォルダ内の全ファイルを開いて、書き込んで、閉じる って作業をすることになります。

そして、それは、 自ブックもその対象になっていることを意味しますし、Excelブックじゃないファイルを対象になっていることを意味します。

なので、少なくとも、Filenameが自分自身のことであれば、処理しないようにすべきとおもいます。
さらに、フォルダ内にExcel以外を保存する可能性があるなら、Excelブックっだけ処理するようにすべきとおもいます。
(もこな2) 2018/03/01(木) 13:48


もなこ2様
お仕事中、ありがとうございます。

”少なくとも、Filenameが自分自身のことであれば、処理しないようにすべきとおもいます。

とありますが、集計ファイルだけを処理しないようにする方法はありますか?

なお、フォルダ内にはエクセル以外を保存する可能性はありません。
(サラサラ) 2018/03/01(木) 14:05


 横から失礼します。

 >「集計ファイルは既に開いています。2重に開くとこれまでの変更は破棄されます。
 >集計ファイルを開きますか?」と表示されました。

 開いたファイルをクローズするコードが入っていないので当然そのようなメッセージが
 出てきてしまいます。あと Dim Myfile, Filepath As String だとMyfileがバリアント型に
 なってしまいますよ。
http://officetanaka.net/excel/vba/variable/03.htm
 の下の方にバリアント型のデメリットが書かれています。

 Sub 月の一括入力()

     Dim Myfile As String, Filepath As String

     Application.ScreenUpdating = False

     Filepath = ThisWorkbook.Path & "\"
     Myfile = Dir(Filepath)
     Do While Myfile <> ""
       Workbooks.Open Filename:=Filepath & Myfile
       Workbooks(Myfile).Activate
       Worksheets(1).Cells(3, 3).Value = "3"
       ActiveWorkbook.Close True
       Myfile = Dir()
     Loop

     Application.ScreenUpdating = True

 End Sub
(bi) 2018/03/01(木) 14:06

あっ ほんとだ。保存してるけど、閉じてはいないですね。
フォローありがとうございます。

>Filenameが自分自身のことであれば、処理しないよう
いくつかありますが、
単純に
IF Filename = Thisworkbook.Name then goto スキップ
(中略)
スキップ:
loop

とループの直前にラベルつくって そこに飛ばしちゃうってやり方はあるとおもいます。
(もこな2) 2018/03/01(木) 14:13


     ↑訂正

    スキップ:

       Myfile = Dir()
     Loop

Myfileに次のファイル名を与えなきゃいけないからこうですね。失礼いたしました。
(もこな2) 2018/03/01(木) 14:17


 もし、集約ファイル以外が.xlsxで有れば(集約ファイルはマクロがあるためxlsmファイルとして)
 >Myfile = Dir(Filepath) 
 を
 >Myfile = Dir(Filepath & "*.xlsx")
 とするとxlsxファイルだけを対象にできないか?
 (集約ファイル以外もxlsmだったりすべてxlsファイルだったりだと無理だが)
(ねむねむ) 2018/03/01(木) 14:46

ねむねむ様

 >Myfile = Dir(Filepath & "*.xlsx") に変えたところ、バッチリ動きました!

ありがとうございましたm(_ _)m

もこな2様 bi様 ありがとうございしたm(_ _)m
(サラサラ) 2018/03/01(木) 15:09


無事解決したようですが、ちょっと作ってみたので参考になれば。

マクロを集計ファイルに記述するとして、【If Not Myfile = ThisWorkbook.Name Then】の部分で、自ブック以外を処理するようにしています。

Sub 月の一括入力改()
'==変数の宣言など

    Dim Myfile As String, Filepath As String

'==処理

    Filepath = ThisWorkbook.Path & "\"
    Myfile = Dir(Filepath & "*.xls?")

    Application.ScreenUpdating = False '画面更新停止

    Do While Myfile <> ""
        If Not Myfile = ThisWorkbook.Name Then
            With Workbooks.Open(Filename:=Filepath & Myfile)
                .Worksheets(1).Cells(3, 3).Value = "3"
                .Save
                .Close
            End With
        End If
        Myfile = Dir()
    Loop

    Application.ScreenUpdating = True '画面更新再開
    MsgBox "処理完了"

End Sub
(もこな2) 2018/03/01(木) 15:53


もこな様

もこなさんのコードもバッチリ動きました!!
ありがとうございましたm(_ _)m
(サラサラ) 2018/03/01(木) 16:36


以前にマクロを教えていただき、とても助かりました!

すみませんが、もう一つ教えていただけないでしょうか。

”3”を一括入力する方法を教えていただいたのですが、この3というのは月の数字なので、
4月、5月と月が変わった場合は、マクロコードの

.Worksheets(1).Cells(3, 3).Value = "3" ←のところを“4”、”5”と変えなければなりません。

そこで、集計ファイルの、C3の数字を例えば4と入力したら、その数字を50個ほどある職員名ファイルのC3も4と一括で入力されるようには出来ないでしょうか?
上記のコードを変えれば出来るのかなと思うのですが、コードが分かりません(; ;)

よろしくお願いいたしますm(_ _)m
(サラサラ) 2018/04/04(水) 09:35


当月処理なら
Dim i As Variant
i = Month(Date)
.Worksheets(1).Cells(3, 3).Value = i
(++) 2018/04/04(水) 10:32

++さんのアイデアを拝借して
 .Worksheets(1).Cells(3, 3).Value = Month(Date)
とかはどうでしょうか?
(もこな2) 2018/04/04(水) 12:39

(++)さん、もこな2さん

ばっちり動きました!
ほんとに助かりました!
ありがとうございましたm(_ _)m
(サラサラ) 2018/04/04(水) 13:40


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.