web-dev-qa-db-ja.com

最初に発生した番号の行インデックスを見つける

次のようなランダムな順序の値を持つA列があります

       A column
           2
           3
           4
           2
           5
           6
           4
           3
           4

最初に発生した特定の番号の行インデックスが必要です。私が数が4だと言うなら、返される値は3でなければなりません

また、最後に発生した特定の番号の行インデックスが必要です。たとえば、番号が3だとすると、返される値は8でなければなりません

私はVlookupまたはfind関数がタスクを実行する必要があると考えていましたが、それらを整理することはできません。これらを手伝ってください

19
niko

私の例では、3しかし、適応するのは簡単です。

最初の発生を見つけるには、次を使用できます。

=MATCH(3,A:A,0)

最後のものを見つけるには、配列式を使用できます( Ctrl+Shift+Enter

{=MAX(IF(A1:A10=3,ROW(A1:A10),0))}

MINを使用して最初の配列式に配列式を使用することもできますが、その価値は非常に複雑になることに注意してください。

41
JMax

こんにちは、マクロを使用してこれを行うことができます

次のコードを使用してください

Sub FindNumbers()

    Sheet1.Range("B:D") = ""
    Application.ScreenUpdating = False
    tot = Sheet1.Range("A1048575").End(xlUp).Row
    i = 1
    k = 1
    m = 1
    n = 1
    o = 1
    p = 1

    For i = 1 To tot
            c = Application.WorksheetFunction.CountIf(Sheet1.Range("B:B"), Sheet1.Range("A" & i).Value)
            If c <= 0 Then
            Sheet1.Range("B" & k).Value = Sheet1.Range("A" & i).Value
            k = k + 1
            End If
    Next

    tots = Sheet1.Range("B1048575").End(xlUp).Row

    For m = 1 To tots
        For n = 1 To tot
            If Sheet1.Range("B" & m).Value = Sheet1.Range("A" & n).Value Then
            Sheet1.Range("D" & m).Value = n
            End If
        Next
    Next

    For o = 1 To tots
        For p = 1 To tot
            If Sheet1.Range("B" & o).Value = Sheet1.Range("A" & p).Value Then
            Sheet1.Range("C" & o).Value = p
            p = tot
            End If
        Next
    Next

    Application.ScreenUpdating = True

End Sub

コードの使用方法(マクロが初めての場合)

  1. 新しいExcelファイルを開く

  2. Alt + F11を押します

  3. 新しいモジュールを挿入する

  4. モジュールにコードを貼り付けます

  5. Excelシートに戻り、ボタンを追加します

  6. マクロ「FindNumbers」をボタンに割り当てます

  7. Excel 2007または2010を使用している場合は、Excelを.xlsm形式で保存します

  8. 助けて

  9. 列A:列Aにデータを入力し、ボタンをクリックするか、マクロを実行します

  10. ボタンを押すか、マクロを実行します

結果は次のようになります

列B:列Aに入力されたデータで一意の番号

列C:データの最初の出現

列D:データの最後の出現

2
Kannan Suresh