我在这里遇到了一个非常具有挑战性的问题。解决这个问题对我来说非常重要,以便我们部门节省数百万美元(非常感谢真诚的帮助)。实际上,我们有两列不同的文本形式的“网格线数据”。例如 GL 23.5-24 / G。这里 23.5 - 24 代表沿 X 轴的读数,而 G 代表沿 Y 轴的磨削。所有这些数据都在一列中。有时数据不是单个值,而是值的组合,例如 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。现在我在处理这些数据时遇到了两大挑战。首先是我必须将此基于文本的数据转换为某种有用且可直接理解的网格线数据,即 GL 24-24.7 / ST 应该像 24 - 24。7 在一个单元格中,S - T 在另一个单元格中,清楚地表明 24 - 24.7 沿 X 轴,反之亦然。在我这样做之后,我必须将此数据与具有相同类型数据的另一列进行比较,即 GL 24.5 / S.5。比较应该以某种方式告诉我比较的网格是否属于(作为子集)主网格。例如,如果我的主网格线为 23 - 25 / R - T 并且我的第二个网格是 24.5 / S,那么第二个网格肯定会落在第一个网格之下(或介于两者之间)。
因此,总体问题是在将文本数据分离到有用的网格中之后检查其他中的第一条网格线。我做了一些临时工作,只是为了解析整个字符串,但无法形成合理的算法来进一步进行。
这是我当前解析数据的代码。
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