Excel 转换列';将数据复制到一行

Excel 转换列';将数据复制到一行,excel,vba,csv,text,Excel,Vba,Csv,Text,我有一个以.csv或文本格式生成的卡巴斯基安全控制台报告: 名称IP域服务器192.168.1.100 home.local机器192.168.1.10 home.local PC 192.168.1.15 home.local 它在一行中,由制表符分隔。我希望它转换/显示如下: Name IP Domaine Server 192.168.1.100 home.local Machine 192.168.1.10

我有一个以.csv或文本格式生成的卡巴斯基安全控制台报告:

名称IP域服务器192.168.1.100 home.local机器192.168.1.10 home.local PC 192.168.1.15 home.local

它在一行中,由制表符分隔。我希望它转换/显示如下:

Name        IP             Domaine
Server      192.168.1.100  home.local         
Machine     192.168.1.10   home.local
PC          192.168.1.15   home.local

在没有公式或VBA的情况下,可以使用文本来编辑列

选择单元格并转到数据选项卡-->文本到列。选择“分隔”并单击“下一步”。然后,选择“空格”,然后单击“完成”

这将在有空格时分隔数据。然后,您可以一次剪切/粘贴三列

如果您可以使用宏,那么以下内容应该可以满足您的需要(我用四行测试了它):


我使用了这个宏:

    Sub ETL()
    Dim LastCol As Integer
    Dim CountCols As Integer
    nombre = InputBox(Prompt:="Entrer nombre colonnes:")
   If nombre = "" Then Exit Sub
   CountCols = nombre

    Application.DisplayAlerts = False
    On Error Resume Next
    ThisWorkbook.Sheets("Output").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
    ThisWorkbook.Sheets.Add.Name = "Output"

     LastCol = ThisWorkbook.Sheets("Feuil1").Cells(1, Sheets("Feuil1").Columns.Count).End(xlToLeft).Column
     Dim copyRange  As Range
     Dim countD As Integer
     countD = 1
     '.Range(Cells(4, 1), Cells(4, 4)).Interior.Color = RGB(255, 0, 0)
    For j = 1 To LastCol Step CountCols

        Set copyRange = ThisWorkbook.Sheets("Feuil1").Range(ThisWorkbook.Sheets("Feuil1").Cells(1, j), ThisWorkbook.Sheets("Feuil1").Cells(1, j + CountCols - 1))
        copyRange.Copy Destination:=ThisWorkbook.Sheets("Output").Cells(countD, 1)
        countD = countD + 1
    Next j



End Sub

谢谢大家是的我就是这样做的。。对于较少的行数。。但有时它有900多个机器名。。我不能像他们一样做所有的事that@MohamedMaElainine-啊,好的,我会给你一个宏。@Mohamedmaelaine-我已经用宏更新了我的答案,这应该对你有用。我不确定您是否总是要复制3个新行,所以我尝试将其动态化,以防有更多。但是,如果他们不是“3人一组”,那么可能会出现一些错误…所以请告诉我。我正在运行它。。我应该在下周一测试凯巴斯基中心的数据报告。。非常感谢你“…我运行起来有点麻烦。”-怎么会这样?你有错误吗?不知道如何实现VBA?让meet知道,我看看有什么事。每行有三个条目吗?或者参赛作品的数量会有所不同吗?…这对你很有用??它不会破坏信息。就像你说的那样…除非我错过了什么?对于您提出的问题,这是如何工作的?这会做什么,我的不会(反之亦然)?(这样我将来才能学会如何更好地回答so问题)
    Sub ETL()
    Dim LastCol As Integer
    Dim CountCols As Integer
    nombre = InputBox(Prompt:="Entrer nombre colonnes:")
   If nombre = "" Then Exit Sub
   CountCols = nombre

    Application.DisplayAlerts = False
    On Error Resume Next
    ThisWorkbook.Sheets("Output").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
    ThisWorkbook.Sheets.Add.Name = "Output"

     LastCol = ThisWorkbook.Sheets("Feuil1").Cells(1, Sheets("Feuil1").Columns.Count).End(xlToLeft).Column
     Dim copyRange  As Range
     Dim countD As Integer
     countD = 1
     '.Range(Cells(4, 1), Cells(4, 4)).Interior.Color = RGB(255, 0, 0)
    For j = 1 To LastCol Step CountCols

        Set copyRange = ThisWorkbook.Sheets("Feuil1").Range(ThisWorkbook.Sheets("Feuil1").Cells(1, j), ThisWorkbook.Sheets("Feuil1").Cells(1, j + CountCols - 1))
        copyRange.Copy Destination:=ThisWorkbook.Sheets("Output").Cells(countD, 1)
        countD = countD + 1
    Next j



End Sub