0

我想解析文本文件的以下部分,以便将“DVA”下的增量数字作为我确定的单元格范围放入列中。我想对第二列中以 S 开头的序列号执行相同的操作,也在我确定的范围内。它们之间有一个|分隔符,我想DAU SNo.-C0成为我搜索的字符串。

我在想:搜索DAU SNo.-C0,然后以某种方式跳过两行并将下面的内容复制到 Excel 中,将数据解析为两列并确定应该放置的单元格范围。

       DAU SNo.-C0
+-------------------------+
|DVA|          0          |
+-------------------------+
| 0 | S1050360701270      |
| 1 | S1050344701369      |
| 2 | S1050360701315      |
| 3 | S1021360701337      |
| 4 | S1050360701367      |
| 5 | S1050332701350      |
| 6 | S1050360701584      |
+-------------------------+

这就是我所拥有的:已更新

Do While i < UBound(strAll)
       If (InStr(1, strAll(i), "DAU SNo.-C0", vbTextCompare) > 0) Then
          i = i + 4 'Skip 4 lines to get to first SN
          Do Until InStr(1, strAll(i), "+", vbTextCompare) > 0 'Loop until line includes "+"
             strSNO = Split(strAll(i), "|", -1, vbTextCompare)
             'put strSNO into next cell in column A
             i = i + 1
          Loop
       End If
    i = i + 1
    Loop
   Next

我尝试了几种将拆分字符串放入列中的下一个单元格的方法,但我无法让它工作。除了实际复制值(注释在代码中的位置)之外的所有单词。我通过打印 strSNO(1) 和 strSNO(2) 验证了其余部分是否有效。

任何方向、解释或代码都会有所帮助。

4

1 回答 1

0

找到该行后,使用 VBASplit函数,|用作分隔符。它将一个字符串拆分为一个数组。

示例:如果您这样做:

strTest = Split(">| 0 | S1050360701270", "|", -1, vbTextCompare)

它会像strTest(1) = 0,一样出来strTest(2) = S1050360701270

您可能还想strAll = Split(objReadFile.ReadAll, vbCrLf, -1, vbTextCompare)先将整个文本文件导入 VBA(有时更快),然后使用整数变量遍历每一行 - 这意味着当您发现“DAU SNo.-C0”时可以跳过几行" 字符串,而不必阅读每个字符串。

======编辑======

尝试将代码中的 do 循环替换为以下内容:

Dim strAll() As String, strSNO() As String, i As Integer
strAll = Split(objReadFile.ReadAll, vbCrLf, -1, vbTextCompare) 'Gets each line from file
i = LBound(strAll)
Do While i < UBound(strAll)
    If (InStr(1, strAll(i), "DAU SNo.-C0", vbTextCompare) > 0) Then
        i = i + 4 'Skip 4 lines to get to first | 0 | S1050360701270 | line
        Do Until InStr(1, strAll(i), "+", vbTextCompare) > 0 'Loop until line includes "+"
            strSNO = Split(strAll(i), "|", -1, vbTextCompare)
            'This will add them to the next available row in A / B... change as needed
            Range("A60000").End(xlUp).Offset(1, 0).Value = Trim(strSNO(1))
            Range("B60000").End(xlUp).Offset(1, 0).Value = Trim(strSNO(2))
            i = i + 1
        Loop
    End If
    i = i + 1
Loop
于 2013-03-05T16:13:38.873 回答