• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルについて)

エクセルのデータ整理方法とマクロの利用について

このQ&Aのポイント
  • 10年分のエクセルデータ(日付と時間)があり、一部の日時が飛んでいたり、詰まっていたりします。日時を暦どおりに整理する方法と、C列も一緒にずらす方法を教えてください。
  • エクセルのデータ整理に関する質問です。10年分のデータがあり、一部の日時が欠落または詰まっています。この問題を解決する方法と、C列も連動してずらす方法を教えてください。
  • エクセルのデータ整理について質問です。10年分のデータがありますが、一部の日時に欠損があります。欠損を埋める方法と、C列も一緒に調整する方法を教えてください。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.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

fansasad
質問者

お礼

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

その他の回答 (5)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.5

> マクロでも良いので、どなたか とのことですので、マクロについてはある程度おわかりなのでしょう。 と判断させていただき、無駄な解説は省きます。 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

fansasad
質問者

補足

ありがとうございます。 早速試したみましたところ 日付と時間がが飛んでるとこはちゃんと空白になりますが 同じ日で時間が飛んでる個所は空白にはならないようです。 お手数ですが再度ご教授願いませんでしょうか?

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

マクロというよりも関数で対応するのがおすすめです。 例えばシート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のように変更して決定します。 それらの範囲が選択状態になりますので右クリックをして「貼り付け」を行います。 以上で完成です。

fansasad
質問者

お礼

なんとか解決いたしました。 ありがとうございました。

fansasad
質問者

補足

ありがとうございます。やってみましたが なぜか日付が変わるのが、本来0時のはずが 2時の時点になります。 またC列のでデータがないところが「0」で表示されてしますので データがない個所は空白にしたいのですが お手数ですが再度ご教授願えませんでしょうか?

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

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

fansasad
質問者

お礼

ありがとうございます。 参考にさせていただきます。

回答No.2

直す分量も少ないので、手作業なら、次式を入力。87,600 行目付近まで下方向にオートフィル。 C2 true C3 =a2+1=a3 オートフィルタを取り付け。C 列を「FALSE」で絞り込み。表示された数十行の行番号を(ドラッグではなく)1 行ずつ Ctrl キーを押しながらクリックしていく。全部選んだら、どれか 1 行の行番号を右クリック。「行の挿入」を実行。 それか、マクロで下のほうの行から挿入していきます。条件も簡単なので、マクロというほどのこともないですが。

fansasad
質問者

お礼

ありがとうございます。 参考にさせていただきます。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

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

fansasad
質問者

お礼

ありがとうございます。 おっしゃるとおりなのですが かなりの数になりそうなので できれば関数かマクロで一括処理したく 質問させていただいた次第です。

関連するQ&A