1

以下に示すように、3 つのグループ (列 B の値「1G、3G、または 5G」で定義) を持つテーブルがあります。

値 1G のすべての時間 (列 A) について、値 3G が 1G から 10 分以内 (列 A に表示) に表示されるかどうかをテストする必要があります。もしそうなら、値 5G が (値 1G の時間の) 20 分以内に表示されるかどうかをテストする必要があります。

したがって、時刻「1G」を読み取り、次に時刻「3G」を読み取り、=< 10 分であれば、時刻「5G」=< 20 分を読み取ります。

'Time'    'Group Name'  'Data'
----------
12:08 am       1G        747
12:45 am       1G        745
1:00 am        1G        746
12:36 am       3G        743
12:45 am       3G        747
1:03 am        3G        74
12:50 am       5G        75
1:00 am        5G        741

フォーマット「時刻」: 2012 年 9 月 25 日午後 8 時 37 分

行ごとにすべてのデータを含む新しいシートに結果を書き込もうとしています。

このサイトや他のサイトで回答を見ましたが、回答が見つかりませんでした。ご協力ありがとうございました。

4

2 に答える 2

2

このマクロは、3G が 10 分以内、5G が 20 分以内のすべての 1G 回線を抽出します。

   Sub Macro2()
Dim lLastRow As Long, shtOrg As Worksheet, shtDest As Worksheet, rgLoop As Range

'turn off updates to speed up code execution
With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
End With

Set shtOrg = ActiveSheet
Set shtDest = Sheets.Add

lLastRow = shtOrg.Cells(Rows.Count, 1).End(xlUp).Row

shtOrg.Range("D2:D" & lLastRow).FormulaR1C1 = _
        "=IF(RC[-2]=""1G"",IF(COUNTIFS(C[-3],"">="" &RC[-3],C[-3],""<=""&RC[-3]+10/1440,C[-2],""3G"")*COUNTIFS(C[-3],"">="" &RC[-3],C[-3],""<=""&RC[-3]+20/1440,C[-2],""5G"")>0,TRUE,""""),"""")"
shtOrg.Range("E2:E" & lLastRow).FormulaR1C1 = _
        "=N(IF(RC[-3]=""3G"",COUNTIFS(C[-1],TRUE,C[-4],""<=""&RC[-4],C[-4],"">=""&RC[-4]-10/1440),IF(RC[-3]=""5G"",COUNTIFS(C[-1],TRUE,C[-4],""<=""&RC[-4],C[-4],"">=""&RC[-4]-20/1440),"""")))>0"

shtOrg.Range("A1:E" & lLastRow).AutoFilter field:=4, Criteria1:="TRUE"

shtOrg.Range("A1:C" & lLastRow).SpecialCells(xlCellTypeVisible).Copy shtDest.Cells(1, 1)

shtOrg.Range("A1:E" & lLastRow).AutoFilter
shtOrg.Range("A1:E" & lLastRow).AutoFilter field:=5, Criteria1:="TRUE"
shtOrg.Range("A2:C" & lLastRow).SpecialCells(xlCellTypeVisible).Copy shtDest.Cells(Rows.Count, 1).End(xlUp).Offset(1)

shtOrg.Columns("D:E").ClearContents
shtOrg.Range("A1:E" & lLastRow).AutoFilter


With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = xlCalculationAutomatic
End With


End Sub
于 2012-10-11T23:14:20.643 に答える
0

データの最初の行に次の数式を入力します (行 2 を想定しています)。

=AND(B2="1G",SUM((B3:$B$8="3G")*(A3:$A$8<=A2+"00:10")*(A3:$A$8>=A2)),SUM((B3:$B$8="5G")*(A3:$A$8<=A2+"00:20")*(A3:$A$8>=A2)))

式の $B$8 と $A$8 をデータの最後の行に変更します。

数式を入力したら、 を押す代わりに をEnter押しCtrl+Shift+Enterます。式の周りに中かっこが表示されます。

数式を下にドラッグします。true と評価されるものはすべて、条件に一致しています。現在の位置より下でしか検索しないため、データを並べ替えるのが最善です。

次に、オートフィルターを使用して関連する行を取得します。私が正しく理解していれば、別のシートでピボットテーブルを使用できますが、それがどのように行われるかわかりません:)

于 2012-10-12T03:46:00.060 に答える