Vba 每100行数据创建一个文本文件

Vba 每100行数据创建一个文本文件,vba,excel,spread,Vba,Excel,Spread,比如说: 我在Excel电子表格中有1000行单独的信息。(1列,1000行) 我想将每100行保存为它自己的文件名。(workbook1.txt,workbook2.txt,workbook3.txt等) 目前,我手动执行此操作: 我将突出显示100行 我使用控件+C(复制) 然后Control+N(新建)创建新文件,然后Control+V(粘贴)然后Control+S保存文件, 使用Control+N时指定的默认名称命名文件,以便将其保存为workbook1,workbook2,workb

比如说:

  • 我在Excel电子表格中有1000行单独的信息。(1列,1000行)

  • 我想将每100行保存为它自己的文件名。(
    workbook1.txt
    workbook2.txt
    workbook3.txt
    等)

  • 目前,我手动执行此操作:

    • 我将突出显示100行
    • 我使用控件+C(复制) 然后Control+N(新建)创建新文件,然后Control+V(粘贴)然后Control+S保存文件, 使用Control+N时指定的默认名称命名文件,以便将其保存为
      workbook1
      workbook2
      workbook3
    我正在将它们保存为文本文件(.txt)


    是否可以自动执行此过程,可能是bat文件或其他什么?

    如果您可以访问Linux系统,则有一个名为“split”的命令行实用程序,它可以执行以下操作: 将文本文件拆分为N个文件(行、字节、字)


    cat original_file.csv | split-l 1000

    您可以使用简单的VBA脚本,如:

    Dim counter As Integer
    counter = 0
    Do While counter < 10
    Range("A1:A100").Select
    Selection.Copy
    Sheets("Sheet2").Select
    ActiveSheet.Paste
    ActiveWorkbook.SaveAs Filename:="C:\test" & CStr(counter) & ".txt", _
        FileFormat:=xlTextMSDOS, CreateBackup:=False
    Sheets("Sheet1").Select
    Range("A101:A1000").Select
    Selection.Cut
    Range("A1").Select
    ActiveSheet.Paste
    counter = counter + 1
    Loop
    
    Dim计数器为整数
    计数器=0
    当计数器<10时执行此操作
    范围(“A1:A100”)。选择
    选择,复制
    图纸(“图纸2”)。选择
    活动表。粘贴
    ActiveWorkbook.SaveAs文件名:=“C:\test”&CStr(计数器)和“.txt”_
    FileFormat:=xlTextMSDOS,CreateBackup:=False
    图纸(“图纸1”)。选择
    范围(“A101:A1000”)。选择
    选择,剪
    范围(“A1”)。选择
    活动表。粘贴
    计数器=计数器+1
    环
    

    另存为xlTextMSDOS只保存活动工作表,这样您就不必创建新工作簿。

    有时,将所有内容复制到新工作表并删除不希望保留的内容会更容易。A to no位置将打开一个新的空白工作簿,其中只有一个工作表;那是原件的复印件

    Sub split_100()
        Dim i As Long, lr As Long, fn As String
    
        'Application.ScreenUpdating = false 'uncomment when it works right for you
    
        With Worksheets("Sheet1")
            lr = .Cells(Rows.Count, 1).End(xlUp).Row
            For i = 1 To lr Step 100
                .Copy
                With ActiveWorkbook
                    With .Worksheets(1)
                        If i > 1 Then _
                            .Cells(1, 1).Resize(i - 1, 1).EntireRow.Delete
                        .Cells(101, 1).Resize(lr, 1).EntireRow.Delete
                    End With
                    fn = Environ("TMP") & "\Workbook" & Format(Int(i / 100) + 1, "00") 'no extension; leave that for xlTextWindows
                    'Application.DisplayAlerts = False  'uncomment to avoid overwrite warnings
                    .SaveAs Filename:=fn, FileFormat:=xlTextWindows
                    .Close SaveChanges:=False
                End With
            Next i
        End With
    
        Application.ScreenUpdating = True
    End Sub
    
    在删除不需要的内容后,a将循环带到a。有许多TXT格式可供选择,上面使用的是xlFileFormat