Excel - Сохранение исходного значения ячейки с помощью функций VLookup и Iferror

Я застрял с формулой Vlookup, с которой я работаю. Мне нужно применить формулу vlookup ко всему столбцу, но здесь есть одна загвоздка - мне нужна формула, чтобы ничего не делать, если она возвращает ошибку. В ячейках есть значения, которые мне нужно сохранить, если Vlookup не работает. Поэтому я не хочу, чтобы "N/A", и я не могу вернуть пустое значение, если оно не было пустым ранее, мне нужно, чтобы оно оставляло исходное значение ячейки или оставляло пустым, если оно ранее было пустым, и Vlookup не работает на этом. Кто-нибудь знает как это сделать?

Вот мой взгляд: VLOOKUP(B8, "Pd Rollers"!$F$9:$J$427,3, ЛОЖЬ)

Я пробовал несколько вариантов этих формул, и мне не повезло заставить его работать должным образом:

= IFERROR (VLOOKUP (B8, 'Pd Rollers'!$F$9:$J$427,3, FALSE), ячейка ("контент"))

IF (ошибка =VLOOKUP(C3, "Pd Rollers"!$F$9:$J$427,4,FALSE),CELL("содержимое"),VLOOKUP(C3, "Pd Rollers"!$F$9:$J$427,4,FALSE))

Любая помощь приветствуется, спасибо!

1 ответ

Вы находитесь на правильном пути с первым примером,=IFERROR(VLOOKUP(B8,'Pd Rollers'!$F$9:$J$427,3,FALSE),cell("content"))(за исключением того, что это должно бытьcontents(множественное число) против.content).

Есть две вещи, которые вы должны сделать, чтобы это заработало. Сначала нужно добавить ссылку наCELL()функция. Предположим, ваша формула находится в A1. Тогда этот компонент будетCELL("contents,А1)`.

Но что заставляет эту работу работать, так это включить итеративные вычисления, чтобы их цикличность не приводила к сбою вычислений и помещению «0» в ячейку. Сделайте это в общих настройках Excel:File|OptionsвыбравFormulasобласти и сразу вверху, справа, поставив галочку напротивEnable iterative calculationа затем установкаMaximum Iterationsдо «1» («1» в частности, а не просто что-то маленькое или близкое... именно «1»).

Тем не менее, вы должны запустить формулу, чтобы она имела приемлемое начальное значение, в противном случае все, что появится при вводе формулы, будет сохраненным значением. Итак, по сути, успешно запустите поиск, а затем отправьте его себе или своим пользователям, чтобы они могли запустить его с любыми необходимыми значениями.

Любой успех будет сохраняться до тех пор, пока новое использование формулы клетки не приведет к новому успеху. Итак, сохраняется до тех пор, пока не будет создано что-то новое, подходящее, которое затем само будет сохраняться до тех пор, пока... и так далее.

(Обратите внимание, что это работает в ВАШЕМ сценарии, в котором у вас есть формула в ячейке, а именно формула поиска. Если у вас было значение (то, что Excel называет «константой»), например «синий», в ячейке, это не формула, она не будет сохраняться в приведенном выше. Но тогда у вас будут компоненты простогоIFFERROR()функция, и нет необходимости преодолевать подобные препятствия, так что это не имеет большого значения.)

Конечно, изменение базовых настроек таким образом довольно важно для большинства людей, и часто можно увидеть обратное изменение, когда вы закончите с забытой электронной таблицей, с сопутствующими эффектами. Я не знаю навскидку, доступен ли этот параметр для изменения через VBA, но если да, то было бы неплохо добавить макрос, который запускается для его установки при открытии файла, и макрос, который запускается для его сброса при закрытии файла. . Если эти макросы доступны для установки, их должно быть очень просто написать. Он может быть даже доступен через средство записи макросов, поэтому не требуется никаких реальных знаний о VBA, предшествующих созданию макросов.On OpenиOn Close.

Протестировал устройство записи макросов, и вот его выходные данные для сброса моих настроек после их изменения, чтобы проверить конечную формулу по сравнению с вашей:

          Sub Macro1()
    '
    ' Macro1 Macro
    '
    
    '
        With Application
            .Iteration = False
            .MaxIterations = 100
        End With
    End Sub

Очевидно, что для его установки будет просто использоватьсяTrueдля.Iterationи1для.MaxIterations.

Другие вопросы по тегам