Есть книга, в ней записан макрос с формулой, этот макрос вставляет формулу в ячейку (допустим A10). Внимание вопрос: как изменить код, чтобы в ячейку вносились только вычисления, а не сама формула.
[vba]
Код
Range("A10").FormulaLocal = "=ИНДЕКС('[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$A$4:$R$237;ПОИСКПОЗ(O12;'[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$R$4:$R$237;0);4)"
[/vba]
Есть книга, в ней записан макрос с формулой, этот макрос вставляет формулу в ячейку (допустим A10). Внимание вопрос: как изменить код, чтобы в ячейку вносились только вычисления, а не сама формула.
[vba]
Код
Range("A10").FormulaLocal = "=ИНДЕКС('[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$A$4:$R$237;ПОИСКПОЗ(O12;'[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$R$4:$R$237;0);4)"
Не успел разобраться с тем как предложил сделать Serge_007, сделал по примеру с темы Макрос Replace_by_VAL - заменить формулы на значения. Получилось может и не красиво но работает.
[vba]
Код
Range("I10").FormulaLocal = "=ИНДЕКС('[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$A$4:$R$237;ПОИСКПОЗ(O12;'[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$R$4:$R$237;0);4)" Range("B29").FormulaLocal = "=ИНДЕКС('[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$A$4:$R$237;ПОИСКПОЗ(I29;'[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$E$4:$E$237;0);7)" On Error GoTo A ACal = Application.Calculation Application.Calculation = xlCalculationManual With ActiveWindow.RangeSelection.SpecialCells(xlCellTypeVisible) If .Count = 1 Then [A10:AA57].Select
End If End With Selection.Value = Selection.Value A: Application.Calculation = ACal
[/vba]
Не успел разобраться с тем как предложил сделать Serge_007, сделал по примеру с темы Макрос Replace_by_VAL - заменить формулы на значения. Получилось может и не красиво но работает.
[vba]
Код
Range("I10").FormulaLocal = "=ИНДЕКС('[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$A$4:$R$237;ПОИСКПОЗ(O12;'[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$R$4:$R$237;0);4)" Range("B29").FormulaLocal = "=ИНДЕКС('[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$A$4:$R$237;ПОИСКПОЗ(I29;'[Главный журнал КИП ЦЭС-2.xlsx]Установочные места счетчики'!$E$4:$E$237;0);7)" On Error GoTo A ACal = Application.Calculation Application.Calculation = xlCalculationManual With ActiveWindow.RangeSelection.SpecialCells(xlCellTypeVisible) If .Count = 1 Then [A10:AA57].Select
End If End With Selection.Value = Selection.Value A: Application.Calculation = ACal
Не успел разобраться с тем как предложил сделать Serge_007
Ага, мой способ гораздо сложней
Вот код с комментариями: [vba]
Код
Sub danilka51() Dim funcsRes 'объявляем переменную funcsRes = WorksheetFunction.Sum(Range("a1:a9")) 'в переменную записываем результат работы функции листа Range("A10") = funcsRes 'в указанную ячейку заносим значение переменной End Sub
[/vba]
Цитата (danilka51)
Не успел разобраться с тем как предложил сделать Serge_007
Ага, мой способ гораздо сложней
Вот код с комментариями: [vba]
Код
Sub danilka51() Dim funcsRes 'объявляем переменную funcsRes = WorksheetFunction.Sum(Range("a1:a9")) 'в переменную записываем результат работы функции листа Range("A10") = funcsRes 'в указанную ячейку заносим значение переменной End Sub
Я бы не парился. Занёс кодом формулы в эти две ячейки, они пересчитались (или насильно пересчитал, если пересчёт в ручном режиме), затем заменил на значения. Примерно как во втором Вашем коде, но убиваем формулы так: [vba]
Я бы не парился. Занёс кодом формулы в эти две ячейки, они пересчитались (или насильно пересчитал, если пересчёт в ручном режиме), затем заменил на значения. Примерно как во втором Вашем коде, но убиваем формулы так: [vba]
А на листе если такую же формулу ввести что получится?
так ActiveCell.FormulaR1C1 = "=INDEX(CMO_приборы1!R[-9]C[-1]:R[72]C[10],MATCH(R[4]C,CMO_приборы1!R[-9]C[3]:R[251]C[3],0),3)" все получается, а так Index(("A2:L200"), Match("N16", ("E2:E200"), 0), 3) встает на , перед Match.
Цитата (Serge_007)
А на листе если такую же формулу ввести что получится?
так ActiveCell.FormulaR1C1 = "=INDEX(CMO_приборы1!R[-9]C[-1]:R[72]C[10],MATCH(R[4]C,CMO_приборы1!R[-9]C[3]:R[251]C[3],0),3)" все получается, а так Index(("A2:L200"), Match("N16", ("E2:E200"), 0), 3) встает на , перед Match.danilka51
Ладно, уже не важно. Раз есть файл, то всё гораздо проще. Вот так будет работат: [vba]
Код
Sub Макрос1() Dim FR as String FR = WorksheetFunction.Index(Range("A2:L200"), WorksheetFunction.Match(Range("N16"), Range("E2:E200"), 0), 3) Range("N15") = FR End Sub
[/vba]
Я спрашивал про формулу в Excel, на листе
Ладно, уже не важно. Раз есть файл, то всё гораздо проще. Вот так будет работат: [vba]
Код
Sub Макрос1() Dim FR as String FR = WorksheetFunction.Index(Range("A2:L200"), WorksheetFunction.Match(Range("N16"), Range("E2:E200"), 0), 3) Range("N15") = FR End Sub