程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从范围复制行并拆分单元格值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从范围复制行并拆分单元格值?

开发过程中遇到从范围复制行并拆分单元格值的问题如何解决?下面主要结合日常开发的经验,给出你关于从范围复制行并拆分单元格值的解决方法建议,希望对你解决从范围复制行并拆分单元格值有所启发或帮助;

我正在尝试为以下问题寻找解决方案。我在 Excel 中有一个基于简化形式的以下类型数据导出的范围:

@H_132_16@matt;杰克;约翰 @H_132_16@matt
任务 日期 名称
task1 date1 约翰
task2 date2
task3 date3 马丁;杰克
task4 date4

为了更好的分析,我想使用 VBA 创建一个 ,它创建一个新的范围,其中只包含单元格中的单个值。因此,“名称”列中的单元格必须分成多行,以防有多个名称以分号分隔。

我希望将新范围复制到新工作表中,如下所示:

@H_132_16@matt @H_132_16@matt
任务 日期 名称
task1 date1 约翰
task2 date2
task2 date2 jack
task2 date2 约翰
task3 date3 马丁
task3 date3 jack
task4 date4

不幸的是,我还没有找到合适的解决方案,所以我想我可以在这里找到一些帮助。非常感谢!

解决方法

使用分隔字符串对列进行逆透视

  • 调整常量部分中的值。

代码

Option Explicit

Sub uvpivotSeparated()
    
    ' source
    Const sName As String = "Sheet1"
    Const sFirst As String = "A1"
    Const sepCol As Long = 3
    ' DesTination
    Const dName As String = "Sheet2"
    Const dFirst As String = "A1"
    ' Other
    Const Delimiter As String = "; "
    
    ' Workbook
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    ' Define source Range.
    Dim rg As Range: Set rg = wb.Worksheets(sName).Range(sFirst)
    With rg.CurrentRegion
        Set rg = rg.Resize(.Row + .Rows.Count - rg.Row,_
            .column + .columns.Count - rg.column)
    End With
    
    ' Write values from source Range to Data Array.
    Dim Data As Variant: Data = rg.Value
    Dim srCount As Long: srCount = UBound(Data,1)
    Dim dcCount As Long: dcCount = UBound(Data,2)
    Dim scCount As Long: scCount = dcCount + 1
    
    ' Add a column to Data Array.
    ReDim Preserve Data(1 To srCount,1 To scCount)
    
    ' Calculate Result Array Rows Count,replace each separated value
    ' with an array,and write its upper bound to the extra column.
    Dim drCount As Long: drCount = 1 ' headers
    Dim i As Long
    For i = 2 To srCount
        Data(i,sepCol) = Split(Data(i,sepCol),Delimiter)
        Data(i,scCount) = UBound(Data(i,sepCol))
        drCount = drCount + Data(i,scCount) + 1
    Next i
    
    ' Define Result Array.
    Dim Result As Variant: ReDim Result(1 To drCount,1 To dcCount)
    ' Write headers.
    Dim j As Long
    For j = 1 To dcCount
        Result(1,j) = Data(1,j)
    Next j
    ' Write body.
    Dim k As Long: k = 1 ' headers
    Dim n As Long
    For i = 2 To srCount
        For n = 0 To Data(i,scCount)
            k = k + 1
            For j = 1 To dcCount
                If j <> sepCol Then
                    Result(k,j) = Data(i,j)
                End If
            Next j
            Result(k,sepCol) = Data(i,sepCol)(n)
         Next n
    Next i
    
    ' Write values from Result Array to DesTination Range.
    With wb.Worksheets(dName).Range(dFirst).Resize(,dcCount)
        .Resize(drCount).Value = Result
        ' Clear contents below.
        '.Resize(.Worksheet.Rows.Count - drCount - .Row + 1) _
            .offset(drCount).ClearContents
    End With
    
End Sub

大佬总结

以上是大佬教程为你收集整理的从范围复制行并拆分单元格值全部内容,希望文章能够帮你解决从范围复制行并拆分单元格值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: