次のタスクをより迅速に実行する方法を研究してきましたが、できませんでした...
それを手伝ってもらえますか?これは基本的にはテキスト ファイルをシートに変換するパーサーですが、問題はテキスト ファイルが約 100000 行あり、このコードの実行に 30 分以上かかることです。
テキストファイルの新しい行ごとに、最初にシートが既に存在するかどうかを確認し、次に列のタイトルが既に存在するかどうかを確認します...存在する場合は、対応するフィールドにデータを入力し、そうでない場合はシートと列を作成します.
このコードがまったく最適化されていないことは知っていますが、私はプログラマーではないので、この仕事をする方法です。
Open sFileName For Input As #1
While Not EOF(1)
Line Input #1, sLin
If Left(sLin, 3) = "ADD" Or Left(sLin, 3) = "SET" Or Left(sLin, 3) = "MOD" Then
sLinSplitted = Split(sLin, ",")
NumberOfParameters = UBound(sLinSplitted)
For p = 0 To NumberOfParameters
Select Case p
Case 0
Aux1 = Split(sLinSplitted(p), ":")
AuxTabl = Split(Aux1(0), " ")
Tabl = AuxTabl(1)
Aux2 = Split(Aux1(1), "=")
Parm = Aux2(0)
Parmval = Aux2(1)
If Tabl <> Tablpre Then
DoNotCreate = 0
For Each sh In ThisWorkbook.Worksheets
If sh.Name = Tabl Then
DoNotCreate = 1
GoTo Continue:
End If
Next
If DoNotCreate <> 1 Then
ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)).Name = Tabl
End If
Tablpre = Tabl
End If
継続する:
Linh = ThisWorkbook.Sheets(Tabl).UsedRange.Rows.Count + 1
ThisWorkbook.Sheets(Tabl).Cells(1, 1) = "NE"
Case Is > 0
Aux2 = Split(sLinSplitted(p), "=")
Parm = Aux2(0)
Parmval = Aux2(1)
End Select
Parm = Replace(Parm, " ", "")
Parmval = Replace(Parmval, ";", "")
Set Strg = ThisWorkbook.Sheets(Tabl).Range("1:3").Find(Parm, LookAt:=xlWhole)
If Strg Is Nothing Then
With ThisWorkbook.Sheets(Tabl).Rows("1:1")
Set CT = .Find(What:="")
End With
column = CT.Column
Else
column = Strg.Column
End If
ThisWorkbook.Sheets(Tabl).Cells(1, column) = Parm
ThisWorkbook.Sheets(Tabl).Cells(Linh, column) = Parmval
Next
ThisWorkbook.Sheets(Tabl).Cells(Linh, 1) = NEName
If ThisWorkbook.Sheets(Tabl).Cells(2, 1) = "" Then
Linh = 2
Else
Temp = ThisWorkbook.Sheets(Tabl).UsedRange.Rows.Count
Linh = Temp + 1
End If
End If
Wend
Close
入力テキスト ファイルの例は次のとおりです。
SET ALMBLKPARA:AID=20031, BLKPRD=0, CNTRISTHRD=0, CNTSTLTHRD=0, TMRISTHRD=0, TMSTLTHRD=0;
ALMBLKPARA はシートの名前、AID、BLKPRD、CNTRISTHRD、CNTSTLTHRD、TMRISTHRD、および TMSTLTHRD は列タイトルで、各「=」の後に対応する値が必要です。
本当にありがとうございました。
ありがとう、シーザー