アプリ版:「スタンプのみでお礼する」機能のリリースについて

ボタンを押したときに(マクロの実行)、シート名は、今日の日付(パソコンの時間)一番右側にシートが追加されるように、また、同じ日付のシートは作成されないようにする。
これができるようにするにはVBAで作成するのはわかりますが、
どのように組んだからよろしいでしょうか。

元のシート(日報の原本)を準備まではできています。
よろしくお願いします。

A 回答 (2件)

No.1の回答で、細かくコメント入れたつもりだったんだけど・・・



> シート名にする今日の日付の文字列
> ymd = Format(Now, "yyyymmdd")

これを使えばいいのね。ちなみに、これは、
【ymd】という文字列に、今(Now)の時間を年月日(書式:yyyymmdd)を入れる、という意味。
書式は、セルの書式の表示形式でユーザー定義するときに使うのと同じような表記を使います。

回答してる今現在だと、2018/9/9 になっているので、
「ymd」 は 「20180909」 になります。

No.1のコメントで質問してるのは、月日、曜日を個別に取得したいわけですから、

Range("A1") = Format(Now, "m") ’←mmにすると二桁になります。
Range("C1") = Format(Now, "d") ’←ddにすると二桁になります。
Range("E1") = Format(Now, "aaa") ’ちょっと特殊で、aaaは曜日になります。

こんな風になります。
「月」、「日」、「曜日」という文字は、原本シートに入れとけばいいですよね。

で・・・
すでにシートが存在する場合の警告表示も加えると・・・こんな感じ。

-----------------------

Sub シート追加()
'シート名にする今日の日付の文字列
ymd = Format(Now, "yyyymmdd")
'もし最右シートが今日の日付なら警告表示を出して終了
If Sheets(Sheets.Count).Name = ymd Then
MsgBox "本日のシート [" & ymd & "] は作成済みです。", vbExclamation
Exit Sub
End If
'原本シートを最右に複製
Sheets("原本").Copy After:=Sheets(Sheets.Count)
'複製されたシート名を今日の日付に
Sheets(Sheets.Count).Name = ymd
Range("A1") = Format(Now, "m")
Range("C1") = Format(Now, "d")
Range("E1") = Format(Now, "aaa")
'複製されたシートを表示 ★
Sheets(Sheets.Count).Visible = True '★
End Sub

-----------------------

質問や回答登校だと、
行頭の[TAB]で段下げしたものが削除されて左詰めになってしまいます。
添付画像のように、[TAB]で段下げや空行を交えて書くと、
後で編集するときにわかりやすいです。

ではでは、がんばって下さい。
「ExcelVBAで日報のフォーマットを作」の回答画像2
    • good
    • 1
この回答へのお礼

解決しました

ありがとうございました!!!

お礼日時:2018/09/26 19:20

どう組んだら…と書かれても、


考え方を知りたいという質問なのか、
「VBAで作ってくれ」って丸投げの作成依頼なのか
わかりかねますが。

難しいものではないので、ざっくりと作ってみました。

------------

原本シート名を「原本」とする。

Sub シート追加()
'シート名にする今日の日付の文字列
ymd = Format(Now, "yyyymmdd")
'最右シートが今日の日付なら終了
If Sheets(Sheets.Count).Name = ymd Then Exit Sub
'原本シートを最右に複製
Sheets("原本").Copy After:=Sheets(Sheets.Count)
'複製されたシート名を今日の日付に
Sheets(Sheets.Count).Name = ymd
'複製されたシートを表示 ★
Sheets(Sheets.Count).Visible = True '★
End Sub

処理としてはこれでOK、なはず。(★は無くてもいいです)
これをボタンに割り当てて下さい。

------------

お節介として・・・
謝って原本に直接入力しちゃうのを避けるため、
原本シートは通常非表示にしておくと良いかも。
(上の★は原本非表示のさいに必要になるもの)

で、これも追加して・・・

Sub 原本表示()
'原本シートの表示/非表示の切り替え
If Sheets("原本").Visible = True Then Sheets("原本").Visible = False Else Sheets("原本").Visible = True
End Sub

添付画像のようにボタンに割り当てる。

というのはいかがでしょう?
「ExcelVBAで日報のフォーマットを作」の回答画像1
    • good
    • 1
この回答へのお礼

ありがとう

ありがとうございます!

もう少々教えていただきたいのですが、
日報のフォーマットに今日の日付を反映させるのに、どのように追記したらよろしいでしょうか。

□ 月 ○ 日 △ 曜日

□ A1
月 B1
○ C1
日 D1
△ E1
曜日 F1

□と月は、別セルに入っております。

日報の日に同じシート作成できないよという、メッセージを出したいのですが、
併せて教えていただけますでしょうか。

よろしくお願いします。

お礼日時:2018/09/08 15:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!