Excel ドキュメントのシートの情報を、別のシートの情報を使用して別のグループに並べ替えようとしています。両方のシートにそれらを識別する列があります。具体的には、ゲームが男性と女性によってプレイされており、2 番目のシートのゲームの結果を 3 つの列に並べ替えたいと考えています。全体として、男性と女性ですが、プレーヤーの情報は最初のシートに保持され、結果シートの唯一の識別機能は、最初のシートにもある一意の ID 番号です。したがって、基本的には次のような2つのシートがあります。
シート 1:
A | B | C | D
Name | Gender| | ID
Alex | M | | 171
Alexis | F | | 172
Kelly | F | | 177
Chris | M | | 179
シート 2:
A | B | C | D
ID | | | Score
171 | | | 58.2
172 | | | 67.1
177 | | | 73.4
179 | | | 68.95
現在、男性として識別されたすべての ID とスコアが別のシートにコピーされるように機能させようとしています。これには 2 つの異なるソリューションがありますが、どちらも機能しません。
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim lc1, lc2, x, y, i, vLook, z
Set sh1 = Sheets("players")
Set sh2 = Sheets("Results")
Set sh3 = Sheets("temp")
rcount1 = sh1.Cells(Rows.Count, "A").End(xlUp).Row
rcount2 = sh2.Cells(Rows.Count, "A").End(xlUp).Row
x = 2
y = 2
z = 2
Dim t As Integer
Dim k As Integer
k = 1
t = 1
For t = 1 To rcount2
If sh2.Range("A1").Offset(t).Value = sh1.Range("D1").Offset(t).Value Then
If sh1.Range("B1").Offset(t).Value = "M" Then
sh3.Range("A1").Offset(k).Value = sh2.Range("A1").Offset(t).Value
sh3.Range("B1").Offset(k).Value = sh2.Range("D1").Offset(t).Value
k = k + 1
End If
End If
Next t
「if」ステートメントを削除すると、範囲がコピーされますが、「if」ステートメントでは何もしません。
私の他の解決策はこれです:
For i = 2 To rcount2
vLook = Application.WorksheetFunction.VLookup(sh1.Cells(i, 4), Range(sh2.Cells(1, 1), sh2.Cells(rcount2, 4)), 4, "false")
If sh1.Cells(i, 2) = "M" Then
sh3.Cells(x, 1) = sh1.Cells(i, 4)
sh3.Cells(x, 2) = vLook
x = x + 1
ElseIf sh1.Cells(i, 2) = "F" Then
sh3.Cells(y, 3) = sh1.Cells(i, 4)
sh3.Cells(y, 4) = vLook
y = y + 1
Else
sh3.Cells(z, 5) = sh1.Cells(i, 4)
sh3.Cells(z, 6) = vLook
z = z + 1
End If
Next i
しかし、ここでは、すべてが「else」にのみ適合するかのようにすべてを処理するだけなので、基本的に私が見る限り、シート 1 の B 列には M または F として何も表示されません。 .