Excel Field Parse Hel

时间:2016-09-09 19:09:03

标签: excel parsing

大家早上好!

我为一个未公开的蜂窝通信提供商工作,我的部分工作是分析细胞强度并进行调查,然后将其提供给公司。这就是他们制作覆盖地图的方式。我不知道我是否需要为此编写宏,或者excel公式是否有效。我们使用非常复杂的文件名来处理我们处理的数据。为了简单起见,我将X文件名中与相关的部分区分开来。是什么让这个棘手的是一些"件"文件名的长度可能不同,有时会出现操作员错误。 XXXX_M222.222_080816_015457MST_XXXX_XXXX.XX

现在我将打破这三个领域以便更好地理解。

M222.2222将始终以" M"接着是一个可变的数字串,以MHz为单位注释频率。

080816只是日期,总是看起来像这样

015457MST是我们参加调查的时间,或者是" ping"命中。它可能会因秒数下降而有所不同。 01(小时)54(分钟)57(秒)。这将始终以MST结束。

现在我们了解这个领域让我们终于谈谈我想要做什么。

我想将这三个字段解析为excel中的三个独立字段。就是这样。谢谢我提前!

2 个答案:

答案 0 :(得分:1)

我很无聊,决定为你写。这将处理指定范围内的所有内容。它删除了M和MST以及每一行的结尾,并将分解的子字符串从网上移到原始行。

当您对最终结果感到满意时,请随意提升并标记答案

修改

如果你觉得无聊,你实际上可以找到一种方法来实际将日期和时间标记变为可用的格式,而不是现在的神可怕的输出。

Private Sub derpy()

    Dim vAr As String
    Dim vAr2 As String
    Dim rArray() As String
    Dim rNg As Range
    Dim rCell As Range
    Dim count As Integer

    Set rNg = ThisWorkbook.Sheets("Sheet1").Range("A1:A7")
    count = 1
    For Each rCell In rNg.Cells
        vAr = rCell
        vAr2 = Mid(vAr, InStr(vAr, "M") + 1, InStr(vAr, "MST") - InStr(vAr, "M") - 1)
        rArray = Split(vAr2, "_")

                newDate = newDate & Left(rArray(1), 2) & "/"
                newDate = newDate & Mid(rArray(1), 3, 2) & "/"
                newDate = newDate & Mid(rArray(1), 5, 2)
                newDate = Format(newDate, "mm-dd-yyyy")

                newDate = newDate & "-" & Left(rArray(2), 2) & "."
                newDate = newDate & Mid(rArray(2), 3, 2) & "."
                newDate = newDate & Mid(rArray(2), 5, 2)
                newDate = Format(newDate, "mm-dd-yyyy hh-mm-ss")

                rCell.Offset(0, 1).Value = newDate

                newDate = ""

    Next rCell

End Sub

答案 1 :(得分:0)

这是解析在excel中具有公共分隔符的字符串的快速方法。您可以输入您的文件名,它会选择您想要的三个部分,而不会出现任何丑陋的循环和if语句。

Sub parseFileName(filename As String)
    Dim freq As String
    Dim fDate As String
    Dim fTime As String

    freq = Split(filename, "_")(1)
    fDate = Split(filename, "_")(2)
    fTime = Split(filename, "_")(3)

    Debug.Print freq, fDate, fTime

End Sub

从即时窗口调用:

parsefileName "XXXX_M222.222_080816_015457MST_XXXX_XXXX.XX"
M222.222      080816        015457MST

所以...魔法真的在SPLIT()函数中,它接受一个字符串和一个分隔符,并且"分裂"将字符串转换为数组。我们只是将SPLIT()函数本身视为数组,而不是将数组存储在数组变量中,并使用Split()函数(1), (2), and (3)之后的值,即第2,第3和第4字符串中的标记用于拉取值。它非常快,每个令牌的长度并不重要,因为我们是由一个角色划分的。

编辑以在迭代数据列时添加Split()的示例:

如果Sheet1的A列(第1行到第5行)中有这些文件名的列表,您可以使用以下内容将这三个令牌写入B,C和D列。

Sub parseFileNames(filename As String)

    'Declare a range object to hold the cell that we are splitting
    Dim rngCell As Range

    For Each rngCell In Sheet.Range("A1:A5").Cells
        'Using offset here to move over 1, 2, and 3 columns, respectively
        '   from the cell that we are splitting.
        rngCell.Offset(0, 1).Value = Split(rngCell.Value, "_")(1)
        rngCell.Offset(0, 2).Value = Split(rngCell.Value, "_")(2)
        rngCell.Offset(0, 3).Value = Split(rngCell.Value, "_")(3)
    Next rngCell


End Sub