2016-08-15 8 views
0

Это очень сложно усложнить из-за того, как я ссылался на ячейки моей формулы. Диапазоны первого, второго, третьего и четвертого ссылаются на динамическое расположение ячеек. вот код, с которым я столкнулся.Мне нужно использовать формулу в ячейке, которая является частью цикла for

Dim first As Range 
Dim second As Range 
Dim third As Range 
Dim fourth As Range 
Dim i As Long 
Dim k As Long 

For i = 0 To -170 
For k = 0 To 170 

    Set first = ws.Rows(3 + k).Cells.Find("QQQ").Offset(0 + i, -12) 
    Set second = ws.Rows(3 + k).Cells.Find("QQQ").Offset(0 + i, -11) 
    Set third = ws.Rows(3 + k).Cells.Find("QQQ").Offset(0 + i, -8) 
    Set forth = ws.Rows(3 + k).Cells.Find("QQQ").Offset(0 + i, -7) 

ws.Rows(3 + k).Cells.Find("QQQ").Offset(0, -6).Formula = "=IF(OR(AND(first<(third-0.33),first<>0,first<1.33),AND(second<(forth-0.33),second<>0,second<1.33)),TRUE,FALSE)" 

Next k 
Next i 

Он не приходит с какими-либо ошибками и работает, но формула нигде не найти на рабочем листе. Он предназначен для запуска моей формулы для каждой строки моих данных. Он помещает значение true или false в указанном столбце. Может ли кто-нибудь увидеть, что я сделал что-то неправильно? Благодарю.

вот этот файл. макрос назначается кнопке на рабочем листе Capability Report. имя макроса button_click 7.

https://drive.google.com/open?id=0B-Cnpvgoos3cTzQ4dVRpMHJ1Zjg

макросы не будут работать, поскольку он ссылается на мой диск, но, по крайней мере, вы будете иметь возможность смотреть на отчет.

Редактировать: Это новый код. См. Комментарии ниже, чтобы узнать, что произошло.

Dim first As Range 
Dim second As Range 
Dim third As Range 
Dim fourth As Range 
Dim i As Long 
Dim k As Long 

For i = 0 To 167 

    Set first = ws.Rows(169 - i).Cells.Find("QQQ").Offset(0 + i, -12) 
    Set second = ws.Rows(169 - i).Cells.Find("QQQ").Offset(0 + i, -11) 
    Set third = ws.Rows(169 - i).Cells.Find("QQQ").Offset(0 + i, -8) 
    Set forth = ws.Rows(169 - i).Cells.Find("QQQ").Offset(0 + i, -7) 

ws.Rows(169 - i).Cells.Find("QQQ").Offset(0, -6).Formula = "=IF(OR(AND(" & first.Address & "<(" & third.Address & "-0.33)," & first.Address & "<>0," & first.Address & "<1.33),AND(" & second.Address & "<(" & forth.Address & "-0.33)," & second.Address & "<>0," & second.Address & "<1.33)),TRUE,FALSE)" 

Next i 
+0

Вам не хватает закрывающей круглой скобки для формулы 'IF'. Это работает, если вы добавите это до конца? –

+0

@AlexisOlson не повезло с такими же проблемами – Keizzerweiss

+0

Вы проверили, работает ли эта формула, если она вводится вручную в ячейку? –

ответ

0

Хорошо, поэтому я понял. Выключено мое последнее обновление, нужный код first и код .Address, чтобы сделать слово сначала местоположением, а не текстом. Другая проблема, которую я имел, заключалась в том, что мои формулы, содержащие i, были неправильными. Вот обновленный код.

Dim first As Range 
Dim second As Range 
Dim third As Range 
Dim fourth As Range 
Dim i As Long 
Dim k As Long 

For i = 0 To 167 

    Set first = ws.Rows(169 - i).Cells.Find("QQQ").Offset(0, -12) 
    Set second = ws.Rows(169 - i).Cells.Find("QQQ").Offset(0, -11) 
    Set third = ws.Rows(169 - i).Cells.Find("QQQ").Offset(0, -8) 
    Set forth = ws.Rows(169 - i).Cells.Find("QQQ").Offset(0, -7) 

ws.Rows(169 - i).Cells.Find("QQQ").Offset(0, -6).Formula = "=IF(OR(AND(" & first.Address & "<(" & third.Address & "-0.33)," & first.Address & "<>0," & first.Address & "<1.33),AND(" & second.Address & "<(" & forth.Address & "-0.33)," & second.Address & "<>0," & second.Address & "<1.33)),TRUE,FALSE)" 

Next i 

 Смежные вопросы

  • Нет связанных вопросов^_^