Сумма столбца с некоторыми текстовыми полями - PullRequest
0 голосов
/ 25 октября 2018

Нужно посмотреть, смогу ли я получить СУММУ столбца ввода, включая столбцы с символом, а затем номер.Однако те, которые с символами на самом деле являются текстовыми полями.

2
1
- → 2
3

Есть идеи?Я пробовал несколько разных вещей, включая использование RIGHT, но все равно рассматривает его как текст и не добавляет его.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Попробуйте следующую пользовательскую функцию:

Public Function Zum(rng As Range) As Variant
    Dim r As Range, s As String, L As Long, i As Long
    Dim numbr As String, CH As String

    Zum = 0
    For Each r In rng
        s = r.Text
        If s <> "" Then
            L = Len(s)
            numbr = ""
            For i = 1 To L
                CH = Mid(s, i, 1)
                If CH Like "[0-9]" Or CH = "." Then
                    numbr = numbr & CH
                End If
            Next i
            If numbr <> "" Then
                Zum = Zum + CDbl(numbr)
            End If
        End If
    Next r
End Function

Например:

enter image description here

Это добавит ячейки, но удалитвсе, кроме цифр и десятичной точки из ячеек перед добавлением.

РЕДАКТИРОВАТЬ # 1:

Эта версия кода обрабатывает только вправобольшинство цифр каждой ячейки,

игнорирование алфавитов и десятичной точки:

Public Function Zum(rng As Range) As Variant

'   version #2  only sum the right-most digits and ignore the decimal point


    Dim r As Range, s As String, L As Long, i As Long
    Dim numbr As String, CH As String

    Zum = 0
    For Each r In rng
        s = r.Text
        If s <> "" Then
            L = Len(s)
            numbr = ""
            For i = L To 1 Step -1
                CH = Mid(s, i, 1)
                If CH Like "[0-9]" Then
                    numbr = CH & numbr
                Else
                    Exit For
                End If
            Next i
            If numbr <> "" Then
                Zum = Zum + CDbl(numbr)
            End If
        End If
    Next r
End Function

и, если вам нужна только одна самая правая цифра :

Public Function Zum(rng As Range) As Variant

'   version #3  only sum the right-most digit and ignore the decimal point


    Dim r As Range, s As String, L As Long, i As Long
    Dim numbr As String, CH As String

    Zum = 0
    For Each r In rng
        s = r.Text
        If s <> "" Then
            CH = Right(s, 1)
            If CH Like "[0-9]" Then
                Zum = Zum + CLng(CH)
            End If
        End If
    Next r
End Function
0 голосов
/ 25 октября 2018

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

=IF(MID(A11,3,1)="→", --RIGHT(A11,LEN(A11)-4),A11)

Это может работать более надежно, если только это не более 2 цифр для второго числа =IF(ISERR(SEARCH("→",A1)),A1,--RIGHT(A1,2))

РЕДАКТИРОВАТЬ: Это должно заботиться о ненулевых значениях, но ответ Скотта кажется гораздо ближе к тому, что вы хотели.Я не уверен, как бы вы отредактировали его, чтобы он учитывал пустые ячейки.

=IF(ISNUMBER(A4),A4,IF(MID(A4,3,1)="→", IFERROR(--RIGHT(A4,LEN(A4)-4),"")),"")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...