0

ここで、非常に難しい問題が 1 つあります。私たちの部門が数百万ドルを節約するために、この問題を解決することは私にとって非常に重要です (心からの助けに感謝します)。実際には、テキスト形式の「グリッド線データ」の 2 つの異なる列があります。例: GL 23.5-24 / G. ここで、23.5 - 24 は X 軸に沿った読み取り値を表し、G は Y 軸に沿ったグラインドを表します。このデータはすべて 1 つの列にあります。データは単一の値ではなく、GL 24-24.7 / ST、GL 25.3-25.5 / ST などの値の組み合わせである場合もあれば、GL 27/H;27/H.5;26.5/J.5 および GL26 の場合もあります。 .5-27.5/L。ここで、このデータを扱う際に 2 つの大きな課題に直面しました。まず、このテキストベースのデータを、便利で直接理解できるグリッド線データに変換する必要があります。つまり、GL 24-24.7 / ST は 24 - 24 のようにする必要があります。1 つのセルでは 7、別のセルでは S - T であり、24 - 24.7 が X 軸に沿っていること、およびその逆であることを明確に示しています。これを行った後、このデータを同じタイプのデータを持つ別の列、つまり GL 24.5 / S.5 と比較する必要があります。比較は、比較されたグリッドがメイン グリッドの (サブセットとして) 下にあるかどうかを教えてくれるような方法で行う必要があります。たとえば、メイン グリッド ラインが 23 - 25 / R - T で、2 番目のグリッドが 24.5 / S の場合、この 2 番目のグリッドは最初のグリッドの下 (またはその間) になります。

したがって、全体的な問題は、テキストデータを有用なグリッドに分離した後、最初のグリッドラインを他のグリッドラインでチェックすることです。文字列全体を解析するためだけにちょっとしたスクラッチ作業を行いましたが、さらに先に進むための合理的なアルゴリズムを形成することができませんでした。

データを解析するための現在のコードは次のとおりです。

Dim strAll() As String
Dim strSNO() As String, Meesam() As String
Dim lastRow As Integer, i As Integer, newRng As Range, cnt As Integer, x As String
Dim a As Integer

With ThisWorkbook.Sheets("Data")
 lastRow = .Range("A7000").End(xlUp).Row
 ReDim strAll(lastRow)
 Set newRng = .Range("A1:A" & lastRow)
End With

For cnt = LBound(strAll()) To UBound(strAll())
    strAll(cnt) = newRng.Cells(cnt + 1, 1).Value
Next

Do While i < UBound(strAll)

If (InStr(1, strAll(i), "Element", vbTextCompare) > 0) Then
    i = i + 2
    Do Until InStr(1, strAll(50), "+GL", vbTextCompare) > 0 'Loop until line includes "+"
        Meesam = SplitMultiDelims(strAll(i), "/")
        a = 0
        For a = LBound(Meesam) To UBound(Meesam)
            newRng.Offset(i, a) = Meesam(a)
        Next
        i = i + 1
    Loop
End If
i = i + 1
Loop
4

1 に答える 1