Рейтинг:
10
Maciej Los
Этот кусок кода никогда не станет правдой:
If Range("AY" & i).Value = "1478" and "1476" Then
Ячейка не может иметь оба значения одновременно! Кстати: почему вы думаете, что это значение основано на строке?
[
Правка#1]
Я бы поменял несколько
If
в
Выберите Дело[
^]:
Select Case Range("AY" & i).Value
Case 1476, 1478
Range("BL" & i).Value = " XYZ "
Case 1589, 1595
Range("BL" & i).Value = "ABC"
Case 484, 1447, 1695
Range("BL" & i).Value = "XZ"
Case 1447
Range("BM" & i).Value = "AZ"
Range("BL" & i).Value = "SPT"
End Select
что эквивалентно:
If Range("AY" & i).Value = 1478 OR Range("AY" & i).Value = 1476 Then
Range("BL" & i).Value = " XYZ "
End If
'and so on...
Вы видите разницу?
[
Правка#2]
Другой способ заключается в использовании
объект Dictionary[
^].
'needs reference to MS Scripting Runtime
Dim myDictionary As Dictionary
Set myDictionary = New Dictionary
With myDictionary
.Add 1476, "XYZ"
.Add 1478, "XYZ"
.Add 1589, "ABC"
.Add 1595, "ABC"
'...
End With
'later...
For i = 2 To LastRow
Range("BL" & i).Value = myDictionary(Range("AY" & i).Value)
Next
GJSS
Здесь я пытаюсь обновить столбец BL со значением "XYZ" на основе столбца AY со значениями 1478 и 1476
Maciej Los
Нет, это не так. Вы проверяете, содержит ли ячейка значение...
GJSS
Да..если значение AY = "1478" и "1476", то я хочу обновить значение столбца BL с помощью "XYZ"
Maciej Los
Как я уже упоминал... ячейка не может иметь одно и то же значение в одно и то же время... Если есть "1478", то как может быть "1476"?
Подумай об этом!
GJSS
Это все значения столбцов, где он имеет несколько значений, но здесь я рассматриваю два значения столбцов, основанных на этих значениях, и пытаюсь обновить столбец по
ДА
147839
147839
147697
147697
147697
Maciej Los
Проверьте обновленные ответ ;)
GJSS
Код с "select case" отработан. Спасибо Мацей
Maciej Los
Всегда пожалуйста.
Richard Deeming
If Range("AY" & i).Value = "1478" and "1476" Then
Это не проверка того, равна ли ячейка двум разным значениям одновременно. Он проверяет, равна ли ячейка первому значению, а второе значение может быть приведено к чему-то похожему
True
, используя "полезное" принуждение типа VB.
If (Range("AY" & i).Value = "1478") and ("1476") Then
:)
Maciej Los
Хорошая мысль, Ричард! Вторая часть If
оператор вычисляется в "что-то похожее True
".
Приведенный ниже код доказывает это:
Dim y As Integer() = {1478, 1476}
For i As Integer = 0 To y.Length-1
Dim result As Boolean = y(i)=1478 And 1476
Console.WriteLine("A statement ({0}=1478 And 1476) evaluates into {1}", y(i), result)
Next
Что ж... Я очень торопился... ;)