以下に示すような引数のために、名前のリストがあり、さらに1つの列に数値データが含まれています。
Dave 1
Bob 2
Frank 1
Dennis 3
名前の横にある番号に応じて名前を選択して表示する別のテーブルを別のシートに配置したいと思います。
たとえば、列1
の名前は、以下にリストされているデイブとフランクになります。
これは可能ですか?
以下に示すような引数のために、名前のリストがあり、さらに1つの列に数値データが含まれています。
Dave 1
Bob 2
Frank 1
Dennis 3
名前の横にある番号に応じて名前を選択して表示する別のテーブルを別のシートに配置したいと思います。
たとえば、列1
の名前は、以下にリストされているデイブとフランクになります。
これは可能ですか?
回答:
これは、配列式を使用して実行できます。以下をせよ:
1
、2
、3
、などヘッダーの下1
(A2
)に、次を入力します。
= 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
(列見出しを含む)は、元のデータの数字のリストです。
数式を入力したら、カーソルを数式バーに置き、Ctrl+ Shift+ を押しEnterます。これにより、数式が配列数式として入力されます。数式は、中括弧で囲まれた数式バーに表示されます。
次に、この式を新しいテーブルのすべての列に入力します。次に、表示するすべての名前を取得する必要がある限り、式を記入します。
式の説明:
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
エラーのために。エラーが見つかった場合、式は何も返しません。
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
。
1
、2
と3
、あなたは指定された表の名前とそのテーブルを記入するための方法にしたいですか?