特定の条件を満たすデータのみをExcelで表示する方法


0

以下に示すような引数のために、名前のリストがあり、さらに1つの列に数値データが含まれています。

Dave    1
Bob     2
Frank   1
Dennis  3

名前の横にある番号に応じて名前を選択して表示する別のテーブルを別のシートに配置したいと思います。

たとえば、列1の名前は、以下にリストされているデイブとフランクになります。

これは可能ですか?


スーパーユーザーへようこそ!ただ、要求を明確にするためには、列ヘッダを持つ別のテーブルをしたい123、あなたは指定された表の名前とそのテーブルを記入するための方法にしたいですか?
Excellll

ちょっと、そこ。私の状況は、私の会社では、トレーニングを受けている人々の名前のリストと、それまでに何週間かがあるということです。私は1 2 3および4、および人々がなど週1,2上にあるこれらのヘッダの下に、数週間のヘッダを持つテーブルを持つ別のシートを持つことができるようにしたいのですが
デビッド・H

回答:


1

これは、配列式を使用して実行できます。以下をせよ:

  1. 新しいシートにテーブルをセットアップします。列ヘッダーを作成し123、など
  2. ヘッダーの下1A2)に、次を入力します。

    = IFERROR(INDEX(Sheet1!$ A $ 1:$ A $ 5、SMALL(IF(Sheet1!$ B $ 1:$ B $ 5 = Sheet2!A $ 1、ROW(Sheet1!$ B $ 1:$ B $ 5)))、ROWS( B $ 2:B2))))、 "")

    ここで、Sheet1元のデータを有するシートである、A1:A5(列見出しを含む)は、元のデータの名前のリストであり、B1:B5(列見出しを含む)は、元のデータの数字のリストです。

  3. 数式を入力したら、カーソルを数式バーに置き、Ctrl+ Shift+ を押しEnterます。これにより、数式が配列数式として入力されます。数式は、中括弧で囲まれた数式バーに表示されます。

  4. 次に、この式を新しいテーブルのすべての列に入力します。次に、表示するすべての名前を取得する必要がある限り、式を記入します。

式の説明:

SMALL(IF(Sheet1!$B$1:$B$5=Sheet2!A$1,ROW(Sheet1!$B$1:$B$5)),ROWS(B$2:B2))式の一部は、列ヘッダーで指定された番号に一致するレコードの元のデータを調べます。一致が見つかった場合、各一致の行番号が埋められて返されます。

INDEX(Sheet1!$A$1:$A$5, ...)式の一部は、見つかった行番号から名前を返します。

IFERROR(..., "")一部はで返されているものをチェックINDEXエラーのために。エラーが見つかった場合、式は何も返しません。


1

VBAを使用したソリューションは次のとおりです。

Public Sub columns()
    Dim wks, wks1 As Worksheet
    Set wks = ThisWorkbook.Sheets(1)
    Set wks1 = ThisWorkbook.Sheets(2)
    firstrowsource = 1
    wks1.Application.ScreenUpdating = False
    wks1.Cells.Clear
    Last = wks.Cells(Rows.Count, "A").End(xlUp).Row
    For i = firstrowsource To Last
        Name = wks.Cells(i, 1)
        Position = wks.Cells(i, 2)
        j = 1
        looking = True
            While looking
                If wks1.Cells(j, Position) = "" Then
                    If j <> 1 Then
                        wks1.Cells(j, Position) = Name
                    Else
                        wks1.Cells(j, Position) = Position
                        wks1.Cells(j + 1, Position) = Name
                    End If
                    looking = False
                Else
                    j = j + 1
                End If
            Wend
    Next i
    wks1.Application.ScreenUpdating = True
    Final = MsgBox("Finished", vbInformation)
End Sub

マクロ/ Visual Basicに移動し、ThisWorkbbokの下に新しいモジュールを挿入して、右側にコードを貼り付けます。

ソースワークシートはSheet1、宛先はSheet2であると想定しています。ソースワークシートにタイトルがある場合、variableの値を変更しますfirstrowsource

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.