Формулы в Екселе и 1С

  • Автор темы Автор темы ech
  • Дата начала Дата начала
ТоварЯчейки = ВходExcel.ActiveWorkbook.activesheet.cells(Сред(ПереборЯчеек,2,Найти(ПереборЯчее
к,",")),Лев(ПереборЯчеек,1)).Value;//строка откусывается с второго символа по запятую, столбец - первый символ строки

Тут ошибку выкидывает без описания :blink: !!

А сам код делает как пирамиду, берет C11,C13,C32,C197) и разбивает:
C11,C13,C32,C197)
C13,C32,C197)
C32,C197)
C197)

В итоге имеем тока последнюю ячейку. Да и еще в конце почему то не убирается скобка ")"

Дело в том, что у меня тут я заметил ячейки есть хитрые, некоторые имею вот такой вид

=SUM(C436*4+C448*3+C447,C432,C450) вот как их обработать?? как можно сделать позиционирование на этой ячейке C436*4+C448*3+C447?? или тоже разбивать, гиммор какойто, может есть другой способ??
 
ну скобка последняя это просто вместо
ПерваяЯчейка = Сред(Товар,Найти(Товар,"(")+1,Найти(Товар,")"));

поставь ПерваяЯчейка = Сред(Товар,Найти(Товар,"(")+1,Найти(Товар,")")-1);

а насчет плюсов и умножений.....

может есть какой экселевский оператор, вытаскивающий номера ячеек... Но я такого не знаю.

ПРинимая во внимание, что у тебя все вычисления идут в колонке c - то есть в третьей скорее надо так

ПерваяЯчейка = Сред(Товар,Найти(Товар,"(")+1,Найти(Товар,")")-1);//выделил диапозон адресов, должно быть что-то типа "C11,C13,C32,C197" - если нет, дальше не сработает
Сообщить(перваяЯчейка);
ПереборЯчеек = Строка(ПерваяЯчейка);//присвоение отдельной переменной строки с полями через запятую для откусывания в цикле
Пока Найти(ПереборЯчеек,"С")>0 Цикл//Цикл кусания переборячеек по С
ПереборЯчеек = Сред(ПереборЯчеек,Найти("C")+1);//откусывание до первой буквы С включительно, так как мы знаем что все числа в третей колонке
СимволовВЯчейке = Мин(Найти(ПереборЯчеек,","),Найти(ПереборЯчеек,"+"),Найти(ПереборЯчеек,"*"));// Надеюсь синусов, косинусов у тебя там нет ;-)
ЗначениеСтроки = Лев(ПереборЯчеек,СимволовВЯчейке-1);
Сообщить(ЗначениеСтроки);//проверка корректно ли вышел номер строки
ТоварЯчейки = ВходExcel.ActiveWorkbook.activesheet.cells(ЗначениеСтроки,3).Value;
Сообщить(ТоварЯчейки);//проверка поймал-ли. Можешь добавить вывод столбца и ячейки для проверки

Сообщить(ПереборЯчеек);//показать, что осталось
КонецЦИкла;
 
поробывал итог:

сообщить работает тока тут Сообщить(перваяЯчейка);
остальные не отрабатывают!!

ПереборЯчеек = Сред(ПереборЯчеек,Найти("C")+1); Вот тут я так написал ибо ошибку выдавало (может я неправильно тоже написал)
ПереборЯчеек = Сред(ПереборЯчеек,Найти(ПереборЯчеек,"C")+1);

и еще заметил, если "С" везде ставить английскую то тут снова ошибку выбивает ТоварЯчейки = ВходExcel.ActiveWorkbook.activesheet.cells(ЗначениеСтроки,3).Value;, если русскую то как писал выше нифига не происходит, кроме отработки
перваяЯчейка
 
Значи везде надо англицкую А на Сообщить(ЗначениеСтроки); что говорит? Корректно? должен выдавать номер строки в формуле.
 
Ну во всех Найти где С - русская, поставить С-английская.
До того как вызывается
оварЯчейки = ВходExcel.ActiveWorkbook.activesheet.cells(ЗначениеСтроки,3).Value;
есть строчка

Сообщить(ЗначениеСтроки);//проверка корректно ли вышел номер строки

что она показывает? может её надо в число преобразовать, а то по умолчанию-то строка.
 
Ну во всех Найти где С - русская, поставить С-английская.
До того как вызывается
оварЯчейки = ВходExcel.ActiveWorkbook.activesheet.cells(ЗначениеСтроки,3).Value;
есть строчка

Сообщить(ЗначениеСтроки);//проверка корректно ли вышел номер строки

что она показывает? может её надо в число преобразовать, а то по умолчанию-то строка.

Если все С английские сразу выбивает ошибку

ТоварЯчейки = ВходExcel.ActiveWorkbook.activesheet.cells(ЗначениеСтроки,3).Value;
{C:\DOCUMENTS AND SETTINGS\IVAN\РАБОЧИЙ СТОЛ\IVAN\ОТЧЕТЫ_СТИМАКС\ОБРАБОТКА_МОДУЛИ.ERT(49)}: :

Знач надо русские писать походу
 
ЗначениеСтроки чему при этом равно?

А если С не анлийские, то он вообще в цикл не поадает.
 
ЗначениеСтроки чему при этом равно?

А если С не анлийские, то он вообще в цикл не поадает.

Ничему...оно не выводит ниче, не доходит до это строки

Если С руские то попадает и выдает тока Сообщить(ПереборЯчеек); до остального не доходит

Если Найти(Товар,"SUM")> 0 Тогда
ПерваяЯчейка = Сред(Товар,Найти(Товар,"(")+1,Найти(Товар,")")-6);
Сообщить(перваяЯчейка);
ПереборЯчеек = ПерваяЯчейка;
Пока Найти(ПереборЯчеек,"C")>0 Цикл
ПереборЯчеек = Сред(ПереборЯчеек,Найти(ПереборЯчеек,"C")+1);
Сообщить(ПереборЯчеек);
СимволовВЯчейке = Мин(Найти(ПереборЯчеек,","),Найти(ПереборЯчеек,"+"),Найти(ПереборЯчеек,"*"));
Сообщить(СимволовВЯчейке);
ЗначениеСтроки = Лев(ПереборЯчеек,СимволовВЯчейке-1);
Сообщить(ЗначениеСтроки);
ТоварЯчейки = ВходExcel.ActiveWorkbook.activesheet.cells(ЗначениеСтроки,3).Value;


Тут "С" английские
Сообщить(перваяЯчейка);
Результат: С11,C13,C32,C197
Сообщить(ПереборЯчеек);
Результат:
11,C13,C32,C197
13,C32,C197
32,C197
197
Сообщить(СимволовВЯчейке);
Результат:
0
Сообщить(ЗначениеСтроки);
Результат:
436
Сообщить(ТоварЯчейки);
Результат:
Ошибка.


Что изменил:

ПереборЯчеек = Строка(ПерваяЯчейка);
на
ПереборЯчеек = ПерваяЯчейка;


ПереборЯчеек = Сред(ПереборЯчеек,Найти("C")+1);

на

ПереборЯчеек = Сред(ПереборЯчеек,Найти(ПереборЯчеек,"C")+1);
 
Ну если следовать логике перебора то значение строки должно выдавать
11
13
32
197

Насчет того что оно до него не доходит ты загнул - ошибка выскакивает на строке позже Сообщить(ЗначениеСтроки)

Блин понял - СимволовВЯчейке = Мин(Найти(ПереборЯчеек,","),Найти(ПереборЯчеек,"+"),Найти(ПереборЯчеек,"*")); если хоть одного символа нет, то получается что минимум ноль, вот и косячит.
ТОгда заместо СимволовВЯчейке = Мин(Найти(ПереборЯчеек,","),Найти(ПереборЯчеек,"+"),Найти(ПереборЯчеек,"*"));
СимволовВЯчейке = Мин((?Найти(ПереборЯчеек,",")=0,СтрДлина(переборЯчеек),Найти(ПереборЯчеек,",")),(?Найти(ПереборЯчеек,"+")=0,СтрДлина(переборЯчеек),Найти(ПереборЯчеек,"+")),(?Найти(ПереборЯчеек,"*")=0,СтрДлина(переборЯчеек),Найти(ПереборЯчеек,"*")));// если не находит сивол, счтает что значение оставшаяся длина строки
 
Ура работает, но небольшой глюк,

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

Вообщем обрезает таким макаром:

Если =SUM(C11,C13,C32,C197), то выдает
11
13
32
19

Если =SUM(C11*4,C30*2,C31*2,C27*2) тогда
11
30
31
27

Все гуд если есть еще один символ, в данном случае *2
 
ТОгда заместо ЗначениеСтроки = Лев(ПереборЯчеек,СимволовВЯчейке-1)

Если СтрДлина(переборЯчеек) = СимволовВЯчейке ТОгда
ЗначениеСтроки = ПереборЯчеек;
Иначе
ЗначениеСтроки = Лев(ПереборЯчеек,СимволовВЯчейке-1);
КонецЕСли;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!