大佬教程收集整理的这篇文章主要介绍了从范围复制行并拆分单元格值,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为以下问题寻找解决方案。我在 Excel 中有一个基于简化形式的以下类型数据导出的范围:
任务 | 日期 | 名称 |
---|---|---|
task1 | date1 | 约翰 |
task2 | date2 | @H_132_16@matt;杰克;约翰|
task3 | date3 | 马丁;杰克 |
task4 | date4 | @H_132_16@matt
为了更好的分析,我想使用 VBA 创建一个 宏,它创建一个新的范围,其中只包含单元格中的单个值。因此,“名称”列中的单元格必须分成多行,以防有多个名称以分号分隔。
我希望将新范围复制到新工作表中,如下所示:
任务 | 日期 | 名称 |
---|---|---|
task1 | date1 | 约翰 |
task2 | date2 | @H_132_16@matt|
task2 | date2 | jack |
task2 | date2 | 约翰 |
task3 | date3 | 马丁 |
task3 | date3 | jack |
task4 | date4 | @H_132_16@matt
不幸的是,我还没有找到合适的解决方案,所以我想我可以在这里找到一些帮助。非常感谢!
代码
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,请注明来意。