日付データで土、日分の2行追加する方法

このQ&Aのポイント
  • 日付データで計算し、土、日の2行を追加する方法について教えてください。
  • Excel2010で、日付データを操作して土、日分の2行を追加する方法がわかりません。マクロを使用していますが、最終行が月曜日だけの場合に2行追加されません。
  • マクロを使って日付データを操作していますが、最終行が月曜日だけの場合に2行追加されない問題が発生しています。どこが悪いのでしょうか?
回答を見る
  • ベストアンサー

日付データで計算し、土、日分の2行追加する方法

excel2010 日付データで計算し、土、日の2行を追加するマクロを作成しました。 途中は、正しく2行追加されます。 しかしながら、最終行が月曜日だけだと、最終行(月曜日)と最終行-1(金曜日)の間に 2行追加されません。 作成したマクロのどこが悪いのかを教えていただきたく。 構成は次の通り A列に日付のデータがA4セルから貼り付けられています。 A3セルは、題目で日付という文字列があります。 A列には、最初土、日の日付(行)がありません。 土、日の行、2行分を追加するために、計算式で行と次の行の差が3以上だったら 2行追加というマクロを設定します。 マクロは次の通り Sub donichiadd() '' Dim MxR As Long Dim h As Long MxR = Range("A65536").End(xlUp).Row - 1 For h = MxR To 5 Step -1 If Cells(h, 1) - Cells(h - 1, 1) >= 3 Then Cells(h, 1).Resize(2).EntireRow.insert End If Next h End Sub マクロは以上。 データが下記だとします。 A4セル:6/1 A5セル:6/2 A6セル:6/3 A7セル:6/4 A8セル:6/5 A9セル:6/8 A10セル:6/9 A11セル:6/10 A12セル:6/11 A13セル:6/12 A14セル:6/15 この状態でマクロを実行すると、 6/8と6/5の間は2行追加されますが、 6/15と6/12の間には2行追加されません。 尚、A15セルに6/16があった場合にマクロを実行すると、 6/15と6/12の間に2行追加されます。 最終行が月曜日だけだと、土、日分の2行を追加することが出来ない状態です。 どこが悪いのか教えていただきたく。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

下記式が間違っています。 式の最後の「-1」を削除してください。 MxR = Range("A65536").End(xlUp).Row – 1    ↓ MxR = Range("A65536").End(xlUp).Row 「Range("A65536").End(xlUp).Row」は、データのある行番号の最後を示すのであなたの例では「A14」になります。ここで「-1」をすると、最終行が「A13」となり、「A14」が無視され、行の追加が行われません。 ご自分で発見するためには、デバッグ、ウォッチ式を勉強されると良いと思います。

3620313
質問者

お礼

素早い回答ありがとうございます。助かりました。 デバッグ、ウォッチ式勉強します(^^)

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>日付データで計算し、土、日の2行を追加するマクロを作成しました。 ご質問の状況の直接の悪さは、(月曜である)最終行を見てませんね。 間違い: MxR = Range("A65536").End(xlUp).Row - 1 正解: MxR = Range("A65536").End(xlUp).Row また、エラーを回避したくて?5行目までしかループしてないので、6月1日は月曜日なのに、その前には土日の二行が追加できていない(ヤリタイ事の整合性が取れてない)とかも。 sub macro1()  dim r as long  for r = range("A65536").end(xlup).row to 4 step -1 ’(または to 5)   if weekday(cells(r, "A").value) = 2 then    cells(r, "A").resize(2, 1).entirerow.insert shift:=xlshiftdown   end if  next r end sub

3620313
質問者

お礼

回答ありがとうございます。 先頭が月曜日だった場合のマクロまで記述いただき恐れ入ります。 構成における説明不足でしたが、1月単位での抽出をしています。 A4セルは月の平日先頭日から始まるので、A4セルが月曜日だった場合には、 その上に2行追加は必要ないのです。 お手数をおかけしました。

関連するQ&A

  • 行コピーして、今日の日付の行に貼り付けるマクロ

    こんにちは、エクセルマクロについて、助けて頂きたく質問させていただきました。 添付しました画像のような表があり、 セルA2に「=TODAY()」が入っていて、セルB2から右は別シートのデータを参照しています。 マクロを実行すると、2行目を行コピーし、セルA3以下の日付からセルA2の日付(今日の日付)を探し出して、行貼り付けしてほしいです。 行コピーや値で貼り付けはマクロの記録を使って、詳しくない私でもなんとか作ることはできるのですが、 今日の日付を探し出して、そこに貼り付ける。というマクロは作れませんでした・・・。 お助け下さい、宜しくお願いします! ※補足します セルA2の今日の日付は便宜上入力しているだけです。無い方がマクロを組みやすいのなら、無くせます。

  • エクセル2003での自動行追加について

    マクロを使わずに自動行追加する方法を探しています。 条件:マクロや右クリックでの行又はセルの挿入を使わずに、各最終行の次にから 3行追加を繰り返す A1 B1 AAA 111 AAA 222 AAA 333 (ここに3行追加) SSS 777 SSS 444 SSS 888 (ここに3行追加) アルファベットは同一日付データ 数値は氏名データ データは都度可変します マクロを修得しておりませんので、何とかこの条件下でエクセルで可能な方法を探しております。 皆さま、ご教授をお願い致します。

  • 【VBA】土日をスキップして日付計算

    今A列に土日を除いた日付があり、マクロを実行すると、日付が一日加算される下記のようなVBAを書いてます。 Sub DateCulc() i = 3 Do dodate = (DateAdd("d", 1, Cells(i, 1))) Cells(i, 1) = dodate i = i + 1 Loop While Cells(i, 1).Value <> "" End Sub 一日加算した場合、土日をスキップ、つまり金曜の日付は月曜になるようにしたいのですが、思いつきません。WeekDayを使うのだと思うのですが。 ご教授頂けますか。宜しくお願いします。

  • VBA アクティブセルに1行目の日付を入力したい

    こんにちは、VBA初心者です。 アドバイスお願いします。 1行目に日付が入力してあります。 任意のセルを選択し、マクロを実行すると1行目の日付(日のみ)がそのセルに入力されるマクロを作っています。 例えば、    A       B      C 1 2008/11/1  2008/11/2  2008/11/3 2 3 4          2  5 セルB4を選択して実行するとB4に2が入力され、セルC3を選択して実行するとC3に3と入力するようにしたいです。 私なりに考えたのが下記のコードです。 Sub アクティブセルに1行目の日付を入力() Dim hidukesyutoku As Byte Dim dd As Date dd = Date Do While ActiveCell.Value <> dd ActiveCell.Offset(-1).Activate hidukesyutoku = hidukesyutoku + 1 Loop ActiveCell.Copy Destination:=ActiveCell.Cells(hidukesyutoku + 1, 1) End Sub Do Whileを使って日付があるまでアクティブセルをオフセットしていくというものですが、このコードのままでは、dd=dateとなっているため今日の日付にしか反応しません。 今日だけではなく、日付というだけで反応するようにするにはどうしたらいいでしょうか? また、このコードは、処理にも時間がかかりあまりいいものではないと思います。(初心者の私では、これが限界でした。) もっと早いコードの作り方があれば教えて下さい。

  • エクセルで、2行おきに1行追加する方法

    エクセルで、2行おきに1行追加する方法 行が2000行位あるデータについて、 1行毎では時間がかかるので、 他の方法(マクロでも作業列等)を教えて下さい。 例 行1 A 行2 B 行3 C 行4 D 行5 E 行6 F 行7 G 行8 H     上記2000行のデータを下記のように行追加をしたいのです。 行1 A 行2 B 行追加 行3 C 行4 D 行追加 行5 E 行6 F 行追加 行7 G 行8 H よろしくお願い致します。

  • データ最終行の選択について

    よろしくおねがいします AからZ列までデータが入っています 1行目はタイトルです 最終行は全て同一ですが毎回変わります。 例外でM1 N1は空白です 今↓の作業をしているのですが 'D2セルからR列最終セルを選択 Range(Cells(2, 4), Cells(Cells(65536, 1).End(xlUp).Row, 18)).Select そのまえに M2からMデータ最終行の和をM列のデータ最終行の二つ下のセルに N2からMデータ最終行の和をN列のデータ最終行の二つ下のセルに それぞれ記入してから D2からR列最終せるを選択したいのです 仮にデータ最終行を100とすると M2~M100の和をM102に N2~N100の和をN102に それぞれ記入して D2~R100を選択・・・という流れです。 最終行数を選択して それから2を引いて選択しても なぜかうまくいかなく困っております よろしくおねがいします

  • エクセル 行追加マクロについて

    エクセル 行追加マクロについて 2007エクセルマクロ初心者です。 スケジュール表を作成、行追加マクロを作ろうとしてます。 シートの上下に表があり、上の表に行追加です。 関数式を壊したくないので、一部セルへロックをかけています。 以下の点についてご教授をお願いいたします。 行追加マクロを実行するとパスワードを要求されます。 聞かれないようにできないでしょうか。? パスワードを入力した以降は要求されませんが シートの保護解除を選択すると保護が解除されてしまいます。 パスワード記載のマクロを試したことがありますが、 表へオートシェイプが描写できなかったので断念しました。 Sub 行追加() With ActiveSheet 'シート保護解除 .Unprotect Range("A65536").End(xlUp).Offset(-8).Select ActiveCell.Resize(1, 79).Select Selection.Copy Selection.Insert Shift:=xlDown Range("A65536").End(xlUp).Offset(-8).Select ActiveCell.Resize(1, 9).Select Selection.ClearContents 'シート保護 .Protect DrawingObjects:=False, Contents:=True, Scenarios:= _ True End With End Sub

  • 12か月分の日付データを繰返し記入したい

    下記動作を実現したくマクロを書いてみましたが、正常に処理できません。 修正が必要な箇所&修正方針について、知識のある方からご助言いただけますと幸いです。。 <実現したいこと> ・sh2のV列(2行目~)に対し、 2019/4/1 2019/5/1 … 2020/3/1 と12行書き込む処理を、(sh1の2~最終行)回行う ※最終的に、sh2のV列は、先頭行の下に、(sh1の2~最終行)×12行できる想定 <正常に動かなかった記述> Sub V列の処理() Dim sh1 As Worksheet, sh2 As Worksheet Dim r As Long, i As Long Application.ScreenUpdating = False Set sh1 = Worksheets("元シート") Set sh2 = Worksheets("集計用シート") '2から最終行まで12行おきの繰り返しです For r = 2 To sh1.Cells(Rows.Count, 1).End(xlDown).Row Step 12 'まず、V列の各1行目に4月の値を入れます sh2.Cells(r, 22) = "2019/4/1" 'したら、12か月分入れていきます For i = 1 To 11 sh2.Cells(r + i, 22) = DateAdd("m", i, Cells(r, 22)) Next i Next r Application.ScreenUpdating = True End Sub

  • 日付と時刻を比較して一致した行を抜き出す。

    【Sheet1】             【Sheet2】     A        B        A         B 1 2008/1/2   00:00      1 2008/1/1   22:00 2 2008/1/2   01:00      2 2008/1/1   23:00 3 2008/1/2   02:00      3 2008/1/2   00:00 4 2008/1/2   02:00      4 2008/1/2   01:00 【Sheet1】のA行セルと【Sheet2】のA行セルの文字列を比較し、 一致しない場合は【Sheet2】のセルを一つずらしA3【一致】するセルと比較するまで ループを続ける。 ※ 上記例の場合だと日付一致は【Sheet1】A1 ⇔ 【Sheet2】A3 一致した時点で一致した【Sheet1】のAセルの隣B列と比較して、 【Sheet1】の日付、時刻が一致した列を検出する。 ※ 最終的に条件が一致して抜き出すのは 結果 : 【Sheet1】のA1行 そんなマクロを作っているのですが、 何かもっと簡潔に作れるやり方ってありますでしょうか? ヒントだけでもいいのでご教授していただけたら幸いです・・。 わかりにくくてすいません; ----------------------------------------------------------------------------------------------------- Dim Com As Integer Dim Com2 As Integer Dim Storage As String Dim i As Long ' Month関数を使う Do Until Month(Cells(i, 1).Value) = 11 For Com = 1 To 100 'Com = 日付 ' 【Sheet1】の指定されたAセルが【Sheet2】の指定されたAセルが一致しているかどうか If CDate(Worksheets(Sheet1).Range("A" & Com)) = CDate(Worksheets(Sheet2).Range("A" & Com)) Then ' 一致すれば【Sheet1】のAセルの文字列をStorage変数に格納 Storage = ActiveCell.Value Else ' Falseの場合、1行改行する ActiveCell.Offset(1, 0).Select End If Next Loop ----------------------------------------------------------------------------------------------------

  • Excel 日付から1日の平均を求めたいです

    Excelで頭を抱えています。 どなたかわかる方が居たら教えてください。 Excelには以下のようなDATAが入力されています。  A列  B列 C列 D列 E列・・・・・・     開始日 終了日  加工(h)    4/3 4 5 6 7 8 4/3  4/8    10     ←---------------→               (加工日数をオートシェイプで表示) コレに行を追加し(最終的には非表示) 4/3~4/8の間で加工時間に1日平均何時間かかったかを表示したいのです。 日付のセルには4/1を基準として、+1の式を入力してあります。 説明不足で申し訳ありませんが 何方かわかる方が居たら教えてください。 よろしくお願いします。

専門家に質問してみよう