VBA SQL Sum- group by оператор принимает до двухзначного десятичного значения - PullRequest
0 голосов
/ 19 сентября 2018

У меня проблема с оператором SQL в VBA.

У меня есть набор данных, в котором есть один столбец со значением до 3 десятичных разрядов, например:

Name    Value  
---------------
A       0.004  
B       0.005  
A       0.123  
C       0.533

Я хочунаписать оператор SQL в VBA, который суммирует значение на основе имя

, например:

sql = select name, sum(value) from data.csv group by name

Сейчас моя проблема заключается в том, что когдаЯ делаю сумму, Excel, кажется, только принимает до 2 цифр для суммирования , что означает, что 0,004 будет 0 и 0,123 будет 0,12.В результате я пропустил какое-то значение в процессе суммирования:

Мой желаемый результат будет

A  0.127  (0.003 + 0.124)  
B  0.005  
C  0.533

Но вместо этого теперь я получаю

A  0.12  (0 + 0.12)  
B  0  
C  0.53

Чтоя должен сделать в этой ситуации, чтобы решить проблему?

Я пробовал сумму (cdbl (значение)), но она не работает.

Большое спасибо!

РЕДАКТИРОВАТЬ: мой конкретный код выглядит следующим образом:

Sub Createnewfile()

Dim cn As ADODB.Connection, rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Dim sql As String

FName = "\new file.xlsx"
FPath = ThisWorkbook.Path & FName

If Not Dir(FPath, vbDirectory) = vbNullString Then Kill FPath

Workbooks.Add
ActiveWorkbook.SaveAs Filename:=FPath
Set wsData = ActiveWorkbook.Sheets("Sheet1")

cn.Provider = "Microsoft.ACE.OLEDB.12.0"
cn.ConnectionString = "Data Source=" & ThisWorkbook.Path & ";" & "Extended Properties=""text;HDR=Yes;FMT=Delimited;"""
cn.Open

sql = "SELECT Name, sum(cbdl(value)) as value " & _
      "FROM data.csv " & _
      "GROUP BY Name "

rs.Open sql, cn
For c = 0 To rs.Fields.count - 1
    wsData.Cells(1, c + 1).Value = rs.Fields(c).Name
Next

rs.MoveFirst
r = wsData.UsedRange.Rows.count + 1
wsData.Cells(r, 1).CopyFromRecordset rs
rs.Close
cn.Close

Application.DisplayAlerts = False
With Workbooks("new file.xlsx")
    .Save
End With
End Sub
...