sakura0411さん、こんにちは。merlionXXです。
今日はポカポカで春のようです。(東京は)
では、「ラジオスポット計」行の1行下の項目が「交通」じゃない場合、新たに行を追加し、交通という項目にすればいいんですね?
単純にその作業を行なうだけでしたらこれを試してください。
Sub 交通行挿入()
Dim t As Date '変数tは日付時間と宣言
Dim k As Range '変数kは範囲と宣言
t = Now() '現在時間をtに代入
With ActiveSheet 'アクティブなシートにおいて
Set k = .Range("B1") 'とりあえず項目列のセルB1をkと定義する
Do Until k.Value = "" And k.Offset(1, 0).Value = "" '項目列に2行連続で空白があったら中止
Set k = k.Offset(1, 0) 'kの一つ下のセルをあたらにkと定義する
If Trim(k.Value) = "ラジオスポット計" Then 'kがラジオスポット計なら
If Trim(k.Offset(1, 0).Value) <> "交通" Then 'もしkの下が「交通」でなければ
k.Offset(1, 0).EntireRow.Insert Shift:=xlDown 'kの下に1行挿入
k.Offset(1, 0).Value = " 交通" '項目を入れる
.Range(k.Offset(1, 1), k.Offset(1, 35)).Value = 0 'その行の値を0とする
End If
End If
Loop '繰り返す
End With
MsgBox UCase(Environ("UserName")) & "さん、作業所要時間は、" & Format(Now() - t, "hh時間mm分ss秒") & " でした。。" '今の時間からtを引いて作業時間を求めユーザーに案内
End Sub
さきほどの集計作業も同時に行なうのでしたら、こちらを
Sub 集計および交通行補正()
Dim t As Date '変数tは日付時間と宣言
Dim k As Range '変数kは範囲と宣言
t = Now() '現在時間をtに代入
With ActiveSheet 'アクティブなシートにおいて
Set k = .Range("B1") 'とりあえず項目列のセルB1をkと定義する
Do Until k.Value = "" And k.Offset(1, 0).Value = "" '項目列に2行連続で空白があったら中止
Application.StatusBar = k.Address 'ステータスバーにkのアドレス表示
Set k = k.Offset(1, 0) 'kの一つ下のセルをあたらにkと定義する
If Trim(k.Value) = "テレビスポット計" Then 'kがテレビスポット計なら
k.Offset(1, 0).EntireRow.Insert Shift:=xlDown 'kの下に1行挿入
k.Offset(1, 0).Value = " テレビ(タイム・スポット計)" '項目を入れる
.Range(k.Offset(1, 1), k.Offset(1, 35)).FormulaR1C1 = "=SUBTOTAL(9,R[-2]C:R[-1]C)" 'その行に式を挿入
End If
If Trim(k.Value) = "ラジオスポット計" Then 'kがラジオスポット計なら
If Trim(k.Offset(1, 0).Value) <> "交通" Then 'kの下が交通でなければ
k.Offset(1, 0).EntireRow.Insert Shift:=xlDown 'kの下に1行挿入
k.Offset(1, 0).Value = " 交通" '項目を入れる
.Range(k.Offset(1, 1), k.Offset(1, 35)).Value = 0 'その行の値を0とする
End If
k.Offset(1, 0).EntireRow.Insert Shift:=xlDown 'kの下に1行挿入
k.Offset(1, 0).Value = " ラジオ(タイム・スポット計)" '項目を入れる
.Range(k.Offset(1, 1), k.Offset(1, 35)).FormulaR1C1 = "=SUBTOTAL(9,R[-2]C:R[-1]C)" 'その行に式を挿入
End If
If Trim(k.Value) = "交通" Then 'kが交通なら
k.Offset(1, 0).EntireRow.Insert Shift:=xlDown 'kの下に1行挿入
k.Offset(1, 0).Value = "合計" '項目を入れる
.Range(k.Offset(1, 1), k.Offset(1, 35)).FormulaR1C1 = "=SUBTOTAL(9,R[-9]C:R[-1]C)" 'その行に式を挿入
End If
Loop '繰り返す
End With
MsgBox UCase(Environ("UserName")) & "さん、作業所要時間は、" & Format(Now() - t, "hh時間mm分ss秒") & " でした。。" '今の時間からtを引いて作業時間を求めユーザーに案内
Application.StatusBar = "" 'ステータスバー表示を消去
End Sub
マクロコードの各行が何をしているのかコメントを付しておきました。('でコメントアウトしてますからそのままコピペしても大丈夫ですよ。)
お礼
merlionXXさんへ こんにちは!sakura0411です。 早速のお返事どうも有難うございました! 今日は東京はとても暖かくて気持ちの良い日ですね♪ (お互い東京に住んでいるんですネ) マクロの方実行してみました。今回も完璧です! しかもユーザー名が出たり、所要時間が出たり、バージョンアップしてますねっ?? 何が書いてるのかわからなかったマクロも、merlionXXさんが コメントして下さったおかげでなんとなく理解できました♪ 頑張って勉強せねば! 本当に有難うございました。 当初は2週間以上かかるのでは…と思っていた作業も これなら2日とかでできちゃいそうです。 どうも有難うございました。大感謝です☆ 取り急ぎお礼まで o(*^_^*)o