【最大10000ポイント】当たる!!質問投稿キャンペーン!

急ぎ教えていただきたいのですが、
下記のデータの中からDATE TIMEデータが同一のものが50以上あった場合は
その行を削除するという条件付関数かマクロが組めないかいろいろと試行錯誤
していますが、できなくて困っています。

A列 B列 C列
EVENTDATE TIME
12010/6/615:22
22010/6/615:25
32010/6/615:36
42010/6/615:38  ・・・・これらが50以上続く場合削除
52010/6/615:38  ・・・・〃
62010/6/615:39
72010/6/615:39
82010/6/616:05
92010/6/616:05
102010/6/712:02
112010/6/713:43
122010/6/713:59
132010/6/713:59
142010/6/713:59
152010/6/717:06
162010/6/721:26

データが16000件くらいあるものもあり、手作業ではとても
大変で困っています。アドバイスをお願い致します。

A 回答 (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のある行は上部に並べられますのでそれらの行を選択して削除すればよいでしょう。
    • good
    • 0

行削除でエクセル関数に言及するのは、関数を良くわかって無い証拠。


関数は「セルの値」を決めルことは出来るが、それ以外の書式、行削除やシート・セルの情況は変えられないのは常識。
ーー
ただし日付時刻順に並べて、上の行から数えて、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:221
2010/6/6 15:221
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:391
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:061
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
    • good
    • 0

> 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
    • good
    • 0

こんばんは!


取り急ぎやってみたので検証はしていません。
参考にならなかったらごめんなさい。

無理矢理って感じになります。

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
    • good
    • 0

 左端の行番号をクリックする1行全部が選択されるので、それでいらない行の一番上の行番号をクリックした後、Shiftキーを押しながらいらない行の一番下の行番号クリックすると要らない行が全文選択されると思います。

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

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


人気Q&Aランキング