Я пытаюсь отсортировать некоторую информацию на листе в документе excel в разных группах, используя информацию из другого листа, причем оба листа имеют столбец для их идентификации. В частности, игра проводится мужчинами и женщинами, и я хочу сортировать результаты игры во втором листе на три столбца; в целом, мужчины и женщины, но информация о игроках хранится в первом листе, причем единственной идентифицирующей функцией в листе результатов является их уникальный идентификационный номер, который также находится на первом листе. Поэтому в основном у меня есть два листа, которые выглядят следующим образом:VBA Excel: если оператор не работает
Лист 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
Прямо сейчас я просто пытаюсь заставить его работать так, чтобы все идентификаторы и оценки, обозначенные как мужчина, скопированы на другой лист, для этого у меня есть два разных решения, но ни одна из них не работает.
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
Но здесь все это делает относиться ко всему, как будто они только вписываются в «еще» Так в основном, насколько я могу видеть, что это не видит ничего в B столбца листа 1 как M или F. Любая помощь или предложения будут оценены.
Проверьте, есть ли какие-либо пробелы вокруг ваших гендерных значений, например «M». Если есть, вы можете добавить 'TRIM $()' к вашим тестам. –
Я согласен, ваша логика выглядит хорошо, поэтому, вероятно, это ваше форматирование. Вы можете попробовать использовать подстановочный знак следующим образом: 'Если sh1.Range (" B1 "). Offset (t) .Value Like" * M * "Then' –