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

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

ただいまの
回答率

90.53%

  • VBA

    1777questions

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

  • Excel

    1518questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 915

cattac

score 3

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • akabee

    2017/04/09 11:18

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

    キャンセル

  • seastar3

    2017/04/09 16:16

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

    キャンセル

回答 2

checkベストアンサー

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/09 18:57

    seastar3様

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

    キャンセル

0

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

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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/09 16:38

    Seastar3様
    akebee様

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

    キャンセル

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1777questions

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

  • Excel

    1518questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。