|
おまけです。
長くなりますが、ファイルの読み込み部分を関数化してます。
汎用性があるように作成してますから、使えるところがあればどうぞ。
(過去ログやWebを探せばどこにでも転がっているようなもんです。)
ファイルサイズが数十MB程度までなら問題なく実行できると思います。
(私は20MB程度までしかやったこと無いですが)
Excelの機能を使ってませんので、Accessなどでも使用できます。
但し、あえて書きませんでしたが、他の方の回答の様にSum関数を使ったほうがより合計は
早くなるような気がします。(Excel関数は速いです。)
ただ、計算回数が少ないので全体としては大きくは影響しないかもしれません。
Option Explicit
Private Sub CommandButton1_Click()
Dim strIN As String
Dim tblDatafield() As String
Dim tblDataRow() As String
Dim csvDATA As String
Dim j As Long
Dim lBuf(9) As Long
Dim goukei As Long
Dim i As Long, iEnd As Long
'ファイルの入出力のパスを指定
strIN = "D:\Excel\Test\test.csv"
' strIN = ThisWorkbook.Path & "\output.csv"
csvDATA = ReadTextFunc(strIN)
If csvDATA = "" Then Exit Sub
'行単位で分割
tblDataRow() = Split(csvDATA, vbCrLf)
iEnd = UBound(tblDataRow)
For i = 2 To iEnd
'「,」区切りでデータを区切る。配列に入れる
If tblDataRow(i) <> "" Then
tblDatafield() = Split(tblDataRow(i), ",")
For j = 2 To 11
lBuf(j - 2) = CLng(tblDatafield(j))
Next j
goukei = FuncGoukei(lBuf)
Debug.Print goukei
End If
Next i
Erase tblDataRow()
End Sub
'***************合計値***************
Public Function FuncGoukei(pData() As Long) As Long
Dim i As Long
Dim lAns As Long
For i = 0 To UBound(pData())
lAns = lAns + pData(i)
Next i
FuncGoukei = lAns
End Function
Public Function ReadTextFunc(psPath As String) As String
'*******************************************************
'テキストファイルを一気に読み込む
'**********
'引数
'psPath (String):テキストファイルのフルパス
'**********
'戻り値:テキストファイルの内容
'*******************************************************
Dim bytBuf() As Byte
Dim lFN As Long, lfLength As Long
On Error GoTo ReadTextFunc_Error
If Dir(psPath, vbNormal) = "" Then GoTo ReadTextFunc_Error
lfLength = FileLen(psPath)
lfLength = lfLength + 1000 '本当は必要ないと思うが念の為余分に確保
ReDim bytBuf(lfLength)
lFN = FreeFile()
Open psPath For Binary As #lFN
Get #lFN, , bytBuf
Close #lFN
ReadTextFunc = StrConv(bytBuf, vbUnicode) '変換
'余分な部分を切り捨てる
ReadTextFunc = Left(ReadTextFunc, InStr(1, ReadTextFunc, Chr(0)) - 1)
Erase bytBuf
Exit Function
ReadTextFunc_Error:
Reset
ReadTextFunc = ""
End Function
問題解決後ですが、より早くするにはこんな方法もあるという程度で見てください。
又、他の方のResもこの機会に消化しておけば良いと思います。
最後に、
チョコチョコっと書いて殆ど検証してないので、もし、バグがあったら適当に直して下さい。
実は、一度書いて、出来た!と思って、Excelを閉じたらBookを保存してなかったんですね。
その挙句、書き直したもんで ^ ^;;;;
|
|