No.6ベストアンサー
- 回答日時:
以下のマクロを標準モジュールに登録してください。
祝日を記述したシート名は、「祝日」にしてあります。
あなたの環境に合わせて適切なシート名に変えてください。
行が追加されるシートは、表示されているシート(アクティブシート)になります。そのシートを表示した状態でマクロを実行してください。
(シートを直接書き換えますので、最初は念のため、シートのバックアップを取って行ってください)
Option Explicit
Public Sub 行挿入()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim dicT As Object
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim wrow As Long
Dim wdate As Variant
Dim i As Long
Set sh1 = ActiveSheet
Set sh2 = Worksheets("祝日")
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
maxrow1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row 'Sheet1 A列最終行を求める
maxrow2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row 'Sheet2 A列最終行を求める
'祝日を記憶する
For wrow = 2 To maxrow2
dicT(sh2.Cells(wrow, "A").Value) = True
Next
'平日に10行挿入する
For wrow = maxrow1 To 6 Step -1
wdate = sh1.Cells(wrow, 1).Value
If Weekday(wdate) <> 1 And dicT.exists(wdate) = False Then
sh1.Rows(wrow).Copy
sh1.Rows(wrow + 1).Resize(10).Insert Shift:=xlDown
End If
Next
Application.CutCopyMode = False
'日付が異なる行に太い線を引く
maxrow1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row 'Sheet1 A列最終行を求める
wdate = ""
For wrow = 6 To maxrow1
If wdate <> sh1.Cells(wrow, 1).Value Then
With sh1.Range("A" & wrow & ":R" & wrow).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
End If
wdate = sh1.Cells(wrow, 1).Value
Next
'最後の行の下側を太線にする
With sh1.Range("A" & maxrow1 & ":R" & maxrow1).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
End Sub
お礼遅くなり申し訳ございません。
もっとvbaを勉強しないと。。。って思いました。
ホントにできると効率いいか痛感しました。
ありがとぅございますm(_ _)m
No.7
- 回答日時:
オートフィルで固定の数分コピーすると閏年と平年の数が合わないはずですが、その辺、問題ないのでしょうか?
条件付き書式は事前にマニュアルで設定しているのに、mm/dd(aaa)はマクロで設定しているって、何となく一貫性に欠けますね。どちらかに統一した方が良いかな?個人的には、事前に設定しておいた方がメンテしやすそうですが・・・。
1年分の日付を設定してから平日分の行を増やすって、ちょっと違和感があります。最初から、休日なら1行、平日なら10行を設定してしまった方が、分かり易そうな・・・。こんな感じで!!
Sub sample()
Dim i As Long
Dim d As Variant
i = 6
For d = DateValue("2021/04/01") To DateValue("2022/03/31")
Cells(i, "A").Value = d
If Cells(i, "A").DisplayFormat.Interior.Pattern = xlPatternNone Then
Cells(i, "A").Resize(10).Value = d
i = i + 10
Else
i = i + 1
End If
Next
End Sub
ちなみに、休日の判定は、とりあえず日付を設定してみて、条件付き書式で色が付いたら休日と見なしています。
それから、太線の件ですが、これも条件付き書式で何とかなんないですかね?
上の行と日付が変わったら罫線を引くとか!!
休日の場合、すでに「背景色を付ける」ようになっているので、その兼ね合いもあると思いますが、見やすいように工夫すれば、十分いけそうな気がします。
お礼遅くなり申し訳ございません。
まさに言うとおりですね。
オートフィルのやり方しかないのかなって勝手に思ってしまいました。。。
まさにこれでした!!
ありがとぅございますm(_ _)m
No.5
- 回答日時:
補足の画像を拝見しました。
1.挿入後の画像の4月1日を見ると、4月1日が5行あります。
これは4行挿入したことになります。
挿入するのは4行でしょうか。それとも10行でしょうか。
2.行を挿入した後、その挿入された行のA列は、同じ日付を設定していますが、
他の列(B列~R列)は空のままで良いのでしょうか。
No.4
- 回答日時:
ごめんなさい。
プログラムコードを見る前に回答してしまいました。想像していたものと違うので、正直、戸惑っています。
ちなみに、プログラムコードを画像で貼ると嫌われますよ!!質問文と同じようにテキストで貼ってくださいね。
それから、条件付き書式のコードが見当たらないようですが、事前に手作業で設定済みってことでしょうか?
すいません。今日は寝ます。おやすみなさい。
No.3
- 回答日時:
こんな感じでしょうか。
ただ、難点があります。条件付き書式が設定されている範囲に対して、コピペを繰り返すと、そのルールが爆発的に増えてしまいます。これは、マニュアル操作で行っても同じだと思いますが、妥協できますか?
Sub sample()
Dim i As Long
For i = Cells(Rows.Count, "A").End(xlUp).Row To 6 Step -1
If Cells(i, "A").DisplayFormat.Interior.Pattern = xlPatternNone Then
Rows(i).Copy
Rows(i).Resize(10).Insert Shift:=xlDown
End If
Next i
End Sub
No.2
- 回答日時:
レイアウトの確認です。
1.a列に日付(一年間)のシートは添付図の左側であってますか。
1行目に見出しがなく、いきなり、日付が設定されています。
それとも、1行目は見出しですか。
(B列は曜日の確認ため曜日を表示しています)
2.10行挿入した結果は、真ん中の図ですが、あってますか。
(2021/1/2の下に10行挿入)
3.右側の図は、祝日カレンダーです。以下のレイアウトでOKですか。
1行目は見出し行。
A列が日付
B列が祝日の名称
画像が不鮮明な場合は、下記URLを参照ください。
こちらにもアップしています。
https://gyazo.com/08cff98fc198e0abe6613a99d0239e31
No.1
- 回答日時:
状況が良く分からないのですが・・・。
メインとなるシート(一年分の日付が入力されている方)と別シート(休日が入力されている方)の2シートがあるとのことですが、条件付き書式で塗り潰してあるのは、どちらのシートですか?
普通ならメインシートの方が塗り潰されているのかなと思うのですが、それで合ってますか?
それから、10行挿入した際、コピーしたいのは日付の列のみですか?その場合、日付の列ってどこですか?A列?B列?
出来れば、画像とか貼ってもらえると理解が早いのですが、無理ですかね?
無理なら、もうちょっと頑張って、説明してください。
作成したVBAのコードを貼っちゃっても良いですよ!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) 出勤簿の土、日、休日に色付けできない 2 2022/08/04 20:10
- Excel(エクセル) 列を挿入しても式の一部を固定するには 6 2023/05/31 21:57
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Visual Basic(VBA) 翌日にお休み予定の従業員がいる場合にアラートを出したい 1 2023/07/11 11:18
- Excel(エクセル) 【Excel質問】 「本日の日付」から指定条件を満たす営業日経過後の日数を表示させる関数式 3 2022/06/06 23:28
- Excel(エクセル) Excelのマクロを教えていただけないでしょうか? 1 2023/07/06 19:56
- Visual Basic(VBA) VBAでWordのネストした表にデータを挿入したい 4 2023/04/24 10:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
VBAの天才来てください
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
VBA 存在しないシートを選...
-
エクセルのシート名変更で重複...
-
XL:BeforeDoubleClickが動かない
-
同じ作業を複数のシートに実行...
-
ExcelVBA シート名を複数セルか...
-
エクセルのマクロでアクティブ...
-
【VBA】指定した検索条件に一致...
-
excelのマクロで該当処理できな...
-
VBAでオブジェクト変数にsetし...
-
エクセル・マクロ シートの非...
-
ブック名、シート名を他のモジ...
-
Excelマクロのエラーを解決した...
-
VBA 検索して一致したセル...
-
Worksheet_Changeの内容を標準...
-
シートが保護されている状態で...
-
エクセルVBAでダブルクリックを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
同じ作業を複数のシートに実行...
-
ExcelVBA シート名を複数セルか...
-
【ExcelVBA】全シートのセルの...
-
Excel マクロについての相談
-
VBA 存在しないシートを選...
-
実行時エラー'1004': WorkSheet...
-
特定の文字を含むシートだけマ...
-
ExcelのVBAのマクロで他のシー...
-
ブック名、シート名を他のモジ...
-
XL:BeforeDoubleClickが動かない
-
VBA 複数の各シートに行を追加...
-
エクセルのシート名変更で重複...
-
【Excel VBA】Worksheets().Act...
-
シートが保護されている状態で...
-
Excel VBA 複数行を数の分だけ...
-
for 文の 繰り返し処理に使える...
おすすめ情報
回答していただきありがとうございます!!
塗りつぶしてあるのはメインシートです。
画像添付しました!!
左側が元のデータで、右がやりたい方法です。
(右の列はQ列から始まってますが実際はA列です。
夜分遅くに回答いただきありがとうございます。
画像添付しました!!
これでなんとかできたらと思います。
恥ずかしいながら、色々と調べて作ったマクロです。
文字が入りきらず画像で添付いたします。
よろしくお願いいたします。
アドバイスありがとぅございますm(_ _)m
テキストで貼ろうと思ったら文字オーバーになってしまって。。。大変失礼しました。
以後気をつけるようにします!
はい。条件書式は手動にしてあります。
色々と調べてそこはもっと知識がないと。。。って思ったので断念しています。
やりたいことができました!ありがとぅございます!何日もずっと悩んでたことが。。。
もっとvbaを勉強しよぅと思いました。
ちなみに作ったコードを見てこぅやればもっといいよって言うところありますか?
最初に一回値をクリアして、A6に4月1日と入れ3月31日までオートフィルしましたが。。。コード合ってますか?あともし気がさわらなければ日付が変わるときにその境界として太下線を引けるようにしたいと思うのですがそれも可能でしょうか?
ずぅずぅしくてすみません。。。
夜分にも関わらず対応してくださってありがとぅございます!
回答ありがとぅございますm(_ _)m
例として5行にしてあるだけです(´ . .̫ . `)
本来は10行入れたいです。
B列以降は空で大丈夫です!
宜しくお願い致します!