- ベストアンサー
連続データの計算式かVBAでの自動変換について
- 連続データの計算式やVBAを使って、セルC1の月を変換するときにB9〜B39の連続データも自動的に変換できる方法を教えてください。
- また、B9〜B39のどこかのセルを空白にした場合に、そのセル以降の連続データも自動的に空白にする方法も知りたいです。
- さらに、空白になったセルのどれかに再び数字を入力すると、その数字を含むセル以降が再び連続データで自動入力される方法も教えてください。
- みんなの回答 (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
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! お望み通りの動きになるかどうかわかりませんが・・・ 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
お礼
このコードで私が求める動きをしてくれました。 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 非常に参考になりました、ありがとうございました。
補足
凄いです、ありがとうございます。 ちなみに、A9~A39にはC1で選択した年月の1日~31日を入力しています。C1セルの年月を変更すると29日~31日や31日が必要無い月(2013年2月や2013年11月など)があります。 そこはカウントせずに、C1セルの年月を変更した場合、B9の連続データを表示させる事も可能なのでしょうか?
- bin-chan
- ベストアンサー率33% (1403/4213)
(2)(3)については セルB10に式[=IF(B9=””,””,B9+1)]を入力して、 セルB10を囲む枠線右下の小さな■を下方向セルB39までドラッグ (1)は12月の場合、それ以降の予想がつかないので割合。 手入力でセルC1とB9をかえるほうが早そう
お礼
参考になりました。 非常に早い回答ありがとうございます、助かりました。
補足
ありがとうございます。 2013年12月以降(2014年1月~)も続きの連続データを入力します。 回答者様の回答では(2)の指定範囲の何処かの場所を空白にしようとすると計算式が消えてしまうので・・・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 で出来ると思います。この度はご丁寧な回答ありがとうございました。
補足
すごいです、確かに小月の表示がされなくなりました!! >~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を求めています。