VBA - 包含行和列的两个分隔符的Txt文件

时间:2016-06-22 17:54:31

标签: excel vba

我有一个.txt文件,其中列以|(管道)分隔,但行使用以下字符串分隔:_ ~|~ _

有没有办法通过基于字符串分隔行来导入它?如果我能做到这一点,我将能够轻松地对列进行文本处理。

这很棘手,因为记事本中每行的空间都已用尽。例如:

Policy|Name|Cost _ ~|~ _ 11924|Joe|$20 _ ~|~ _ 154 (end of notepad space)

35|Bob|$40 _ ~|~ _ 18439|Jane|$30 _ ~|~ _ 18492|Ri

chard|$50

我需要阅读:

Policy Name Cost

11924  Joe  $20

15435  Bob  $40

18439  Jane $30

18492 Richard $50

等等。请注意,最右边的值是分开的,因为记事本已经耗尽了它的行长度。

感谢您的任何想法!

2 个答案:

答案 0 :(得分:0)

您可以使用更强大的文本编辑器(例如TextPad)导入Excel之前预处理文本。

在TextPad中,执行替换(F8键)。首先让我们摆脱你所谓的“记事本空间结束”,我将其视为换行符。

使用正则表达式替换双回车“\ n \ n”,不带任何内容:

enter image description here

然后,更换管道“\ |”空格“”:

enter image description here

然后,用回车符“\ n”替换“_ ~~ _”:

enter image description here

这是应该准备导入Excel的最终文本:

enter image description here

希望有所帮助! TextPad是一个很棒的工具。

答案 1 :(得分:0)

您可以使用VBA宏一步完成此操作。

  • 将整个文件读入VBA字符串变量
  • 删除newline个字符
  • 拆分行分隔符
    • 这会产生一维数组
    • 将数组转换为2D数组
    • 将结果写入工作表
    • 使用管道作为分隔符
    • 将文本添加到列中
Option Explicit
'SET REFERENCE to Microsoft Scripting Runtime

Sub ImportSpecial()
    Dim FSO As FileSystemObject
    Dim TS As TextStream
    Dim sFN As Variant
    Dim S As String
    Dim V As Variant
    Dim R As Range

sFN = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Not sFN = False Then
    Set FSO = New FileSystemObject
    Set TS = FSO.OpenTextFile(sFN, ForReading, False, TristateFalse)

    'Remove the linefeeds
    S = TS.ReadAll
    S = Replace(S, vbNewLine, "")

    'If data is large, will need to transpose manually
    V = Application.WorksheetFunction.Transpose(Split(S, "_ ~|~ _"))

    Set R = ActiveSheet.Cells(1, 1).Resize(UBound(V), 1)
    With R
        .EntireColumn.Clear
        .Value = V
        .TextToColumns Destination:=R(1), _
                        DataType:=xlDelimited, _
                        Tab:=False, semicolon:=False, comma:=False, Space:=False, _
                        other:=True, otherchar:="|"
        .EntireColumn.AutoFit
    End With
 End If
 End Sub