![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
お世話になります。
セルC1には年月(2013年11月など)と入力されています。
そしてセルB9~B39には数字の連続データ(1~31)が入力されています。
(1)C1のセルを次の月に変換した場合、B9~B39のデータを連続データの続き(32~)に自動変換する計算式やVBAは、どの様に組めば宜しいでしょうか?
(2)そして、B9~B39どこかのセルを空白にした場合、空白にしたセル以降のセルも同様に空白に自動変換する計算式やVBAも分かりません。
(3)(2)で空白になったセルのどれかに「1」と再び入力したら、1を入力したセル以降が再び連続データで自動入力される様にするにはどうすれば良いか分かりません。
ご教授宜しくお願いします。
No.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を求めています。
補足事項の問題点も無事解決できました。
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
で出来ると思います。この度はご丁寧な回答ありがとうございました。
No.2
- 回答日時:
こんにちは!
お望み通りの動きになるかどうかわかりませんが・・・
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の連続データを表示させる事も可能なのでしょうか?
このコードで私が求める動きをしてくれました。
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
非常に参考になりました、ありがとうございました。
No.1
- 回答日時:
(2)(3)については
セルB10に式[=IF(B9=””,””,B9+1)]を入力して、
セルB10を囲む枠線右下の小さな■を下方向セルB39までドラッグ
(1)は12月の場合、それ以降の予想がつかないので割合。
手入力でセルC1とB9をかえるほうが早そう
この回答への補足
ありがとうございます。
2013年12月以降(2014年1月~)も続きの連続データを入力します。
回答者様の回答では(2)の指定範囲の何処かの場所を空白にしようとすると計算式が消えてしまうので・・・VBAで組まないとダメでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル表作成について 5 2023/03/12 13:25
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Excel(エクセル) エクセル 自動計算 1 2023/01/30 13:28
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) エクセル関数についてお教えください 3 2023/07/24 12:33
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同一セルに日時があるものを日...
-
Excelで指定した条件と一致する...
-
1年分のデータから特定の月分...
-
EXCELでCSVファイル保存すると...
-
エクセルVBAで、複数セルのデー...
-
COUNTIFの反対の関数はあるので...
-
【VBA】指定フォルダに格納中の...
-
EXCELで足し算できるのにSUM...
-
EXCELで年月日の表記から日付部...
-
ドロップダウンリストで空白の...
-
Excelで連続データを行飛ばしで...
-
エクセル
-
日の数字だけで何年何月何日に...
-
エクセルでセルを一括で右詰に...
-
1つのセルにまとまっている情報...
-
エクセル-日付で計算範囲を判定...
-
エクセルで数列を使う方法はあ...
-
色なしセルの合計値の出し方に...
-
エクセルで特定の行を除いて計...
-
Excelで、表紙に、住所を自動で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1年分のデータから特定の月分...
-
同一セルに日時があるものを日...
-
EXCELでCSVファイル保存すると...
-
Excelで指定した条件と一致する...
-
COUNTIFの反対の関数はあるので...
-
1つのセルにまとまっている情報...
-
ドロップダウンリストで空白の...
-
エクセルで数字、文字列混在の...
-
エクセルでセルを一括で右詰に...
-
エクセルVBAで、複数セルのデー...
-
複数のシートの日付データを、...
-
EXCELで年月日の表記から日付部...
-
OFFSET関数を使用した印刷範囲...
-
EXCELで足し算できるのにSUM...
-
色なしセルの合計値の出し方に...
-
webクエリのurlの変更方法
-
Excelで連続データを行飛ばしで...
-
excelで平均差を出したい
-
エクセル数式・等間隔ごとの範...
-
エクセル
おすすめ情報