質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

3211閲覧

Excellマクロ A列に入力したらB列に日時が出力する出勤簿ファイルを作りたい

cattac

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/04/08 15:37

編集2017/04/09 06:43

Excellマクロで出勤記録を作ろうと思います.
A列に職員番号を入力したら,B列に日,C列に時を出力するマクロが書きたいです.

保存するためのファイル名は,時間を秒単位でつければ,上書き保存エラーがでないと考えたつもりで,次のようなマクロを作りました.
★困りごと
1 このワークシートを初めて開いたときは動くのですが,2回目に開くとマクロが動きません.
2 使う度にワークシートの名前が変わってしまうので困る
気付いたことは
・プロジェクトエクスプローラーに,VBAproject が残ってしまう.
・残ってしまうVBAprojectという意味は,そのワークシートを閉じて開いてるワークシートが1つもなくても,プロジェクトエクスプローラーに表示されたままになってるという意味です.objectプロパティーを調べるもオカシイ状況です.

★直したいこと
いつも,「Higenky.xlsm」というファイル名で,csvを出力するマクロに作り替えたいです.

ActiveWorkbook.SaveAs を書く位置が良くないでしょうか.
なにか工夫を教えていただけると有り難いです.よろしくお願いします.

Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, Range("A3:A5000"))
If Target Is Nothing Then End
Application.EnableEvents = False
For Each r In Target
If r <> "" Then
r.Offset(, 1) = Date
r.Offset(, 2) = Time
Else
r.Offset(, 1).ClearContents
r.Offset(, 2).ClearContents
End If
tt = Format(Date, "yyyymmdd")
ss = Format(Time, "hhnnss")

ActiveWorkbook.SaveAs Filename:="c:\hogehoge\HiGenky_" & tt & ss & ".xlsm"
Next
Application.EnableEvents = True
End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akabee

2017/04/09 02:18

「A列に職員番号を入力したら,B列に日,C列に時を出力するマクロが書きたい」という内容からはファイルの保存ということがイメージできず、何がやりたいのかよく伝わりません。エクセルをオープンするのは誰ですか。出勤簿を入れる人ですか。その人はA列に職員番号を入れるのですか。そうするとB列、C列に日時が入って、その後ファイルが保存される?のですか。そのファイルは元のファイルとは別のファイル?なのですか。
seastar3

2017/04/09 07:16

ActiveWorkbook.SaveAs Filename:="c:\hogehoge\HiGenky_" & tt & ss & ".xlsm" の部分は直すとすれは、ActiveWorkbook.Save でいいのですが、目的の動作のための指定したセルへの値の代入が分かっていますか?ワークシート書き込み時のイベントの使い方が適切ですか?ワークシートにCSVを出力するということから意味が違います。
guest

回答2

0

ベストアンサー

テキストファイルへの出力ならば、以下のコードが有効です。

VBA

1csvFile = ActiveWorkbook.Path & "\Higenky.csv" 2n = Cells(Rows.Count, "A").End(xlUp).Row 3Open csvFile For Output As #1 4For row = 3 To n 5 Write #1, Cells(row, 1), Cells(row, 2), Cells(row, 3) 6Next 7Close #1

投稿2017/04/09 08:17

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cattac

2017/04/09 09:57

seastar3様  有り難うございました。何度も見ていただき感謝しております. 加えて,人数の数え方に End(xlUp)を用いて,for ~ to にする技も示していただき,勉強になりました.
guest

0

ActiveWorkbook.SaveAs Filename:="c:\hogehoge\HiGenky_" & tt & ss & ".csv"
の部分で、ファイル名に日付と時刻が" & tt & ss & "と付け加えていることに気付いてないようです。
さらにcsvファイルとxlsmファイルやxlsxファイルの違いが分かっていないと対象ファイルをマクロで操作することはできません。
とりあえず、このマクロを入れるHigenky.xlsmファイルのワークシートにボタン1を載せて、一番下の行にある社員コードの出社時刻を自動的に付け加えていくのなら、以下のコードで働きます。

VBA

1Sub ボタン1_Click() 2 ' 変数cdに社員コードを文字列として入力する。固定で良ければ cd = "Code" とかでもよい 3 ' ここで社員コードの妥当性や重複チェック等の処理が必要になる。 4 cd = Val(InputBox("社員コードは?", "出勤社員登録", 0)) 5 n = Cells(Rows.Count, "A").End(xlUp).Row + 1 6 Range("A" & n).Select 7 ActiveCell.Value = cd 8 ActiveCell.Offset(0, 1).Select 9 ActiveCell.Value = Date 10 ActiveCell.Offset(0, 1).Select 11 ActiveCell.Value = Time 12End Sub

同一ファイル内で完結するマクロでかまわなければ、このマクロを参考にして下さい。
もし別ファイルを操作するなら、冒頭に書いたようにファイルの種類やテキストファイル操作やADO操作などの勉強が必要です。

投稿2017/04/09 03:18

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cattac

2017/04/09 07:38

Seastar3様 akebee様  御返事有り難うございました。akebee様にも指摘されているのですが,改善したいポイントが明確ではありませんでした. 日時の出力は完成しているつもりです.またseastar3に考えていただいたマクロボタンもサクサク動き快適でした.  のこされた課題は,「ファイルの出力」です.別のファイル(csv )に出力したいので, Open sCsvFilePath For Output Access Write As #nFile の書き方をアドバイスいただけれると嬉しいです.  ファイル名は [日付][時間]の情報をつけたいです.例 20170409_1500.csv
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問