• 締切済み

条件付データの行削除について(追加)

急ぎ教えていただきたいのですが、 下記のデータの中からDATE TIMEデータが同一のものが50以上あった場合は その行を削除するという条件付関数かマクロが組めないかいろいろと試行錯誤 していますが、できなくて困っています。 A列 B列 C列 EVENT DATE TIME 1 2010/6/6 15:22 2 2010/6/6 15:25 3 2010/6/6 15:36 4 2010/6/6 15:38  ・・・・これらが50以上続く場合削除 5 2010/6/6 15:38  ・・・・〃 6 2010/6/6 15:39 7 2010/6/6 15:39 8 2010/6/6 16:05 9 2010/6/6 16:05 10 2010/6/7 12:02 11 2010/6/7 13:43 12 2010/6/7 13:59 13 2010/6/7 13:59 14 2010/6/7 13:59 15 2010/6/7 17:06 16 2010/6/7 21:26 データが16000件くらいあるものもあり、手作業ではとても 大変で困っています。アドバイスをお願い致します。

みんなの回答

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

同じ日付で同じ時間が50以上続く場合にはそれらの行を削除するのでしたら次のようにしてはどうでしょう。 すべてのデータは2行目から下方にあるとします。 D1セルには作業列とでも入力してからD2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",IF(AND(B2=B1,C2=C1,D1=1),1,IF(COUNTIF(C2:OFFSET(C2,IF(ISERROR(MATCH(B2+1,B:B,0)),MATCH(B2+1,B:B,1)-ROW(),MATCH(B2+1,B:B,0)-ROW()-1),0),C2)>=50,1,""))) これによってD列には50以上同じデータが続く場合には1が表示されます。 その後にD列を選択して右クリックして「コピー」し、その後にD1セルを選んで右クリックし「形式を選択して貼り付け」で「値」にチェックをして貼り付けます。 その後にD列を最重点にして「昇順」で並べ替えを行います。 D列に1のある行は上部に並べられますのでそれらの行を選択して削除すればよいでしょう。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

行削除でエクセル関数に言及するのは、関数を良くわかって無い証拠。 関数は「セルの値」を決めルことは出来るが、それ以外の書式、行削除やシート・セルの情況は変えられないのは常識。 ーー ただし日付時刻順に並べて、上の行から数えて、50件以後の行に例えばサイン1を立てる式は簡単(空き列を1列使う)。 この方式で50件の選択がよければ、 その後はその列で、1以外を抜き出すのは、データーフィルター「フィルタオプションの設定」操作で出来る。 ーー VBAでやっても、もちろん複雑にはならないが、For Nextループでやると削除後の行番号が変化するので、得策でなかろう。 単なるループで日付+時刻の変化をウオッチする。1件読むごとに50件を越えてないか判別し超えていれば削除する。 よほどのVBAの熟練者で無いと、操作でやる方法に時間的に勝てないだろう。 ーー データ例 4件以上は削除に簡素化する(質問では回答者の手数のことを考えて、このように気を効かすすべき)。 A列    B列 日付 サイン 2010/6/6 15:22 2010/6/6 15:22 2010/6/6 15:22 2010/6/6 15:22 1 2010/6/6 15:22 1 2010/6/6 15:38  2010/6/6 15:38 2010/6/6 15:38 2010/6/6 15:39 2010/6/6 15:39 2010/6/6 15:39 2010/6/6 15:39 1 2010/6/6 16:05 2010/6/6 16:05 2010/6/6 16:06 2010/6/6 16:06 2010/6/6 16:06 2010/6/6 16:06 1 B列の式 B2に =IF(COUNTIF($A$2:A2,A2)>3,1,"") 式を下方向に複写。 結果 上記B列 ーー データーフィルターフィルタオプションの設定 条件は(列は例えば、です) E列  F列 日付 サイン ーーー <>1  <--「---」は実際は空白です 結果<-指定したセル範囲に 日付 サイン 2010/6/6 15:22 2010/6/6 15:22 2010/6/6 15:22 2010/6/6 15:38  2010/6/6 15:38 2010/6/6 15:38 2010/6/6 15:39 2010/6/6 15:39 2010/6/6 15:39 2010/6/6 16:05 2010/6/6 16:05 2010/6/6 16:06 2010/6/6 16:06 2010/6/6 16:06

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

> DATE TIMEデータが同一のものが50以上あった場合は > その行を削除する 連続して50以上あったら、51以上の行を削除するということでいいでしょうか? 一例です。 Sub test01()   Dim V, W   Dim i As Long, j As Long, n As Long, x As Long   Dim myStr   V = Range("A1", Cells(Rows.Count, "C").End(xlUp))   ReDim W(1 To UBound(V, 1), 1 To UBound(V, 2))   For i = 1 To UBound(V, 1)     If i > 1 Then       If V(i, 2) & V(i, 3) = V(i - 1, 2) & V(i - 1, 3) Then         x = x + 1       Else         x = 0       End If     End If     If x < 50 Then       n = n + 1       For j = 1 To UBound(V, 2)         W(n, j) = V(i, j)       Next j     End If   Next i   Cells(1, 1).Resize(UBound(W, 1), UBound(W, 2)).Value = W End Sub

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 取り急ぎやってみたので検証はしていません。 参考にならなかったらごめんなさい。 無理矢理って感じになります。 Sub test2() Dim i As Long Columns(1).Insert For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row If WorksheetFunction.CountIf(Range("C:C"), Cells(i, 3)) >= 50 And _ WorksheetFunction.CountIf(Range("D:D"), Cells(i, 4)) >= 50 Then Cells(i, 1) = 1 End If Next i For i = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1 If Cells(i, 1) = 1 Then Rows(i).Delete (xlUp) End If Next i Columns(1).Delete (xlToLeft) End Sub 外していたらごめんなさいね。m(__)m

noname#133407
noname#133407
回答No.1

 左端の行番号をクリックする1行全部が選択されるので、それでいらない行の一番上の行番号をクリックした後、Shiftキーを押しながらいらない行の一番下の行番号クリックすると要らない行が全文選択されると思います。その後、選択されている行番号の上のどこでもいいので右クリックして行の削除で削除できると思います。   ちなみにデータの一番上をクリックしておいた後、ShiftキーとCtrlキーを同時に押しながらキーボードにある下向きの矢印(↓)を押すと、データの一番上から一番下までを一気に選択することが出来ます。 Excelの場合について書きました。ただ、他のソフトでも同じことは出来ると思います。お役に立てたら幸いです。

関連するQ&A