[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日付の自動入力』(164)
1sheet毎に業務開始日の日付が自動入力されたままにしたいのですが
無理ですか?
その日毎の日誌に業務開始日を自動入力させ、かつ他のsheetへ影響
させないということはできないのでしょうか?
1日毎にbook別にするしかありませんか?
よろしくお願いします。
シート名や日付の位置、入力したい日付の情報があるともっと回答しやすいと 思いますが、現在はどのセルにどのような式が入っているのでしょうか。
直接の解決ではありませんし、ご存知かもしれませんが、今日の日付は Ctl+'+'で入力できます。 (Mook)
と言う事は作成時に A1 あたりに 日付けを事前セットしておけば良いのでは。
マクロになりますが。。。まあ31枚ですから手動でも良いでしょうし。
(Cod)
今までは列幅1で
B9に平成
L9に年
V9に月
AF9に日
AP9に曜日
とあらかじめ漢字で入力してあり
G9、Q9、AA9、AK9に年、月(1〜12)、日(1〜31)、曜日(日〜土)をリストから
選択入力するようになっていました。
sheet名は1・2・3・・・31です。(日にちです)
高齢の上司たちも使用することがあるし、私自身も色々と覚えていきたいので
自動入力にチャレンジし
G9:=YODAY()、表示形式e
Q9:=TODAY()、表示形式m
AA9:=TODAY()、表示形式d
AK9:-YODAY()、表示形式aaa
とし、計算方法の設定を変更してみましたが、思うとおりにいかなったという
しだいです。
やはり、1bookに31sheet日誌があり、その日付を自動入力にしようとする
使い方がそもそもよろしくないのでしょうか・・・
(Cod)
今回は日付入力程度のことですのでCodさんが言われるように手動入力で全く
構わないのですが、色々覚えていきたいのでマクロのサンプル教えて下さい。
よろしくお願いします。
Sub ATest777()
Dim Wb2 As Workbook
Set Wb2 = NewBook(31) 'ブックの追加(シートは31枚) ChangeSheetName Wb2 'シート名と日付けの書き込み End Sub
''------------------------------------------------------------ ブックの追加とシートの追加
Function NewBook(P2 As Long)
Dim W1 As Long
W1 = Application.SheetsInNewWorkbook 'Sheet Count Get Application.SheetsInNewWorkbook = P2 'Sheet Count ReStore Set NewBook = Workbooks.Add '★シート指定枚数(P1) で 新規ブックの作成 Application.SheetsInNewWorkbook = W1 'Sheet Count ReStore
End Function
''------------------------------------------------------------ シート名の変更と日付けのセット
Function ChangeSheetName(Wb1 As Workbook)
Dim W1 As Long, i As Long
For i = 1 To 31 With Wb1.Sheets(i) W1 = DateValue("2013/3/1") + i - 1 .Name = Format(W1, "MM_DD") .Range("A1").Value = Format(W1, "yyyy/mm/dd") End With Next
End Function
(Cod)
標準モジュールというのも初めて聞くものでしたので、調べてやってみました。
テスト手順としては
@新規bookを開く
A標準モジュールへサンプル貼り付け
Bマクロ→ATest777実行
でよろしいでしょうか?
やってみたところ、ATest777実行と同時にbook2が表示されbook2に31sheet(シート名入り)で
出ました。
因みに保存するときのファイルの種類は、マクロ有効テンプレート 保存でいいんでしょうか?
問題は Book2 の方なんですが確認点としては、
1.シート名は希望されているものですか。
もし違うなら ".Name = Format(W1, "MM_DD")" の部分が Text関数同様の書式を書けば
変わります。分からなければ聞いてください。
2.と各シートのA1 に 日付けをセットしてますが、場所は別としてこの内容で良いのでしょうか。
3.で、場所はコードをコピーしてA1 を G9に書式は"e"にのように
変更すれば基本形としては出来あがりです。
4.あとは3月を固定で動かしてますので、
どうするかはこれから考える必要がありますが。
".Range("A1").Value = Format(W1, "yyyy/mm/dd")" を
G9:=YODAY()、表示形式e
Q9:=TODAY()、表示形式m
AA9:=TODAY()、表示形式d
AK9:-YODAY()、表示形式aaa
(Cod)
>1.シート名は希望されているものですか。
シート名は今まで1日・2日・3日としていただけなのでCodさんの
サンプルで問題ありません。
>もし違うなら ".Name = Format(W1, "MM_DD")" の部分が Text関数同様の書式を書けば
変わります。
わかりました。
>2.と各シートのA1 に 日付けをセットしてますが、場所は別としてこの内容で良いのでしょうか。
大丈夫です。
>3.で、場所はコードをコピーしてA1 を G9に書式は"e"にのように
変更すれば基本形としては出来あがりです。
わかりました。
>4.あとは3月を固定で動かしてますので、
3月を固定で動かしているとはどのような意味なのでしょうか?
マクロの内容が2013年3月にしか対応していないということなのでしょうか?
もしそういうことであれば、例えば4月分を作成するときに W1 = DateValue("2013/3/1") + i - 1 を"2013/4/1"に変えればいいのですか?
早速色々自分で変えてやってみようと思い、まず、 ".Name = Format(W1, "MM_DD")" を変えてみようと
思いサンプルマクロを入れたbookを開きマクロの表示というところを見たのですが、何もありません。
一度保存したbookのマクロは編集できないのですか?
マクロを変更する場合は、編集したものを再度標準モジュールに貼り付けて行わなければならないので
しょうか?
全くのド素人ですので検討違いの質問になっていたら申し訳ありません。
とマクロが消えた事ですが。
*少しややこしいですが、まずマクロを新規ブックにコピーして貼り付け。
*で、ATest777 を 実行
*結果 Book2 が 作成されています。なので
Book2 は 通常の XLSX または XLS で保存。
マクロのある方が XLSM で保存なので、Book2の方を XLSMで保存してませんか。
(Cod)
Codさんお手数おかけしてます。
私が行った一連の手順を書きます。
@新規Bookを開く
AALT+F11キー
B右クリック→挿入→標準モジュール
Cマクロ貼り付け
Dマクロ表示→ATest777実行
EBook2をExcelマクロ有効ブックで保存
(A1に日付が入りシート名が03_01・・・となっているので)
FBook1は削除
(シートに何も表示されていないので関係ないと思っていました)
私が根本的に間違いを犯していたようですね。
何もわからないもので申し訳ありません。
やり直し
Book1をExcelマクロ有効ブックで保存
Book2をExcelブックで保存
し、Book1、Book2共に開きマクロ表示→編集にすると
表示されていないブックのマクロは編集できません。[ウインドウ再表示]コマンドを選択して、ウインドウを表示してください。
と表示されます。
ALT+F11キー→Module1をダブルクリックすると
貼りつけたマクロが表示されたので
1.シート名は希望されているものですか。
もし違うなら ".Name = Format(W1, "MM_DD")" の部分が Text関数同様の書式を書けば
変わります。分からなければ聞いてください。
をやってみたところできました。
W1 = DateValue("2013/3/1") + i - 1
を"2013/4/1"に変えてみたところ
実行時エラー1004
シートの名前をほかのシート、Visual Basicで参照されるオブジェクトライブラリまたはワークシートと同じ名前に変更することはできません。
と表示されますが、日付は4月に変わるんですね。
*何月分を作成しますか。のメッセージを出して、その回答で動くように考えてみます。
Sub ATest777()
Dim Wb2 As Workbook, YMD As Date
YMD = GetMonth Set Wb2 = NewBook(YMD) 'ブックの追加(シートは31枚) ChangeSheetName YMD 'シート名と日付けの書き込み
End Sub
''------------------------------------------------------------ 処理月の指定
Function GetMonth() As Date
Dim Rc As Variant Rc = InputBox("処理年月を入力して下さい。", , Format(Date, "YYYY/MM")) If Rc <> "" Then GetMonth = Format(CDate(Rc), "yyyy/mm/dd") Else MsgBox "キャンセルされたようです。処理を停止します。" End End If End Function
''------------------------------------------------------------ ブックの追加とシートの追加
Function NewBook(P1 As Date)
Dim W1 As Long, W2 As Long
W1 = Application.SheetsInNewWorkbook 'Sheet Count Get W2 = Day(DateSerial(Year(P1), Month(P1) + 1, 0)) '最終日の算出 Application.SheetsInNewWorkbook = W2 'Sheet Count ReStore Set NewBook = Workbooks.Add '★シート指定枚数(P1) で 新規ブックの作成 Application.SheetsInNewWorkbook = W1 'Sheet Count ReStore
End Function
''------------------------------------------------------------ シート名の変更と日付けのセット
Function ChangeSheetName(P1)
Dim W1 As Long, W2 As Long, i As Long
W2 = Day(DateSerial(Year(P1), Month(P1) + 1, 0)) '最終日の算出 For i = 1 To W2 With ActiveWorkbook.Sheets(i) W1 = P1 + i - 1 .Name = Format(W1, "D日") .Range("B9").Value = "平成" .Range("L9").Value = "年" .Range("V9").Value = "月" .Range("AF9").Value = "日" .Range("AP9").Value = "曜日" .Range("G9").Value = Format(W1, "e") .Range("Q9").Value = Format(W1, "m") .Range("AA9").Value = Format(W1, "d") .Range("Ak9").Value = Format(W1, "aaa") End With Next
End Function
今更の質問になってしまいますが、もしかしてこの「マクロ」というものは
今現在すでに使用している様式(Book)そのものには反映させられないもの
なのですか?
実際に使用している業務日誌を開き、修正していただいたマクロを実行すると
新たなBookに年月日、曜日だけが入っていますが、使用している業務日誌自体は
変化しませんよね。
今使用している様式(Book)の日付欄がマクロにより入力になると思っていた
のですが、マクロ実行したときにできる新たなBookを使い様式を作り直すもの
なのでしょうか?
せっかく教えていただいたので、2時間ほど格闘しているのですがわかりません。
きっと根本的な勘違いをしているものと思いますので、教えて下さい。
申し訳ありません。
『少し変更すれば』既存のブックを対象に『変更』の形で日付けセットするようなことは可能です。
Q1.新規は不要ですか?
Q2.既存のブックを対象とするなら『使用している業務日誌』の
どのセル部分を変更すればよいでしょうか。下記の4行ですか。
.Range("G9").Value = Format(W1, "e") .Range("Q9").Value = Format(W1, "m") .Range("AA9").Value = Format(W1, "d") .Range("Ak9").Value = Format(W1, "aaa")
(Cod)
>Q1.新規は不要ですか?
現状は元本Bookを基に毎月ファイル名だけを3月、4月・・・と変更して使用しています。
ですので、元本BookにCodさん作成のマクロが入っていれば、毎月始めに元本Bookを開けば
>YYYY/MMで入力して下さい。キャンセル等はそこで終了します。
がでるのであれば新規Bookは不要ということになると思います。
>Q2.既存のブックを対象とするなら『使用している業務日誌』の
どのセル部分を変更すればよいでしょうか。下記の4行ですか。
既存Bookでの日付部分を記載します。
A9:空セル
B9:平成(B9〜F9結合)
G9:空セルで手入力で25を入力していました(G9〜K9結合)
L9:年(L9〜P9結合)
Q9:空セルでリストから1〜12を選択していました(Q9〜U9結合)
V9:月(V9〜Z9結合)
AA9:空セルでリストから1〜31を選択していました(AA9〜AE9結合)
AF9:日(AF9〜AJ9結合)
AK9:空セルでリストから日〜土を選択していました(AK9〜AO31結合)
AP9:曜日(AP9〜AT31結合)
AU9:(
AV9:空セルでリストから平日・休日を選択していました(AV9〜AZ9結合)
BA9:)
BB9:空セル
BC9:空セル
となっていますので、既存Book列のAP9までが変更になるといいということでしょうか。
簡潔・適切に回答できなくて申し訳ありません。
Q1.日付けは31もあれば28もありますので余った日のシートはどうされてますか。
*手動で削除、または非表示ですか。
Q2.たとえば B9 は "平成" と既に入力されているはずですから プログラムで わざわざ 上書きする必要はありませんが、C9 は年度ですから、作成するブックの 年月から 年を取得して 平成に置き換えてから上書き でよろしいですか。
Q3. Q9,AA9,AK9,AV9 は 入力規則 を使った入力をされているのでしょうか。
日々ログを書かれる方がセット? または 最初に一括して 164 さんが作成?
注)この方法なら 深夜に日が変更されることもないと思いますが?
で、この部分を自動的に置き換えたいという事ですよねえ。
(Cod)
>Q1.日付けは31もあれば28もありますので余った日のシートはどうされてますか。
*手動で削除、または非表示ですか。
元本Bookは月最大日数の31sheetで作成しており、30日でも28日でも削除等は行っていませんでした。
>Q2.たとえば B9 は "平成" と既に入力されているはずですから プログラムで
わざわざ 上書きする必要はありませんが、C9 は年度ですから、作成するブックの
年月から 年を取得して 平成に置き換えてから上書き でよろしいですか。
はい。問題ありません。
>Q3. Q9,AA9,AK9,AV9 は 入力規則 を使った入力をされているのでしょうか。
そのとおりです。
>日々ログを書かれる方がセット? または 最初に一括して 164 さんが作成?
注)この方法なら 深夜に日が変更されることもないと思いますが?
交代制の勤務ですので当日の担当者がリストからその日の日付を選択入力していました。
Codさんのおっしゃるとおり従前の方法は日付変更されることもありませんし、特に手間がかかる
作業でもありません。
「こういうことはできないのかな?」という疑問から始まったものです。
>で、この部分を自動的に置き換えたいという事ですよねえ。
そのとおりです。
2−3.シートは例えば4月なら30 枚分に日付けをプログラムでセット
*.Range("G9").Value = Format(W1, "e")
*.Range("Q9").Value = Format(W1, "m") *.Range("AA9").Value = Format(W1, "d") .*Range("Ak9").Value = Format(W1, "aaa")
2−4.31日目は非表示。
(Cod)
Codさん、お手数をおかけしています。
よろしくお願いします。
Dim YMD As Date '作成する年月
Dim Bnm As String '作成するブック名
Sub ATest999()
Call GetMonth '作成する年月の取得 Call CopyBook '新規ブックの作成(元本Bookのコピー) Update1 YMD 'シート名と日付けの書き込み MsgBox Bnm & "新規作成しました。内容確認してください。"
End Sub
''------------------------------------------------------------ 処理月の指定
Function GetMonth() As Date
Dim Rc As Variant Rc = InputBox("処理年月を入力して下さい。", , Format(Date, "YYYY/MM")) If Rc <> "" Then YMD = Format(CDate(Rc), "yyyy/mm/dd") Else MsgBox "キャンセルされたようです。処理を停止します。" End End If End Function ''------------------------------------------------------------ ブックをコピー Function CopyBook() Dim S1 As String Bnm = "業務日誌_" & Format(YMD, "yyyymm") & ".xls" ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\" & Bnm Workbooks.Open ThisWorkbook.Path & "\" & Bnm End Function ''------------------------------------------------------------ シート名の変更と日付けのセット Function Update1(P1) Dim W1 As Long, W2 As Long, i As Long, Wb2 As Workbook
Set Wb2 = Workbooks(Bnm) W2 = Day(DateSerial(Year(YMD), Month(YMD) + 1, 0)) '最終日の算出 ''---------------------------------------------/*シートの表示・非表示のみ For i = 1 To 31 Wb2.Sheets(i).Visible = IIf(i <= W2, True, False) Next ''---------------------------------------------/*各シートの項目修正 For i = 1 To W2 With Wb2.Sheets(i) W1 = P1 + i - 1 ' .Name = Format(W1, "D日") ' .Range("B9").Value = "平成" ' .Range("L9").Value = "年" ' .Range("V9").Value = "月" ' .Range("AF9").Value = "日" ' .Range("AP9").Value = "曜日" .Range("G9").Value = Format(W1, "e") .Range("Q9").Value = Format(W1, "m") .Range("AA9").Value = Format(W1, "d") .Range("Ak9").Value = Format(W1, "aaa") End With Next
End Function
(Cod)
早速数か月分作成してみました。
大変便利です。
ありがとうございました。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.