Страницы: 1
RSS
Как избавится от символа - Неявный оператор пересечения "@ "" в формуле после вставки через массив?, Неявный оператор пересечения "@ "" появляется в ячейке в формуле не дает функционировать .
 
Есть формула (Формула № 1) который вставляется в ячейку через массив  так как листов много а он сравнивает данные с первым листом (лист1) по двум значениям и при совпадении вставляет данные с обязательным сохранениям формулу в ячейке , но при вставке формулы в нем образуется символ "@  " этот символ и портит вес функционал. Вот пример вставленной формулу в ячейку

=ЕСЛИОШИБКА(ИНДЕКС(Лист1!E:E;ПОИСКПОЗ('Текущий лист для вставки'!C32 & " " & 'Текущий лист для вставки!D32;@ Лист1!B:B & " " &@ Лист1!C:C;0));"")
а надо так :
=ЕСЛИОШИБКА(ИНДЕКС(Лист1!E:E;ПОИСКПОЗ('Текущий лист для вставки'!C32 & " " & 'Текущий лист для вставки!D32;Лист1!B:B & " " &Лист1!C:C;0));"")

Для справки попробовал не через массив очееееень долго там тоже была такая же ошибка помог исправления .Formula на .Formula2 но в массиве не сработал

Часть кода для выполнении именно этих действии :
Код
Sub bound_data_Ofresorce_to_volume(ws As Worksheet)
    Dim i As Integer
    Dim lastRow As Long
    Dim wsR As Worksheet
    Dim wsV As Worksheet
    Dim lastColumn As Integer
    Dim wsNumber As Integer
    Dim t As String
    Dim arr() As Variant

    ' Отключаем обновление экрана и автоматический пересчет
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    ' Устанавливаем wsR для первого листа
    Set wsR = ThisWorkbook.Worksheets(1)

    ' Находим номер листа ws в книге
    For i = 1 To ThisWorkbook.Worksheets.Count
        If ThisWorkbook.Worksheets(i).Name = ws.Name Then
            wsNumber = i - 1
        End If
    Next i

    ' Устанавливаем wsV для следующего листа
    Set wsV = ThisWorkbook.Worksheets(wsNumber + 1)

    ' Определяем последнюю заполненную строку в столбце C на листе wsV
    lastRow = wsV.Range("C" & Rows.Count).End(xlUp).Row
    
    ' Заполняем массив данными из диапазона A1:GlastRow на листе wsV
    arr = wsV.Range("A1:G" & lastRow).Value2

    ' Находим последний столбец с данными на листе wsR перед строкой, где значение в столбце A равно 1
    For i = 1 To lastRow
        If wsR.Range("A" & i) = 1 Then Exit For
            lastColumn = wsR.Cells(i, Columns.Count).End(xlToLeft).Column
    Next i
    
    ' Заменяем на соответствующий комментарий
    For i = startingPoint To lastRow
        If lastColumn = 6 Then
            arr(i, 7) = "=IFERROR(INDEX('" & wsR.Name & "'!E:E,MATCH('" & wsV.Name & "'!C" & i & " & "" "" & '" & wsV.Name & "'!D" & i & ", '" & wsR.Name & "'!B:B & "" "" & '" & wsR.Name & "'!C:C,0)),"""")"
        ElseIf lastColumn = 7 Then
            arr(i, 7) = "=IFERROR(INDEX('" & wsR.Name & "'!F:F,MATCH('" & wsV.Name & "'!C" & i & " & "" "" & '" & wsV.Name & "'!D" & i & ", '" & wsR.Name & "'!C:C & "" "" & '" & wsR.Name & "'!D:D,0)),"""")"
        End If
    Next i

    ' Записываем данные из массива обратно в диапазон A1:GlastRow на листе wsV
    wsV.Range("A1:G" & lastRow).Value2 = arr

    ' Включаем обновление экрана и автоматический пересчет
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

    ' Устанавливаем время в ячейку K2 на листе ws
    t = "Данные обновлены " & Format(Now, "HH:MM:SS")
    ws.Range("K2") = t
End Sub
Я всех Вас прошу помощи  как избавится от "@  " в формуле почему- то Replace не сработал у меня
 
вместо
Код
wsV.Range("A1:G" & lastRow).Value2 = arr

попробуйте записать так:
Код
wsV.Range("A1:G" & lastRow).Formula = arr

Именно Formula, а не Formula2 и не Value. Это важно. Если формула составлена корректно - то это сработает. Но мне кажется, что у Вас с тексте формулы лишние кавычки. Вот здесь вроде как:
Цитата
MATCH('" & wsV.Name & "'!C" & i & " & "" "" & '" & wsV.Name
Изменено: Дмитрий(The_Prist) Щербаков - 22.04.2024 17:45:22
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Farrukh_111111111, у Вас клавиша 1 залипла? Измените отображаемое имя
Согласие есть продукт при полном непротивлении сторон
 
Дмитрий(The_Prist) Щербаков, К сожалению оба Вашего варианта не сработали
В первом случае: Все еще присутствует "@  " в формуле
Во втором случае : Syntaxix error
Спасибо Вам за внимание
Изменено: Farrukh_111111111 - 23.04.2024 07:00:19
 
Sanja, Исправил пока что не отображается  в сообщения видимо в новых сообщения будет видно  ,на старых все равно стоит старый ник.
Если есть какие то идеи на счет данного вопроса в форуме я с удовольствием прочту.
 
Цитата
Farrukh_Farrukh написал:
Если есть какие то идеи на счет данного вопроса
Меня всегда смущало решение - вставлять Макросом Формулу. Конечно, есть редкие случае, когда такое оправдано, но в большинстве случаев проще все считать макросом, а на лист вставлять значения. Избавитесь от ошибок кавычек как минимум.
Вот такие идеи.
Конкретно в Ваш случай не вникал.
Согласие есть продукт при полном непротивлении сторон
 
Вам наверняка будет уже это неинтересно но я все же хотел довести свой мысль. С помощью этого кода я бы хотел  только изменив данные с  первого листа изменит данные сотни листов в этой же книг совпадающим по двум критериям а формулы нужны чтобы те кто не разбирается в макросах мог легко изменит все данные которые им нужны тем самым избавит их от хлопот и наверняка ошибок по введению одни и тех же данных  в сотни листов.
 
Приложите файл-пример (не надо СОТНИ листов). Как есть - как надо
Согласие есть продукт при полном непротивлении сторон
 
Один результат сделан не через массив на вычисления уходит очень много времени
Второй -пример
Изменено: Farrukh_Farrukh - 23.04.2024 08:03:02
 
Цитата
Farrukh_Farrukh написал:
на вычисления уходит очень много времени
Вы в формулах, в ссылках, используете столбцы целиком (например Лист1!E:E), а в каждом столбце более миллиона строк, хотя на Лист1 используется не больше тысячи. В 10 раз меньше, чем приходится считать формуле! Может начать оптимизацию с этого направления?
Согласие есть продукт при полном непротивлении сторон
 
С этой стороны проблему  еще не рассматривал попробую по Вашем замечаниям исправит.
 
Sanja, Ваши замечания оказались верными и значительно повысили производительность. Я оставил прежний код без массивов. Благодарю вас.
Страницы: 1
Наверх