出産前後の痔にはご注意!

下記のデータについての質問です。
A列に日付、B列に時間(1時~0時)そしてC列は空白か
もしくは数字が入っているデータが10年分あります。

10年分ですので
24時間×365日×10年ですので87600行になります。
更に閏年分一回につきプラス24行になるはずなのですが

実際には途中何か所か日時が飛んでおり、またその部分が
空白になっておらず、詰まっているため行数が暦どおりより
少くなっております。

ここで質問なのですが
日時が飛んでいる個所を空白にして
行数を暦どおりにするにはどうすれば良いでしょうか?
また、この時C列も一緒にずらせるようにしたいのですが
どのようにすれば良いでしょうか?
よろしくお願いいたします。

マクロでも良いので、どなたかご教授いただけませんでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (6件)

Sub sample2()


Dim d As Long, i As Long
Dim dt1 As Long, dt2 As Long
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If IsDate(Cells(i - 1, 1)) = False Then Exit For

        dt1 = (Cells(i, 1) + Cells(i, 2)) * 24
        dt2 = (Cells(i - 1, 1) + Cells(i - 1, 2)) * 24
        d = dt1 - dt2

        If d > 1 Then
            Cells(i, 1).Resize((d - 1), 3).Insert Shift:=xlDown
        End If
    Next
End Sub
    • good
    • 0
この回答へのお礼

完璧です。
ありがとうございました。

お礼日時:2013/07/27 19:29

> マクロでも良いので、どなたか



とのことですので、マクロについてはある程度おわかりなのでしょう。
と判断させていただき、無駄な解説は省きます。



Sub sample()
Dim d As Long, i As Long
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If IsDate(Cells(i - 1, 1)) = False Then Exit For

        d = Cells(i, 1) - Cells(i - 1, 1)
        If d > 1 Then
            Cells(i, 1).Resize((d - 1) * 24, 3).Insert Shift:=xlDown
        End If
    Next
End Sub

この回答への補足

ありがとうございます。

早速試したみましたところ

日付と時間がが飛んでるとこはちゃんと空白になりますが

同じ日で時間が飛んでる個所は空白にはならないようです。

お手数ですが再度ご教授願いませんでしょうか?

補足日時:2013/07/27 17:16
    • good
    • 0

マクロというよりも関数で対応するのがおすすめです。


例えばシート1に元のデータが有るとします。
A2セルから下方には年を含めた日付が、B2セルから下方には1時から0時に終わる時刻が、C列にはデータが入力されているとします。
そこですべての日付を取り込んだお求めの表をシート2に表示させるとしたらシート2のA2セルには次の式を入力します。

=IF(Sheet1!$A$2="","",IF(DATE(YEAR(Sheet1!$A$2),MONTH(Sheet1!$A$2),DAY(Sheet1!$A$2)+(ROUNDDOWN((ROW(A1)-1)/24,0)))>MAX(Sheet1!$A:$A),"",DATE(YEAR(Sheet1!$A$2),MONTH(Sheet1!$A$2),DAY(Sheet1!$A$2)+(ROUNDDOWN((ROW(A1)-1)/24,0)))))

セルの表示形式を日付から選択します。
B2セルには次の式を入力します。

=IF(A2="","",TIME(HOUR(Sheet1!$B$2)+MOD(ROW(A1)-1,24)+1,0,0))

セルの表示形式を時刻から選択します。
C2セルには次の式を入力します。

=IF(A2="","",IF(COUNTIF(Sheet1!$A:$A,A2)=0,"",INDEX(Sheet1!$C:$C,MATCH(A2,Sheet1!$A:$A,0)+MOD(ROW(A1)-1,24))))

次にA2セルからC2セルを選択して右クリックし、「コピー」を選択します。
名前ボックスにはA2と表示されていますがその窓をA2:C88000のように変更して決定します。
それらの範囲が選択状態になりますので右クリックをして「貼り付け」を行います。

以上で完成です。

この回答への補足

ありがとうございます。やってみましたが

なぜか日付が変わるのが、本来0時のはずが
2時の時点になります。

またC列のでデータがないところが「0」で表示されてしますので
データがない個所は空白にしたいのですが

お手数ですが再度ご教授願えませんでしょうか?

補足日時:2013/07/27 17:21
    • good
    • 0
この回答へのお礼

なんとか解決いたしました。

ありがとうございました。

お礼日時:2013/07/27 19:28

別シートに


 A   B  C
日付 時刻 データ
と準備して
手入力で
日付と時刻を2行分くらい入力
あとは、10年分を下までマウスでコピー
C列は
Vlookup関数かなにかで、元データのシートから引っ張ってこれないでしょうかね。
ご希望のシートになったら、コピーと値の貼り付けで固定して、元のシートを削除します。

一回こっきりの作業なら、わざわざVBAを開発するより手間がかからない内容です。
    • good
    • 0
この回答へのお礼

ありがとうございます。

参考にさせていただきます。

お礼日時:2013/07/27 17:23

直す分量も少ないので、手作業なら、次式を入力。

87,600 行目付近まで下方向にオートフィル。

C2 true
C3 =a2+1=a3

オートフィルタを取り付け。C 列を「FALSE」で絞り込み。表示された数十行の行番号を(ドラッグではなく)1 行ずつ Ctrl キーを押しながらクリックしていく。全部選んだら、どれか 1 行の行番号を右クリック。「行の挿入」を実行。

それか、マクロで下のほうの行から挿入していきます。条件も簡単なので、マクロというほどのこともないですが。
「エクセルについて」の回答画像2
    • good
    • 0
この回答へのお礼

ありがとうございます。

参考にさせていただきます。

お礼日時:2013/07/27 17:24

とりあえず、D列にドラッグコピーで日付を入れて比較し、A列の日付が飛んでいるのがどこなのか探して修正してはいかがでしょう。

    • good
    • 0
この回答へのお礼

ありがとうございます。

おっしゃるとおりなのですが

かなりの数になりそうなので

できれば関数かマクロで一括処理したく

質問させていただいた次第です。

お礼日時:2013/07/27 17:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング