Sub FormatData() ' 定义变量 Dim wb As Workbook ' 工作簿 Dim ws As Worksheet ' 工作表 Dim lastRow As Long ' 最后一行 Dim i As Long, j As Long ' 循环变量 Dim currentValue As String, nextValue As String ' 当前值和下一个值 Dim productName As String ' 产品名称 Dim packageCount As Integer ' 包数

' 设置工作簿和工作表
Set wb = ThisWorkbook ' 当前工作簿
Set ws = wb.Worksheets(1) ' 第一个工作表

' 获取最后一行
lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row

' 遍历数据
For i = 8 To lastRow
    ' 获取当前值和下一个值
    currentValue = ws.Range("C" & i).Value
    nextValue = ws.Range("C" & i + 1).Value
    
    ' 判断是否需要插入空白行
    If Not IsEmpty(nextValue) And Left(currentValue, 7) <> Left(nextValue, 7) Then
        ' 插入两行空白行
        ws.Rows(i + 1 & ":" & i + 2).Insert Shift:=xlDown
        
        ' 合并第一行单元格并设置行高
        ws.Range("A" & i & ":Q" & i).Merge
        ws.Range("A" & i).RowHeight = 30
        
        ' 复制第5行格式到第二行
        ws.Rows(i + 1).Copy
        ws.Rows(i + 2).PasteSpecial Paste:=xlPasteFormats
        
        ' 提取工作簿名并生成产品名称
        productName = Left(wb.Name, Len(wb.Name) - 14) ' 去掉“板件明细表.xls”
        productName = Split(productName, "_")(0)
        productName = productName & "-" & Split(currentValue, "-")(2) & " " & productName & "第" & Split(currentValue, "-")(3) & "包(圆方)(黑身)"
        
        ' 判断产品名称中的包数
        packageCount = Split(currentValue, "-")(2)
        
        ' 填入对应的数值
        ws.Range("A" & i).Value = productName
        ws.Range("B" & i + 1 & ":B" & i + 2).Value = Split(currentValue, "-")(0) & "-" & Split(currentValue, "-")(1) & " " & productName
        ws.Range("K" & i + 2).Value = packageCount & " 包"
        
        ' 更新索引
        lastRow = lastRow + 2
        i = i + 2
    End If
Next i

End Sub

逐句解释代码:

Sub FormatData() ' 定义一个名为FormatData的子过程 ' 定义变量 Dim wb As Workbook ' 声明一个Workbook类型的变量,表示工作簿 Dim ws As Worksheet ' 声明一个Worksheet类型的变量,表示工作表 Dim lastRow As Long ' 声明一个Long类型的变量,表示最后一行的行号 Dim i As Long, j As Long ' 声明两个Long类型的变量,用于循环 Dim currentValue As String, nextValue As String ' 声明两个String类型的变量,表示当前值和下一个值 Dim productName As String ' 声明一个String类型的变量,表示产品名称 Dim packageCount As Integer ' 声明一个Integer类型的变量,表示包数

' 设置工作簿和工作表
Set wb = ThisWorkbook ' 将当前工作簿赋值给变量wb
Set ws = wb.Worksheets(1) ' 将第一个工作表赋值给变量ws

' 获取最后一行
lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row ' 获取C列最后一个非空单元格所在行的行号

' 遍历数据
For i = 8 To lastRow ' 从第8行开始遍历到最后一行
    ' 获取当前值和下一个值
    currentValue = ws.Range("C" & i).Value ' 获取C列第i行的值
    nextValue = ws.Range("C" & i + 1).Value ' 获取C列第i+1行的值
    
    ' 判断是否需要插入空白行
    If Not IsEmpty(nextValue) And Left(currentValue, 7) <> Left(nextValue, 7) Then ' 如果下一个值非空且当前值的前7个字符与下一个值的前7个字符不相同,则需要插入空白行
        ' 插入两行空白行
        ws.Rows(i + 1 & ":" & i + 2).Insert Shift:=xlDown ' 在第i+1行和第i+2行之间插入两行空白行
        
        ' 合并第一行单元格并设置行高
        ws.Range("A" & i & ":Q" & i).Merge ' 合并A列到Q列的第i行的单元格
        ws.Range("A" & i).RowHeight = 30 ' 设置第i行的行高为30
        
        ' 复制第5行格式到第二行
        ws.Rows(i + 1).Copy ' 复制第i+1行的格式
        ws.Rows(i + 2).PasteSpecial Paste:=xlPasteFormats ' 粘贴格式到第i+2行
        
        ' 提取工作簿名并生成产品名称
        productName = Left(wb.Name, Len(wb.Name) - 14) ' 提取工作簿名,并去掉后缀"板件明细表.xls"
        productName = Split(productName, "_")(0) ' 以"_"分割工作簿名的第一部分作为产品名称的一部分
        productName = productName & "-" & Split(currentValue, "-")(2) & " " & productName & "第" & Split(currentValue, "-")(3) & "包(圆方)(黑身)" ' 将产品名称的其他部分拼接成完整的产品名称
        
        ' 判断产品名称中的包数
        packageCount = Split(currentValue, "-")(2) ' 以"-"分割当前值,取第三部分作为包数
        
        ' 填入对应的数值
        ws.Range("A" & i).Value = productName ' 将产品名称填入A列第i行的单元格
        ws.Range("B" & i + 1 & ":B" & i + 2).Value = Split(currentValue, "-")(0) & "-" & Split(currentValue, "-")(1) & " " & productName ' 将当前值的前两部分和产品名称拼接后填入B列第i+1行和第i+2行的单元格
        ws.Range("K" & i + 2).Value = packageCount & " 包" ' 将包数填入K列第i+2行的单元格
        
        ' 更新索引
        lastRow = lastRow + 2 ' 更新最后一行的行号
        i = i + 2 ' 更新循环变量i的值
    End If
Next i ' 进入下一次循环

End Sub ' 结束子过

Sub FormatData Dim wb As Workbook Dim ws As Worksheet Dim lastRow As Long Dim i As Long j As Long Dim currentValue As String nextValue As String Dim productName As String Dim pack

原文地址: https://www.cveoy.top/t/topic/hLb9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录