Как найти общее количество значений в диапазоне чисел в конкретной ячейке? - PullRequest
0 голосов
/ 20 февраля 2012

Например:

СТОЛБЦ ДАННЫХ: 23–26, 40, 22, 7, 27–28, 49, 50–51, 48, 136, 169, 190–192, 17 TO22 И NIL

* включает в себя отдельные числа, диапазон номеров и слово.

У меня есть эти данные, как показано выше в каждой отдельной ячейке, как мне придумать формулу, которая суммируетвсе общее число значений?

Мне нужно обновить данные.

В настоящее время я использую формулу, предоставленную Джерри Бокером :

=ROWS(INDIRECT(SUBSTITUTE(SUBSTITUTE(A1," - ",":")," TO ", ":")))

Спасибо!

Ответы [ 3 ]

2 голосов
/ 20 февраля 2012

Попробуйте эту формулу на основе JMAX's подхода

=SUM(IF(ISERR(FIND("TO",A1:A6)),ISNUMBER(A1:A6)+0,MID(A1:A6,FIND("TO",A1:A6)+2,9)-LEFT(A1:A6,FIND("TO",A1:A6)-1)+1))

подтверждено CTRL+SHIFT+ENTER

предполагает разделитель "TO" в соответствии с вашими примерами

Пересмотренный подход:

FIND чувствителен к регистру, SEARCH - нет, поэтому для разрешения «TO» или «to» вы можете изменить все вхождения FIND на SEARCH. Следовательно, следующая версия будет работать с любой из этих пустых ячеек, ячеек с «Nil», ячеек с записями, таких как 23, 24, 27 (считается как 3) или 11 & 99 (считаются как 2), или ячеек с одним числом как 33 (считается 1)

=SUM(IF(ISERR(SEARCH("TO",A1:A6)),IF((A1:A6="Nil")+(A1:A6=""),0,LEN(A1:A6)-LEN(SUBSTITUTE(SUBSTITUTE(A1:A6,",",""),"&",""))+1),MID(A1:A6,SEARCH("TO",A1:A6)+2,9)-LEFT(A1:A6,SEARCH("TO",A1:A6)-1)+1))

Редакция № 2

Предполагая данные в A1: A22

=SUM(IF(ISNUMBER(LEFT(A1:A22)+0),IF(ISNUMBER(SEARCH("to",A1:A22)),MID(A1:A22,SEARCH("TO",A1:A22)+2,9)-LEFT(A1:A22,SEARCH("TO",A1:A22)-1)+1,LEN(A1:A22)-LEN(SUBSTITUTE(SUBSTITUTE(A1:A22,",",""),"&",""))+1)))

0 голосов
/ 20 февраля 2012

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

Как установить пользовательскую функцию:

  1. Откройте вашу рабочую книгу
  2. Получить в VB Editor (Нажмите Alt + F11)
  3. Вставить новый модуль (Вставить> Модуль)
  4. Скопируйте и вставьте в свой код (указано ниже)
  5. Выйти из VBA (Нажмите Alt + Q)
  6. Сохранить как книгу с макросами

Функция установлена ​​и готова к использованию.

Вот код UDF для новой функции с именем USERCOUNT () *

Option Explicit

Function USERCOUNT(RNG As Range) As Long
Dim cell As Range, Cnt As Long, c As Long, buf As String

    For Each cell In RNG
        If IsNumeric(cell) And cell > 0 Then
            Cnt = Cnt + 1
        ElseIf InStr(1, cell, ",") > 0 Or InStr(1, cell, "&") > 0 Then
            Cnt = Cnt + (Len(cell) - Len(Replace(Replace(cell, ",", ""), "&", "")) + 1)
        ElseIf InStr(1, cell, " TO ") > 0 Or InStr(1, cell, " - ") > 0 Then
            buf = Replace(Replace(cell, " TO ", ":"), " - ", ":")
            Cnt = Cnt + Rows(buf).Rows.Count
            buf = ""
        End If
    Next cell

    USERCOUNT = Cnt

End Function

Это просто используется в ячейке как обычная функция, ссылающаяся на диапазон ячейки:

USERCOUNT.JPG

0 голосов
/ 20 февраля 2012

Если вы хотите использовать только одну ячейку для вычисления всех результатов, вы можете использовать эту (основываясь на моем решении, потому что INDIRECT не будет работать там):

=SUMPRODUCT(IF(ISERR(FIND("-",A1:A6)),
MID(A1:A6,FIND("TO",A1:A6)+2,LEN(A1:A6))*1-LEFT(A1:A6,FIND("TO",A1:A6)-1)*1+1,
MID(A1:A6,FIND("-",A1:A6)+1,LEN(A1:A6))*1-LEFT(A1:A6,FIND("-",A1:A6)-1)*1+1)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...