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

エクセルのシート1からシート31までの同じセルに日にちと曜日を入力したいのです。シート1に1日と月、シート2に2日と火といったように。簡単に入力できる方法がありましたら教えてください。

A 回答 (3件)

こんにちは。

maruru01です。

一般操作による方法です。
(といっても実際はマクロですが)
日付ですので、どこかに年と月を入れる場所を用意した方がいいです。
そこで、1日のシート(Sheet1)のA1に年、B1に月を入力するとします。
まず、どのシートを選択していてもいいので、メニューの[挿入]→[名前]→[定義]で、
[名前]:適当な名前(仮に「シート位置」とします。)
[山椒範囲]:「=GET.DOCUMENT(87)+NOW()*0」
として、[OK]します。
これで、試しにどのシートのどのセルでもいいので、

=シート位置

と入力すると、そのシートの位置が表示されます。
シート位置というのは、シート下部のシートタブの左からの位置です。
したがって、各日にちのシートが左から順に並んでいれば、シートに渡った連番になります。
仮に各シートのA2に日数、B2に曜日を表示するとします。
全シートを(シートタブで)選択して、A2に、

=シート位置

と入力します。
次に、そのままB2に、

=DATE(Sheet1!$A$1,Sheet1$B$1,A2)

と入力して、B2のセルの表示形式をユーザー定義で、
「aaa」
とすれば、曜日を表示出来ます。
曜日は、数式を、

=TEXT(DATE(Sheet1!$A$1,Sheet1$B$1,A2),"aaa")

とすれば、表示形式を変えなくても直接表示出来ます。
年と月を直接数式中に入れて、

=DATE(2005,8,A2)

のようにしてもいいし、今日の日付から、

=DATE(YEAR(TODAY()),MONTH(TODAY()),A2)

としてもいいでしょう。
    • good
    • 1

数式初心者・マクロ初級者です。

(万年)
一般機能の方はちょっとわからないので、VBAです。
VBAも使われますか?

既存シートに対する入力だと、こんなのかなぁ。。。

Sub 日付入力したいシートを選択してから実行してね()

Dim Sh As Worksheet
Dim Rng As Range
Dim myYmd As Variant
Dim Rsp As Integer

Do
myYmd = Ymd()
Rsp = MsgBox(myYmd & "から始めますよ!", vbYesNoCancel)
If Rsp = vbCancel Then End
Loop Until Rsp = vbYes

On Error GoTo myCancel
Set Rng = Application.InputBox("入力セルをクリック!", "セルの指定", "=$A$1", , , , , 8)
On Error GoTo 0

Application.ScreenUpdating = False

On Error Resume Next

For Each Sh In ActiveWindow.SelectedSheets
With Sh.Range(Rng.Address)
.Value = myYmd
.NumberFormatLocal = "d""日"" aaa"
End With
myYmd = myYmd + 1
Next Sh

On Error GoTo 0

Application.ScreenUpdating = True

myCancel:

End Sub

Function Ymd() As Variant

Dim myY As Long
Dim myM As Long
Dim myD As Long

myY = Year(Date)
myM = Month(Date) + 1
myD = 1

On Error GoTo myCancel

myY = Application.InputBox(myY & "年でいい?", "セルの指定", myY, , , , , 1)
If myY = False Then End
myM = Application.InputBox("何月?", "セルの指定", myM, , , , , 1)
If myM = False Then End
Ymd = DateSerial(myY, myM, myD)

On Error GoTo 0

Exit Function

myCancel:
MsgBox "終了しますよ。"
End

End Function

半年振りくらいにコード組んだので、あんまり自信ありません。
あと、ざっと書きなぐったので、細かい設定は端折ってます。
動作チェックはしたけど、試す時はバックアップとってからにして下さいね。
(動作check:Excel97)
VBAなら分かるけど、一般機能だったら・・・という質問だったら流して下さい。
    • good
    • 0

シート名は、原理的に、関数ではセットできません。


1シート1シートひとつづつ、名前をセットするほかには、VBAでないとできないでしょう。
Sub test01()
yymm = InputBox("年月例200508")
nextM = DateSerial(Val(Mid(yymm, 1, 4)), Val(Mid(yymm, 5, 2)) + 1, 1)
For i = 1 To 31
d = DateSerial(Val(Mid(yymm, 1, 4)), Val(Mid(yymm, 5, 2)), i)
If d >= nextM Then Exit Sub
wd = Format(d, "aaa")
Worksheets.Add(after:=ActiveSheet).Name = i & "日" & wd
Next i
End Sub
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています