dポイントプレゼントキャンペーン実施中!

お世話になります。

セルC1には年月(2013年11月など)と入力されています。

そしてセルB9~B39には数字の連続データ(1~31)が入力されています。

(1)C1のセルを次の月に変換した場合、B9~B39のデータを連続データの続き(32~)に自動変換する計算式やVBAは、どの様に組めば宜しいでしょうか?

(2)そして、B9~B39どこかのセルを空白にした場合、空白にしたセル以降のセルも同様に空白に自動変換する計算式やVBAも分かりません。

(3)(2)で空白になったセルのどれかに「1」と再び入力したら、1を入力したセル以降が再び連続データで自動入力される様にするにはどうすれば良いか分かりません。

ご教授宜しくお願いします。

A 回答 (3件)

No.2です。



補足の件に関して・・・
結局小の月の場合は31日までないので、月末までの数値を表示したい!
というコトですよね?

質問の
>~B39のデータを連続データの続き(32~)に自動変換する計算式
の部分がいまだによく判らないのですが、この部分は無視させていただいて・・・

前回のコードを↓に変更してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
Dim i As Long, k As Long, myNum As Long
If Intersect(Target, Range("C1,B9:B39")) Is Nothing Or Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
If IsDate(Range("C1")) Then
myNum = Day(WorksheetFunction.EoMonth(Range("C1"), 0))
End If
With Target
If .Column = 3 Then
Range("B9:B39").ClearContents
For i = 1 To myNum
Cells(i + 8, "B") = i
Next i
Else
i = .Row
If .Value = "" Then
Range(Cells(i + 1, "B"), Cells(39, "B")).ClearContents
Else
For k = i + 1 To myNum + i
Cells(k, "B") = Cells(k - 1, "B") + 1
If k = 39 Or Cells(k, "B") = myNum Then
Exit For
End If
Next k
End If
End If
End With
Application.EnableEvents = True
End Sub 'この行まで

※ とりあえずある行を消去するとそれ以降のB39セルまでを消去!という操作は残しています。

※ 単にC1セルに日付データを入力するとB9セル以降にその月の月末までを表示!
というコトがご希望であれば数式だけで対応できますが、
とりあえず今回はこの程度で。m(_ _)m

この回答への補足

すごいです、確かに小月の表示がされなくなりました!!
>~B39のデータを連続データの続き(32~)に自動変換する計算式
の部分がいまだによく判らないのですが、この部分は無視させていただいて・・・

と言うのを詳しく説明しますと、2013年11月はB9~B38まで「1~30」の数字が表示されているとします。
それをC1セルの日付を2013年12月に変更すると、B9には1013年11月のB30で表示されていた「30」の続きの数字の「31」以降を自動表記させると言う事です。つまり、2013年12月は31日までありますので、B9~B39に「31~61」の数字を自動表記させると言う訳です。
この様に、年月を次の月に更新するに従い、連続データを永遠と該当するセルに表記させ、B9~B39のどこかのセルを空白にしたら、それ以降のセルも空白表記させるVBAを求めています。

補足日時:2013/12/04 10:10
    • good
    • 0
この回答へのお礼

補足事項の問題点も無事解決できました。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, k As Long, myNum As Long
If Intersect(Target, Range("C1,B9:B39")) Is Nothing Or Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
With Target
If .Column = 3 Then
myNum = WorksheetFunction.Max(Range("B9:B39"))
If IsDate(.Value) Then
For i = 9 To 39
If Cells(i, "A").Value = "" Then
Cells(i, "B").Value = ""
Else
Cells(i, "B") = myNum + i - 8
End If
Next i
End If
Else
i = .Row
If .Value = "" Then
Range(Cells(i + 1, "B"), Cells(39, "B")).ClearContents
Else
For k = i + 1 To 39
If Cells(k, "A").Value = "" Then
Cells(k, "B").Value = ""
Else
Cells(k, "B") = Cells(k - 1, "B") + 1
End If
Next k
End If
End If
End With
Application.EnableEvents = True
End Sub
で出来ると思います。この度はご丁寧な回答ありがとうございました。

お礼日時:2013/12/04 13:51

こんにちは!


お望み通りの動きになるかどうかわかりませんが・・・
VBAでの一例です。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストし、データを入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
Dim i As Long, k As Long, myNum As Long
If Intersect(Target, Range("C1,B9:B39")) Is Nothing Or Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
With Target
If .Column = 3 Then
myNum = WorksheetFunction.Max(Range("B9:B39"))
If IsDate(.Value) Then
For i = 9 To 39
Cells(i, "B") = myNum + i - 8
Next i
End If
Else
i = .Row
If .Value = "" Then
Range(Cells(i + 1, "B"), Cells(39, "B")).ClearContents
Else
For k = i + 1 To 39
Cells(k, "B") = Cells(k - 1, "B") + 1
Next k
End If
End If
End With
Application.EnableEvents = True
End Sub 'この行まで

※ 細かい動きを検証していませんので、
ご希望通りにならなかったらごめんなさいね。m(_ _)m

この回答への補足

凄いです、ありがとうございます。
ちなみに、A9~A39にはC1で選択した年月の1日~31日を入力しています。C1セルの年月を変更すると29日~31日や31日が必要無い月(2013年2月や2013年11月など)があります。
そこはカウントせずに、C1セルの年月を変更した場合、B9の連続データを表示させる事も可能なのでしょうか?

補足日時:2013/12/04 01:23
    • good
    • 0
この回答へのお礼

このコードで私が求める動きをしてくれました。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, k As Long, myNum As Long
If Intersect(Target, Range("C1,B9:B39")) Is Nothing Or Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
With Target
If .Column = 3 Then
myNum = WorksheetFunction.Max(Range("B9:B39"))
If IsDate(.Value) Then
For i = 9 To 39
If Cells(i, "A").Value = "" Then
Cells(i, "B").Value = ""
Else
Cells(i, "B") = myNum + i - 8
End If
Next i
End If
Else
i = .Row
If .Value = "" Then
Range(Cells(i + 1, "B"), Cells(39, "B")).ClearContents
Else
For k = i + 1 To 39
If Cells(k, "A").Value = "" Then
Cells(k, "B").Value = ""
Else
Cells(k, "B") = Cells(k - 1, "B") + 1
End If
Next k
End If
End If
End With
Application.EnableEvents = True
End Sub
非常に参考になりました、ありがとうございました。

お礼日時:2013/12/04 13:52

(2)(3)については


セルB10に式[=IF(B9=””,””,B9+1)]を入力して、
セルB10を囲む枠線右下の小さな■を下方向セルB39までドラッグ

(1)は12月の場合、それ以降の予想がつかないので割合。
手入力でセルC1とB9をかえるほうが早そう

この回答への補足

ありがとうございます。
2013年12月以降(2014年1月~)も続きの連続データを入力します。
回答者様の回答では(2)の指定範囲の何処かの場所を空白にしようとすると計算式が消えてしまうので・・・VBAで組まないとダメでしょうか?

補足日時:2013/12/03 03:01
    • good
    • 0
この回答へのお礼

参考になりました。
非常に早い回答ありがとうございます、助かりました。

お礼日時:2013/12/04 13:53

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