VBAでマクロを使って日時をシートに入力する方法

このQ&Aのポイント
  • VBAでマクロを使って日時をSheet2のAセルに入力する方法を教えてください。
  • Sheet2のAセルにマクロで走らせた日時を入力するための命令文を追記する方法を教えてください。
  • マクロを1回走らせたら1つの日時が入力されるようにするために、Forループを修正する方法を教えてください。
回答を見る
  • ベストアンサー

VBAでマクロを走らせた日時をSheet2のAセルに入力する

VBAでマクロを走らせた日時をSheet2のAセルに入力する はじめまして。 現在、ファイルを整理するマクロを使っています。 そのマクロを使った履歴を残す意味で、 いつマクロを走らせたかすぐにわかるように、 Sheet2のAのセル(2行目から)に走らせた日時を示したいと思っています。 マクロでの処理が終わったら、 毎回Sheet2に日時が入力されるようにするには、 どんな命令文を追記したらよいのでしょうか。 マクロに関しては知識がなく、 インターネットで調べて、 Sheets("Sheet2").Cells(R, "A").Value = Now というのを追記してみたのですが、 Sheet2に入力はされるものの、 Aセルの行がとびとびに入力されたり、 整理したファイルの数だけ(複数)入力されてしまいます。 マクロを1回走らせたら1つの日時が入力されるようにしたいです。 Sub ()とEnd Subの間にFor RとNext Rがあり、 作業が繰り返されているようです。 転記ができないため、マクロを示すことができません。 さすがに、これだけの情報では難しいでしょうか。 わかるかたがいらっしゃいましたら、 よろしくおねがいします。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

worksheets("sheet2").cells(rows.count,1).end(xlup).offset(1).value=now を end sub の前に追加 参考まで

nicoool
質問者

お礼

ご回答ありがとうございます。 しっかり記入されました! 参考にさせていただきます。 本当にありがとうございました!!

その他の回答 (3)

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.4

こんばんは 指定した列の「データが入っている一番下の行」を取得する便利な方法があります。 まずは以下の操作をしてみてください。 1.sheet2を選択 2.A1~A5に適当に文字を入力 3.A列の一番下の行を選択(Excelのバージョンが2003以前ならA65536、  2007以降だともっと大きな行数) 4.マクロの記録開始 5.キーボードの「Ctrl」を押しながら「↑」を押す 6.マクロの記録終了 で記録されたマクロを確認しますと Selection.End(xlUp).Select が記録されていなす。 これを応用しますと、 Sheets("Sheet2").Range("A65536").End(xlUp).Row で、Sheet2の最後の行を取得できます。 また、 Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0) = Now() としますと、Sheet2のA列の一番下に、現在の時刻を記録できます。 p(^^)q

nicoool
質問者

お礼

やってみました。 こういう考え方もあるんですね。 まったくの初心者ですので、 とても勉強になりました。 ほんとうにありがとうございます。

  • yucco_chan
  • ベストアンサー率48% (828/1705)
回答No.3

すみません。 バグってました。m(__)m Dim MaxRow As Long Dim Max As Long : : : Max = Rows.Count MaxRow = Sheets("Sheet2").Range("A1").End(xlDown).Row If MaxRow = Max Then MaxRow = 2 Sheets("Sheet2").Cells(MaxRow + 1, "A").Value = Now End Sub

nicoool
質問者

お礼

ご回答ありがとうございます。 頂いた文を追記したところ、 Sheet2に日時が表示されますが、 (1)3行目から入力されてしまう (2)2回目までしか記入されない という問題が発生しました。 (2)の2回目までしか記入されない というのは、2回目分は4行目に入力されるのですが、 以降、4行目が更新されていき、 前の履歴に上書きされてしまっているようです… 改めて、2行目から記入が始まり、 3回目以降もマクロを走らせた日時の履歴を 4行目、5行目…というように、 Sheet2のAセルにバーーっと入力していくには どう変えたらよいでしょうか。 ご存知でしたらよろしくお願い致します。

  • yucco_chan
  • ベストアンサー率48% (828/1705)
回答No.1

END Sub の直前(For RとNext Rの外)に下記のように記述してみてください。 下記マクロの動作条件が1つあって、Sheet2のA1セルが空白だと エラーになります。  :  : MaxRow = Range("A1").End(xlDown).Row Sheets("Sheet2").Cells(MaxRow + 1, "A").Value = Now End Sub

関連するQ&A

  • エクセルで入力シートから別シートに転記・蓄積について

    エクセルVBAで入力シートのA1:D5(5行)の範囲を別シート(DBシート)の転記・蓄積させる方法を教えてください。また、入力データがA1:A5(1行)のときもあれば、A1:D5(5行)の場合ですが・・・ Sub test01() Dim ws1 As Worksheet, ws2 As Worksheet Dim x As Long, y As Long Set ws1 = Sheets("入力") Set ws2 = Sheets("DB") x = ws2.Cells(Rows.Count, "A").End(xlUp).Row + 1 y = ws1.Cells(Rows.Count, "A").End(xlUp).Row ws1.Cells(1, "A").Resize(y, 4).Copy ws2.Cells(x, "A") End Sub の場合、数式等、入力値すべてが転記となってしまいます。 値だけ転記する方法はありませんか? 宜しくお願いいたします。

  • EXCELマクロ セルに入力したシート名から参照

    よろしくお願いします。 複数のシートがあり、それぞれ 1109,1110,1111,1112,1201,1202,1203,1204,1205 と名前がついています。 それぞれのシートには月毎のデータが入っています。 Sub Macro1() Columns("F:J").Select Selection.ClearContents Sheets("1205").Columns("A:E").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("C4:E5"), CopyToRange:=Range("F2:J2"), Unique:=False End Sub ↑のマクロをSheet3で作りましたが、4行目の「Sheets("1205")」の1205の部分を可変で作れればと 思っています。Sheet3のC3セル内に入力したシート名(1109や1203等)でフィルタ出来ると助かります。 どうぞよろしくお願いします。

  • エクセルVBA 他シート選択・セルへ入力

    下記コード内で、シートを選択する際、マクロ呼出前は意図したとおり になるのですが、セル入力前だと上手くいきません。Activateにして もダメでした。根本的に理解していないようなので、教えてください。 よろしくお願いします。 シートAの実行ボタンをクリック Private Sub ButtonA_Click() Application.ScreenUpdating = False tempA = TextBox1 If ButtonB = True Then tempB = "10" End If Sheets("B").Select Call XYZ1 ' ----------------- (問題あり ここから)-------------- Sheets("B").Select Cells(1, 2) = 100 For i = 2 To 200 Cells(i, 2) = Range("B" & i - 1) - Range("A" & i) Next ' ----------------- (問題あり ここまで)-------------- Sheets("A").Select Call XYZ5 Application.ScreenUpdating = True End Sub

  • マクロで検索行・データが入力されている部分を変更したい

    下記4行目に入力されている行は常に変わる為、このままでは検索にかなりの時間が掛かってしまいます。出来ることならデータ入力の最終の行で検索終了したいのですがどうかご教授お願いいたします。 1 Sub Macro1() 2 For a = 1 To 3000 3 snum = Sheets(2).Cells(a, 11) 4 For b = 1 To 200 'ここはSheet1でデータが入力されてる行数 5 If snum = Sheets(1).Cells(b, 1) Then 6 Sheets(2).Cells(a, 12).Value = Sheets(1).Cells(b, 2) 7 Sheets(2).Cells(a, 13).Value = Sheets(1).Cells(b, 3) 8 Sheets(2).Cells(a, 14).Value = Sheets(1).Cells(b, 4) 9 Exit For 10 End If 11 Next 12 Next 13 End Sub

  • 未入力セルとVBAについて

    エクセルのVBAについて教えて下さい。独学で調べたのですがわからず…お力をお借りしたいです。 未入力のセルがあった場合、入力しなければ保存できないマクロは知っているのですが、 では、それが結合セルであった場合はどの様になるのでしょうか?例えば、(A1~C1だったら) 又、複数の結合セルにその様な設定をしたい場合もどこに追加して行けばよいのでしょうか? 合わせて教えて頂けたら幸いです。 以下 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Sheets("sheet1").Range("A1") = "" Then MsgBox "必須項目セルが未入力です", 48, "入力エラー" Cancel = True Else ActiveWorkbook.Save End If End Sub

  • VBA チェンジイベント 別シートにデータ転記

    お世話になります。チェンジイベント初心者です。 同一BOOK内の特定のコラムのセルを選択した場合に、自動的に他のシートの特定のセルにデータを転記させたいのですが、どう書けばよいのか分かりません。添付の画像と下記マクロをご覧になって下さい。 -マクロ- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If 1 = ActiveCell.Column Then Worksheets("01").Cells(ActiveCell.Row, 3) = Cells(ActiveCell.Row, 1) Worksheets("01").Cells(ActiveCell.Row, 4) = Cells(ActiveCell.Row, 2) End If End Sub メインのシートは[01]です。このシートのC4を選択し、次に[02]のA列にあるセルを選択すると、[02]のA列・B列のデータがC4・D5に転記されるようにしたいのですが、画像にあります通り[02]のA5を選択してしまうと、[01]のC5・D5に転記されてしまいます。 どのようにすれば、[01]でアクティブにしておいた行の3列目、4列目に転記が行われるのでしょうか? よろしくご指南くださいませ。

  • Excelで、既に作成してある月別Sheetを呼び出すマクロを作りたい

    Excelで、既に作成してある月別Sheetを呼び出すマクロを作りたいのですが教えて下さい。 2ヶ月に1回のゴルフ会の成績表を作成するのに、 1月成績、1月転記、3月成績、3月転記というように12のSheetが作ってあります。 当該月分の入力準備表を(Sheet 7月成績)に2ヶ月前の(Sheet 5月転記)のSheetを丸ごとマクロでコピーをしたいのです。  この7月と入力したら、(7月成績)のSheetを呼び出し、コピー元のSheet(5月転記)をマクロに記入出来るように設定したいのです。 例えば、   1(月)と入力したら、    11月転記Sheetから自動コピーの指定        3(月)と入力したら、     1月転記Sheetから自動コピーの指定        7(月)と入力したら、     5月転記Sheetから自動コピーの指定     年間6回の作業となります。 初心者の私が、自動記録でマクロを記入したところ、下記のようになり、同じ作業をするのに各月ごとのマクロ6本を作る必要があり、不便なので何とか1つのマクロで処理が出来ればと思い、その方法を教えて頂ければ幸いです。    Sub Macro1() ' 入力準備表作成 ' Macro1 Macro ' ' Keyboard Shortcut: Ctrl+a ' Sheets("5月転記").Select  ← 7月と入力した場合、自動的に5月転記となるように  Cells.Select Selection.Copy Sheets("7月成績").Select Cells.Select ActiveSheet.Paste Range("E5:F5").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False   ・・・・・・

  • VBA 別シートの最終行に追記

    ExcelのSheet1で作成した表の一部項目を、Sheet2に一覧表としてまとめたいのです。 例えばSheet1にアンケート項目のような入力されていて、毎日使いまわします。 セルA1: 訪問日→固定     セルB1: (日付)→更新 セルA3: お客様指名→固定  セルB3: (氏名)→更新 使いまわすので、1度入力されたものは、Sheet2に一覧表として転記しておきたいのです。Sheet2の一覧表の最終行をみつけて追記していきたいです。 書いてみたのは以下の通り。 Private Sub 登録ボタン_Click() Dim SH1 As Worksheet, SH2 As Worksheet Dim GYO As Long Set SH1 = ThisWorkbook.Worksheets("回答内容") Set SH2 = ThisWorkbook.Worksheets("情報シート") ' Sheet2の最終行を取得 GYO = SH2.Range("$A$65536").End(xlUp).Row ' 最終行の次行を取得 If SH2.Cells(GYO, 1).Value <> "" Then GYO = GYO + 1  ' 現在の収容位置の下に転記 SH2.Cells(GYO, 1).Resize(1, 20).Value = SH1.Range("$c$2:$D$10").Value With SH1 .Range("A3").Copy Destination:=SH2.Range("A2") .Range("B3").Copy Destination:=SH2.Range("B2") End With End Sub 項目は飛び飛びのセルに入力されていて、それらをまとめて一覧表の1行にまとめたいと思っています。 ここでは例としてSheet1[A3][B3]セルをSheet2へ転記していますが、項目はもっといっぱいあります。 記載したコードで実行すると、1回目は転記されますが、2回目以降が追記されていきません。 ' 現在の収容位置の下に転記 のところに問題があると思っています。 全くの初心者が、コードを書くのには無理があると思いますが、どなたか教えていただけないでしょうか。宜しくお願いします。

  • excelで別シートのセルを選択(VBA)

    どなたか教えてください。 シートXのB1に行番号 シートXのB2に列番号 が記載されていたとして、 別シート(Y)の、上記で指定したセルを選択する(フォーカスを移動する方法)を教えてください。 シート(X)   A   B   C  1 行  25  2 列  2  シート(Y)   A   B   C  1 2   ::::::: 24 25   (ここ) 以下のように書いても、最後の行でエラーになってしまいます。  行番号 = Sheets("X").Cells(1, 2).Value  列番号 = Sheets("X").Cells(2, 2).Value  Sheets("Y").Select  Range(Cells(行番号, 列番号)).Select

  • マクロで別シートの検索と別シートへの転記

    windows7、エクセル2013です。 Sheet1のA列の値を上から順に、Sheet2のA列内を検索し 同じ値が有ればその値を Sheet3のB列の5行目から順番に転記したいです。 Findを使ってうまくできないので Countifを使いましたが、駄目でした。 関数で可能なら関数でもいいのですが、教えていただきたいです。 よろしくお願いします。 Sub 抽出転記() Dim 検索行 Dim 検索値 Dim 答 Dim 入力行 入力行 = 5 For 検索行 = 3 To 200 検査値 = Worksheets("Sheet1").Cells(検索行, 1) If Worksheets("Sheet2").Columns("A").CountIf(検索値) <> 0 Then 答 = 検索値 Worksheets("Sheet3").Cells(入力行, 2) = 答 入力行 = 入力行 + 1 End If Next 検索行 End Sub

専門家に質問してみよう