Как сложить первую цифру серии чисел

Я нахожу этот способ более читабельным:

$result = $mysqli->query('select count(*) as `c` from `table`');
$count = $result->fetch_object()->c;
$result->free();
$mysqli->close();
echo "there are {$count} rows in the table";

Не то, чтобы у меня что-то против массивов ...

3
задан Pᴇʜ 18 January 2019 в 07:26
поделиться

6 ответов

Проблема в переменной CellRef . Сначала вы написали 2 буквы L , а затем всего лишь 1 буква L .

Всегда используйте команду Option Explicit в верхней части вашего модуля. Это заставляет вас объявлять все переменные и избегать такого рода ошибок.

Правильный код:

Sub sum_first_digit()

    Dim colnum As Integer
    Dim sumfirst As Integer
    Dim cellref As Variant 'Change this type to another more specific (int, long or string)

    sumfirst = 0

    For colnum = 2 To 7 Step 1
        cellref = Cells(5, colnum)
        If IsNumeric(Left(cellref , 1)) Then sumfirst = sumfirst + Left(cellref , 1)
    Next colnum

    Range("C9").Value = sumfirst

End Sub

Ошибка в том, что переменная ** celref ** не объявлена ​​и, следовательно, пуста. Слева ("", 1) тоже пусто. Таким образом, вы пытаетесь добавить текст к числу, и поэтому типы несовместимы.

0
ответ дан Michel Excel 18 January 2019 в 07:26
поделиться

Пожалуйста, попробуйте это.

Sub sum_first_digit()

    Dim colnum As Integer
    Dim sumfirst As Integer
    Dim CelRef As Variant

    For colnum = 2 To 7
        CelRef = Left(Cells(5, colnum).Value, 1)
        sumfirst = sumfirst + Val(CelRef)
    Next colnum

    Range("C9").Value = sumfirst
End Sub
0
ответ дан Variatus 18 January 2019 в 07:26
поделиться
Sub sum_first_digit()

Dim Col As Long, X As Long

For Col = 2 To 7
    X = X + Left(Cells(5, Col), 1)
Next Col

Range("C9") = X

End Sub
0
ответ дан urdearboy 18 January 2019 в 07:26
поделиться

Я бы предпочел использовать формулы, как предложено @ user10931127, но если вам все еще нужен код VBA, попробуйте этот однострочный код VBA

Sub Sample()
    [C9] = [INDEX(SUM(VALUE(LEFT(A1:A6,1))),)]
End Sub

Если вы хотите объяснить, как это работает, см. ЭТО

0
ответ дан Siddharth Rout 18 January 2019 в 07:26
поделиться

Сумма первых цифр

Функция

Function SFD(Range As Range) As Long
    Dim vnt As Variant, i As Long, j As Long
    vnt = Range
    For i = 1 To UBound(vnt)
        For j = 1 To UBound(vnt, 2)
            If IsNumeric(vnt(i, j)) Then
                If CLng(vnt(i, j)) > 0 Then SFD = SFD + CLng(Left(vnt(i, j), 1))
            End If
        Next
    Next
End Function

В ячейке C9 используется формула: =SFD(B5:G5).

Версия массива

Sub SumOfFirstDigit()

    Const cRow As Long = 5
    Const cCol1 As Variant = 2
    Const cCol2 As Variant = 7
    Const cTarget As String = "C9"

    Dim j As Long
    Dim sumFirst As Long
    Dim vnt As Variant

    vnt = Range(Cells(cRow, cCol1), Cells(cRow, cCol2))

    For j = 1 To UBound(vnt, 2)
        If IsNumeric(vnt(1, j)) Then
            If CLng(vnt(1, j)) > 0 Then _
                    sumFirst = sumFirst + CLng(Left(vnt(1, j), 1))
        End If
    Next

    Range(cTarget).Value = sumFirst

End Sub

Версия диапазона

Sub SumOfFirstDigit2()

    Const cRow As Long = 5
    Const cCol1 As Variant = 2
    Const cCol2 As Variant = 7
    Const cTarget As String = "C9"

    Dim j As Long
    Dim sumFirst As Long

    For j = cCol1 To cCol2
        If IsNumeric(Cells(cRow, j)) Then
            If Cells(cRow, j) > 0 Then _
                    sumFirst = sumFirst + CLng(Left(Cells(cRow, j), 1))
        End If
    Next

    Range(cTarget).Value = sumFirst

End Sub

Быстрый ремонт

  • Вы забыли Dim cellref As Range.
  • Вы забыли Set в Set cellref = Cells(5, colnum).
  • Вы ошиблись celref в sumfirst = sumfirst + (Left(cellref, 1)).
  • Вы забыли Set cellref = Nothing
  • Integer мертв , Long преобладает.

Код

Sub sum_first_digit()

    Dim cellref As Range
    Dim colnum As Long
    Dim sumfirst As Long

    sumfirst = 0

    For colnum = 2 To 7
        Set cellref = Cells(5, colnum)
        sumfirst = sumfirst + (Left(cellref, 1))
    Next colnum

    Range("C9").Value = sumfirst

    Set cellref = Nothing

End Sub
0
ответ дан VBasic2008 18 January 2019 в 07:26
поделиться

Я не знаю, почему формула не может работать. В С9 используется

=SUMPRODUCT(--LEFT(B5:G5&0))
'an array formula that will skip over blank and text cells
=SUM(IFERROR(--LEFT(B5:G5&0), 0))
0
ответ дан user10931127 18 January 2019 в 07:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: