Здравствуйте, подскажите пожалуйста, можно ли создать макрос для определенного столбца, по которому будет проводиться проверка на наличие примечания, и, если оно есть, суммировать числа в примечании и выводить сумму в ячейку. Файл прикреплен.
Здравствуйте, подскажите пожалуйста, можно ли создать макрос для определенного столбца, по которому будет проводиться проверка на наличие примечания, и, если оно есть, суммировать числа в примечании и выводить сумму в ячейку. Файл прикреплен.Mikola
Была помнрится, такая UDF для чтения примечаний. А вот дальше начинается какая-то ересь: вынимать из ячеки текстовый список с числовыми значениями - тут уж увольте. Явно неразумный подход к решению проблемы. Если объясните, зачем оно надо, наверняка найдётся иное более простое и эффективное решение. Может и VBA не понадобится.
Была помнрится, такая UDF для чтения примечаний. А вот дальше начинается какая-то ересь: вынимать из ячеки текстовый список с числовыми значениями - тут уж увольте. Явно неразумный подход к решению проблемы. Если объясните, зачем оно надо, наверняка найдётся иное более простое и эффективное решение. Может и VBA не понадобится.Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Среда, 04.06.2014, 19:31
Я писАл UDF для извлечения массива целых чисел из ячеек со смесью текста с цифрами
[vba]
Код
Function ИЗВЛЕЧЬ_ЦЕЛЫЕ(ParamArray Диапазон()) '--------------------------------------------------------------------------------------- ' Author : Alex_ST, v__step, nerv ' URL : http://www.excelworld.ru/forum/3-1012-97065-16-1401961860 ' Topic : Функция (UDF) "ИЗВЛЕЧЬ_ЦЕЛЫЕ" ' Purpose : Создать массив из целых чисел, извлечённых из текста произвольно расположенных ячеек ' Notes : К полученному массиву можно применять любые стандартные формулы листа '--------------------------------------------------------------------------------------- Dim rArea, rCell, sStr$, oMatches, i&, Arr() On Error GoTo xlErrEXIT For Each rArea In Диапазон For Each rCell In IIf(rArea.Count = 1, Array(rArea.Value), rArea.Value) sStr = sStr & " " & rCell Next rCell Next rArea With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "\d+": Set oMatches = .Execute(sStr): End With If oMatches.Count = 0 Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrNA): Exit Function ' вернуть ошибку #Н/Д если чисел нет ' If oMatches Is Nothing Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrNA): Exit Function ' вернуть ошибку #Н/Д если чисел нет ReDim Arr(1 To oMatches.Count) For i = 0 To oMatches.Count - 1: Arr(i + 1) = CLng(oMatches(i).Value): Next i ИЗВЛЕЧЬ_ЦЕЛЫЕ = Arr xlErrEXIT: If Err Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrValue) ' вернуть ошибку #ЗНАЧ! если была ошибка End Function
[/vba]
UDF описана ЗДЕСЬ А вот такой UDF можно в ячейку вывести текст примечания:
[vba]
Код
Function ПРИМЕЧАНИЕ$(ЯЧЕЙКА As Range) ' Вывести в ячейку текст примечания из ячейки-аргумента If Not ЯЧЕЙКА.Comment Is Nothing Then ПРИМЕЧАНИЕ = ЯЧЕЙКА.Comment.Text End Function
[/vba]
Аналогичный принцип можно было бы применить и к тексту в примечаниях, конечно, но Формуляр прав - тут, наверное, имеет смысл об оптимизации представления данных подумать.
Я писАл UDF для извлечения массива целых чисел из ячеек со смесью текста с цифрами
[vba]
Код
Function ИЗВЛЕЧЬ_ЦЕЛЫЕ(ParamArray Диапазон()) '--------------------------------------------------------------------------------------- ' Author : Alex_ST, v__step, nerv ' URL : http://www.excelworld.ru/forum/3-1012-97065-16-1401961860 ' Topic : Функция (UDF) "ИЗВЛЕЧЬ_ЦЕЛЫЕ" ' Purpose : Создать массив из целых чисел, извлечённых из текста произвольно расположенных ячеек ' Notes : К полученному массиву можно применять любые стандартные формулы листа '--------------------------------------------------------------------------------------- Dim rArea, rCell, sStr$, oMatches, i&, Arr() On Error GoTo xlErrEXIT For Each rArea In Диапазон For Each rCell In IIf(rArea.Count = 1, Array(rArea.Value), rArea.Value) sStr = sStr & " " & rCell Next rCell Next rArea With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "\d+": Set oMatches = .Execute(sStr): End With If oMatches.Count = 0 Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrNA): Exit Function ' вернуть ошибку #Н/Д если чисел нет ' If oMatches Is Nothing Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrNA): Exit Function ' вернуть ошибку #Н/Д если чисел нет ReDim Arr(1 To oMatches.Count) For i = 0 To oMatches.Count - 1: Arr(i + 1) = CLng(oMatches(i).Value): Next i ИЗВЛЕЧЬ_ЦЕЛЫЕ = Arr xlErrEXIT: If Err Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrValue) ' вернуть ошибку #ЗНАЧ! если была ошибка End Function
[/vba]
UDF описана ЗДЕСЬ А вот такой UDF можно в ячейку вывести текст примечания:
[vba]
Код
Function ПРИМЕЧАНИЕ$(ЯЧЕЙКА As Range) ' Вывести в ячейку текст примечания из ячейки-аргумента If Not ЯЧЕЙКА.Comment Is Nothing Then ПРИМЕЧАНИЕ = ЯЧЕЙКА.Comment.Text End Function
[/vba]
Аналогичный принцип можно было бы применить и к тексту в примечаниях, конечно, но Формуляр прав - тут, наверное, имеет смысл об оптимизации представления данных подумать.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Четверг, 05.06.2014, 13:55
Если объясните, зачем оно надо, наверняка найдётся иное более простое и эффективное решение.
Есть файл в котором находится огромное количество таких ячеек с примечаниями, что не имеет смысла в ручном пересчете, но необходимо знать сумму каждой отдельной ячейки и сумму определенных диапазонов. Файл был приложен в качестве примера.
Если объясните, зачем оно надо, наверняка найдётся иное более простое и эффективное решение.
Есть файл в котором находится огромное количество таких ячеек с примечаниями, что не имеет смысла в ручном пересчете, но необходимо знать сумму каждой отдельной ячейки и сумму определенных диапазонов. Файл был приложен в качестве примера.
Ну, если речь идёт о том, чтобы 1 раз преобразовать данные в удобоваримый вид, используем последовательно обе предложенные функции. Потом сохраняем результат как значения. И больше так не делаем.
Ну, если речь идёт о том, чтобы 1 раз преобразовать данные в удобоваримый вид, используем последовательно обе предложенные функции. Потом сохраняем результат как значения. И больше так не делаем. Формуляр