1

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 として何も表示されません。 .

4

1 に答える 1

2

私はあなたが上で提供した情報に基づいてこれを行いました。
このコードは、すべての男性 ID とスコアをColums A and Bそれぞれ一時シートにコピーします。

Dim rcount1, rcount2, t as long
Dim sh1, sh2, sh3 as Worksheet
Dim wb as Workbook
Dim score

Set wb = Thisworkbook 'i included wb for flexibility, your call if you want to adopt
Set sh1 = wb.Sheets("Players")
Set sh2 = wb.Sheets("Results")
Set sh3 = wb.Sheets("Temp") 

rcount1 = sh1.Cells(Rows.Count, "A").End(xlUp).Row

For t = 2 to rcount1
    If sh1.Range("B" & t).Value Like "*M*" Then
        'rcount2 should be inside your loop, otherwise you'll only overwrite values
        rcount2 = sh3.Cells(Rows.Count, "A").End(xlUp).Row
        sh1.Range("D" & t).copy sh3.Range("A" & rcount2 + 1)
        'I used Vlookup function instead of nesting another loop
        With Application.WorksheetFunction
            score = .Vlookup(sh1.Range("D" & t).Value, sh2.Columns("A:D"), 4, 0)
            sh3.Range("B" & rcount2 + 1).value = score
        End with
    End if
Next t

End Sub

したがって、このコードは上記の作品の組み合わせのようなものです。
これで始められることを願っています。

このコードは、「プレイヤー」シートと「結果」シートからの情報のみを統合します。
つまり、「Temp」シートに ID が既に存在するかどうかはチェックされません。
また、まとめません。
残りはあなたに任せます。

于 2013-10-27T03:28:57.253 に答える