1

Я смотрел на подобные вопросы к этому, но не мог найти точное решение моей проблемы. Если есть дубликат, который может решить эту проблему, я закрою этот вопрос.

В ячейке A1 у меня может быть строка, которая всегда будет состоять из числа, запятой, числа и т.д.

Может быть несколько чисел, всегда разделенных запятой.

Например:

12,12,10,10

или же

12,12,1

В ячейке B1 я хотел бы сложить числа, чтобы получить результат 44 или 25 .

Как мне этого добиться?

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

3 ответа3

2

Это можно сделать с помощью формулы:

=SUMPRODUCT(--TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",99)),(ROW($A$1:INDEX(A:A,LEN(A1)-LEN(SUBSTITUTE(A1,",",""))+1))-1)*99+1,99)))

Это разбивает на части , итерирует части и суммирует их.

1

Я понятия не имею, как начать делать это

  • Откройте файл Excel.
  • Нажмите Alt-F11, откроется окно редактора VBA.
  • Выберите в меню "Вставить модуль", откроются новые окна модуля.
  • Вставьте приведенный ниже код в окно модуля:

    Public Function ParseAndSum(source As String) As Integer
    Dim tmp() As String, i As Integer
    tmp = Split(source, ",")
    For i = LBound(tmp) To UBound(tmp)
        ParseAndSum = ParseAndSum + Val(tmp(i))
    Next i
    End Function
    
  • Закройте редактор VBA.

  • Выберите ячейку назначения (например, B1).
  • Нажмите ручку "функция" (fx), откроется окно "Мастер функций".
  • Выберите категорию "Пользовательские функции", выберите функцию ParseAndSum, нажмите "Далее".
  • Нажмите на ячейку источника (A1), ее адрес вставляется в поле Source.
  • Нажмите ОК.

Это все.

PS. Не забудьте включить выполнение макросов в настройках Excel.

0

Еще один способ сделать это и ответить на него традиционно - использовать команду из "старого" набора макросов Excel 4.

Вы ДОЛЖНЫ использовать эти команды в именованных диапазонах (или макросах тоже, но обычно люди ищут не-макро-решение).

У этого решения есть два аспекта. Во-первых, как сделать основы:

(Ваши данные находятся в ячейке A1, а ваш результат будет в ячейке B1, как и требовалось)

Установите именованный диапазон (может быть назван "Результатом"). Дайте ему формулу:

=EVALUATE(SUBSTITUTE(A1,",","+"))

Затем используйте именованный диапазон в формуле в ячейке B1: = Результат

В формуле SUBSTITUTE() используется "обычно", чтобы заменить запятые для знаков плюс, которые будут необходимы для работы EVALUATE(). EVALUATE() - это макрокоманда Excel 4, которая будет делать именно это: оценивать все, что она может распознать как формулу (поэтому необходимо заменить запятые).

Причина, по которой он должен использоваться в именованном диапазоне, немного загадочна. Они не будут работать напрямую, введенные в ячейки таблицы. Они будут работать в реальных макросах. Таким образом, мысль заключается в том, что именованные диапазоны должны рассматриваться Excel как версия ("облегченная" версия) макросов, работа которых выполняется механизмом макросов, а не механизмом расчета листов.

Второй аспект - как получить формулу для ссылки на «ячейку, расположенную слева от ячейки, в которой я хочу получить результат» ...

Выберите ячейку A2 и введите формулу, как указано выше. Введите формулу (скопируйте и вставьте, введите, как вам нравится) и сохраните ее. Проверьте формулу после того, как установлен Именованный диапазон, и убедитесь, что для ссылки на ячейку нет «$» (вы хотите, чтобы "А1" НЕ представлял собой версию «$ A $ 1»).

Все готово. Теперь в любом месте вашего листа "= Результат" будет ссылаться на ячейку слева от нее. Поэтому скопируйте его вниз в столбец B, или что-то еще, что может быть полезным, и оно будет работать с ячейкой до содержимого слева.

Вы ДОЛЖНЫ сделать вторую часть правильной, но это легко, а?

Выполните поиск макрокоманд в Excel 4, и вы найдете все доступное руководство, что-то около 600 страниц, и там есть некоторые драгоценные камни, хотя некоторые из них были даны нам в новых функциях на протяжении многих лет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .