[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『結合セルに日付を入力』(Rino)
初めまして。VBA初心者です。
VBA先達の皆様に質問です。
2×2の結合セル70行分(結合セルなので35個の結合セル)があります。メッセージボックスで指定した月日を入力し、頭の結合セルからその日とそれ以降の日付を自動で入力できるようにしたいのですが、
頭の結合セルと月が変わった時の結合セルだけ1/1のように/で月と日を入力し、
それ以外は日にちの数字だけ入力することは可能でしょうか?
もし可能なのであれば、そのコードを教えていただけないでしょうか?
< 使用 Excel:Microsoft365、使用 OS:unknown >
過去ログです。 参考になるかもしれません。 ※マクロではありません
[[20060714095031]] 『カレンダー』(みど)
今回は結合セルですので、工夫が必要です。 (MK) 2023/08/07(月) 14:07:44
まだまだ全然途中かけで拙いコードとなりますが、、、
Sub 日付()
Dim i As Long
Dim A As Long
Dim day As Variant
A = Cells(Rows.Count, 4).End(xlUp).Row
For i = 9 To A
day = Application.InputBox("日付を入力してください。", _
Title:="日付入力")
If Not IsDate(day) Then MsgBox "日付の入力が間違っています。"
Else
Range("i,4").MergeArea = IsDate(Date)
End If
Next i
End Sub
このように書いています。
Range("i,4").MergeArea = IsDate(Date)
のところでエラーが出ます。
IsDateではなく、InputBoxで入力した日付を指定すると思っているんですが、どのように書けばいいか分かりません。
ご助力お願いできますでしょうか?
(Rino) 2023/08/07(月) 14:14:19
ここは
Cells(i,4).Value = day
でよいと思います。
CellsとRangeの値指定で戸惑うことはよくあると思います。
繰り返しで慣れていきましょう。
(西瓜) 2023/08/07(月) 14:20:06
あとここは
For i = 9 To A Step 2
こうするとiの値を2ずつ増加させることができます。
(西瓜) 2023/08/07(月) 14:21:40
Sub 日付() Dim i As Long Dim A As Long Dim day As Variant A = Cells(Rows.Count, 4).End(xlUp).Row day = Application.InputBox("日付を入力してください。", Title:="日付入力") If Not IsDate(day) Then MsgBox "日付の入力が間違っています。" Else Cells(9, 4).Value = day For i = 11 To A Step 2 Cells(i, 4).Value = Cells(i - 2, 4).Value + 1 Next i End If End Sub
ほかにもいくつか直すとこんな感じではないかと思います。
(西瓜) 2023/08/07(月) 14:26:21
関数での方法です。
A1は日付を手入力(書式はm/d) (A1~B2)を結合しておく
A3 =IF(DAY($A$1+INT((ROW()-1)/2))=1,TEXT($A$1+INT((ROW()-1)/2),"M/D"),TEXT($A$1+INT((ROW()-1)/2),"D")) でA3〜B4を結合
A3をA70までコピペ (MK) 2023/08/07(月) 14:41:49
IsDate(Date)
()の中が日付データであるか否かを判定しています。
でDateは今日の日付です。
ですので、IsDate(Date)は必ずTrueになります。
値や式を代入できるのは、単一のセルです。
結合セルの一番左上のセルに値や式を代入してください。
※やり方は西瓜さんのコードのとおりです。
(MK) 2023/08/07(月) 14:55:57
参考まで。
https://excel-ubara.com/excelvba1/EXCELVBA385.html
>MergeArea
>指定されたセルがある結合セル範囲を表すRangeオブジェクトを返します。 >指定されたセルが結合セル範囲にない場合、このプロパティは指定されたセルを返します。 >値の取得のみ可能です。 (MK) 2023/08/07(月) 15:02:47
西瓜さん、コードの添削ありがとうございました。
教えていただいたコードでエラーなく頭のセルに日付が入力されたのですが、それ以降のセルには日付が入力されず,,,といった具合だったのですが、
Cells(i, 4).Value = Cells(i - 2, 4).Value + 1
の後に、何か+αでコードが必要なのでしょうか?
お二方、何度もすみません。汗)
(Rino) 2023/08/07(月) 16:20:47
D列が空白セルならばそうなるコードです。
A = Cells(Rows.Count, 4).End(xlUp).Row
ここでD列の最終行を取得し、その行までデータを入力するコードだからです。
Aの値を入力させたい最大の行に変更すれば、そこまでデータを入力してくれます。
(西瓜) 2023/08/07(月) 16:50:46
>ちなみにD9:E10の結合セルが最初の日付になるのですが、
参照するセルをずらすだけです。
>A1は日付を手入力(書式はm/d) ↓ D9は日付を手入力(書式はm/d)
> (A1~B2)を結合しておく ↓ (D9~E10)を結合しておく
> A3 ↓ D11
>=IF(DAY($A$1+INT((ROW()-1)/2))=1,TEXT($A$1+INT((ROW()-1)/2),"M/D"),TEXT($A$1+INT((ROW()-1)/2),"D")) ↓ =IF(DAY($D$9+INT((ROW()-9)/2))=1,TEXT($D$9+INT((ROW()-9)/2),"M/D"),TEXT($D$9+INT((ROW()-9)/2),"D"))
>でA3〜B4を結合 >A3をA70までコピペ ↓ でD11〜E12を結合 D11をD80までコピペ (MK) 2023/08/07(月) 17:25:19
> D11をD80までコピペ
D78までコピペ、でした。 (MK) 2023/08/07(月) 17:28:23
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.