dabai233 发表于 2023-11-12 16:36

大佬们这个用vba应该怎么写求助

本帖最后由 dabai233 于 2023-11-12 21:01 编辑

图1
是这样的这是一个字幕文件转Excel表有近700行,我想写个vba批量处理   具体要求1.把属于同一句复制到同一行里面内容要按顺序连续。2保存句首的位置所在单元格的位置不变
最后效果像图2 这样

文档 链接: https://pan.baidu.com/s/1H_GXsH--SmsgnlnCygSROA?pwd=4ktk 提取码: 4ktk 复制这段内容后打开百度网盘手机App,操作更方便哦

tanglikecuan 发表于 2023-11-12 17:00

这是一个相对复杂的问题,需要使用VBA编写一个程序来实现。以下是一个基本的VBA代码示例,用于将字幕文件中的行逐行读取,并将属于同一行的内容复制到同一行中,同时保存句首位置所在单元格的位置不变。

vba
Sub ProcessSubtitleFile()
    Dim i As Long, j As Long, rowCount As Long
    Dim subtitles As Range, cell As Range
    Dim currentRow As Range, targetRow As Range
    Dim lineText As String, sentenceCount As Long
    Dim tempArray() As String, tempCellValue As String
      
    '打开文件
    Open "C:\path\to\subtitle\file.txt" For Input As #1
      
    '初始化变量
    rowCount = 0
    sentenceCount = 0
    ReDim tempArray(1 To 10000, 1 To 10) '根据需要调整数组大小
      
    '逐行读取文件内容
    Do Until EOF(1)
      Line Input #1, lineText '读取一行文本
      rowCount = rowCount + 1 '增加行数
         
      '将文本按句号分割成句子
      tempCellValue = ""
      For i = 1 To Len(lineText)
            If Mid(lineText, i, 1) = "." Then
                If Len(tempCellValue) > 0 Then
                  tempArray(sentenceCount, 1) = tempCellValue '保存句子内容
                  tempArray(sentenceCount, 2) = rowCount '保存句子的行数
                  sentenceCount = sentenceCount + 1 '增加句子计数器
                End If
                tempCellValue = "" '清空临时变量
            Else
                tempCellValue = tempCellValue & Mid(lineText, i, 1) '将字符添加到临时变量中
            End If
      Next i
         
      '如果最后一个句子的内容没有保存,则保存最后一个句子
      If Len(tempCellValue) > 0 Then
            tempArray(sentenceCount, 1) = tempCellValue '保存句子内容
            tempArray(sentenceCount, 2) = rowCount '保存句子的行数
            sentenceCount = sentenceCount + 1 '增加句子计数器
      End If
    Loop
    Close #1 '关闭文件
      
    '将句子内容按顺序复制到Excel表格中
    Set subtitles = Range("A1").Resize(sentenceCount, 2) '设置目标单元格范围
    For i = 1 To sentenceCount '逐行写入Excel表格中
      cell = subtitles.Cells(i, 1) '设置当前单元格位置
      cell.Value = tempArray(i, 1) '写入句子内容
      cell.Offset(0, 1).Value = tempArray(i, 2) '写入行数信息到下一列中
    Next i
End Sub
请注意,这只是一个基本的示例代码,可能需要根据您的具体要求进行修改和完善。同时,需要确保您在VBA代码中引用的文件路径和单元格范围与您的实际文件和Excel表格匹配。

dabai233 发表于 2023-11-12 17:02

tanglikecuan 发表于 2023-11-12 17:00
这是一个相对复杂的问题,需要使用VBA编写一个程序来实现。以下是一个基本的VBA代码示例,用于将字幕文件中 ...

大佬这个代码能批量处理剩下700多行吗

dabai233 发表于 2023-11-12 17:07

dabai233 发表于 2023-11-12 17:02
大佬这个代码能批量处理剩下700多行吗

谢谢大佬 我去研究研究

黄家驹丶 发表于 2023-11-12 17:12

学习中,多发多看多学习

tanglikecuan 发表于 2023-11-12 17:17

dabai233 发表于 2023-11-12 17:02
大佬这个代码能批量处理剩下700多行吗

可以处理

dabai233 发表于 2023-11-12 17:19

tanglikecuan 发表于 2023-11-12 17:17
可以处理

非常感谢{:1_893:}

bjxiaoyao 发表于 2023-11-12 18:28

绿色小方块是每一句的结尾吗?可以用这个作为关键点,循环一遍,句首定位,用绿色小方块所在行号加1,用连接符合并相应单元格即可

dabai233 发表于 2023-11-12 19:07

bjxiaoyao 发表于 2023-11-12 18:28
绿色小方块是每一句的结尾吗?可以用这个作为关键点,循环一遍,句首定位,用绿色小方块所在行号加1,用连 ...

是的是结尾,谢谢大佬解答{:1_893:}

dabai233 发表于 2023-11-12 19:27

bjxiaoyao 发表于 2023-11-12 18:28
绿色小方块是每一句的结尾吗?可以用这个作为关键点,循环一遍,句首定位,用绿色小方块所在行号加1,用连 ...

大佬能不能写段代码给我研究一下
页: [1] 2 3
查看完整版本: 大佬们这个用vba应该怎么写求助