吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 629|回复: 20
收起左侧

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

  [复制链接]
dabai233 发表于 2023-11-12 16:36
本帖最后由 dabai233 于 2023-11-12 21:01 编辑

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

文档 链接: 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表格匹配。

免费评分

参与人数 1吾爱币 +1 收起 理由
szllw + 1 变量名写的不错

查看全部评分

 楼主| 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

非常感谢
bjxiaoyao 发表于 2023-11-12 18:28
绿色小方块是每一句的结尾吗?可以用这个作为关键点,循环一遍,句首定位,用绿色小方块所在行号加1,用连接符合并相应单元格即可
 楼主| dabai233 发表于 2023-11-12 19:07
bjxiaoyao 发表于 2023-11-12 18:28
绿色小方块是每一句的结尾吗?可以用这个作为关键点,循环一遍,句首定位,用绿色小方块所在行号加1,用连 ...

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

大佬能不能写段代码给我研究一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表