Я нахожу этот способ более читабельным:
$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";
Не то, чтобы у меня что-то против массивов ...
Проблема в переменной 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) тоже пусто. Таким образом, вы пытаетесь добавить текст к числу, и поэтому типы несовместимы.
Пожалуйста, попробуйте это.
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
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
Я бы предпочел использовать формулы, как предложено @ user10931127, но если вам все еще нужен код VBA, попробуйте этот однострочный код VBA
Sub Sample()
[C9] = [INDEX(SUM(VALUE(LEFT(A1:A6,1))),)]
End Sub
Если вы хотите объяснить, как это работает, см. ЭТО
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
Я не знаю, почему формула не может работать. В С9 используется
=SUMPRODUCT(--LEFT(B5:G5&0))
'an array formula that will skip over blank and text cells
=SUM(IFERROR(--LEFT(B5:G5&0), 0))