0

次のタスクをより迅速に実行する方法を研究してきましたが、できませんでした...

それを手伝ってもらえますか?これは基本的にはテキスト ファイルをシートに変換するパーサーですが、問題はテキスト ファイルが約 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 は列タイトルで、各「=」の後に対応する値が必要です。

本当にありがとうございました。

ありがとう、シーザー

4

0 に答える 0