如何

2017-04-05 159 views
1

从一个文本文件中的以下文本格式的信号之后用一个文本文件分隔符,将在Excel中输入一个新行:如何

名称:测试1,电子邮件:[email protected],电话:81273807,年龄:22,性别:男 ,名称:Test2的,电子邮件:Test2的@ email.com,电话:81453807,年龄: 32,性别:女.....等

标识喜欢在excel中导入,看起来像这样:

> Name | Email  | Phone | Age | Gender | 
> Test1 | [email protected] | 81273807 | 22 | Male | 
> Test2 | [email protected] | 81453807 | 32 | Female | 
> etc 

有没有办法通过以某种方式格式化文本文件? VBA可以避免吗?

+0

Excel中导入功能,但我愿意接受任何解决方案 – Dreamwatcher

+1

您可以尝试查找/替换',名称:'和',[新线]产品名称:' – user1274820

+0

我真的很缺乏经验与VBA – Dreamwatcher

回答

1
  • 打开一个新的空白工作簿将其设置为Delimited
  • 单击Sheet1名称选项卡并选择查看代码
  • 当VBE打开时,将以下内容粘贴到名为Sheet1(Code)的代码表中。

代码:

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Parent.UsedRange.Cells.Count = 1 And _ 
     Target.Cells.Count = 1 And _ 
     Target.Address(0, 0) = "A1" Then 
     On Error GoTo safe_exit 
     Application.EnableEvents = False 
     Dim a As Long, b As Long, arr1 As Variant, arr2 As Variant, hdr As Variant, tmp As Variant 
     arr1 = Split(Replace(Target.Value2, ",Name:", vbLf & "Name:"), vbLf) 
     For a = LBound(arr1) To UBound(arr1) 
      arr2 = Split(arr1(a), Chr(44)) 
      For b = LBound(arr2) To UBound(arr2) 
       tmp = Split(arr2(b), Chr(58)) 
       hdr = Application.Match(tmp(0), Rows(1), 0) 
       If IsError(hdr) Then 
        Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1) = tmp(0) 
        hdr = Application.Match(tmp(0), Rows(1), 0) 
       End If 
       Cells(2 + a, hdr) = tmp(1) 
      Next b 
     Next a 
     Columns(1).EntireColumn.Delete 
    End If 

safe_exit: 
    Application.EnableEvents = True 

End Sub 

- 点击按Ctrl + Q返回到你的新的空白工作表。 - 在记事本或其他文本编辑器中打开TXT文件并复制整个事情。 - 返回新的空白Sheet1并将文本粘贴到A1中。使用

enter image description here

1

正如我在我的评论中所说的,您可以用\nName:(新行/回车)代替,Name:

这是很容易在记事本做++(一个免费的程序)

https://notepad-plus-plus.org/

确保您设置Search ModeExtended

使用find:,Name:

替换为:\nName:

Demo

它配备了这样看,当你使用Comma

Demo2