请写一段VBA代码,实现以下功能:将一个工作表内的数据按指定的列拆分成不同的工作表,
时间: 2023-08-31 15:43:48 浏览: 175
### 回答1:
以下是一段 VBA 代码,实现了上述功能:
```
Sub SplitData()
Dim ws As Worksheet
Dim wb As Workbook
Dim lRow As Long
Dim i As Integer
Dim sColumn As String
Dim vData As Variant
Dim vSplit As Variant
Dim sSplit As String
' 设置要拆分的工作表和工作簿
Set ws = ThisWorkbook.Sheets("Sheet1")
Set wb = ThisWorkbook
' 设置要拆分的列(以字母表示)
sColumn = "A"
' 获取数据的最后一行
lRow = ws.Range(sColumn & Rows.Count).End(xlUp).Row
' 获取数据范围
vData = ws.Range(sColumn & "1:" & sColumn & lRow)
' 拆分数据并保存到新工作表
For i = 1 To UBound(vData, 1)
sSplit = vData(i, 1)
If Not IsError(Application.Match(sSplit, vSplit, 0)) Then
' 如果拆分的数据已经存在,则将数据添加到该工作表
wb.Sheets(sSplit).Range("A" & Rows.Count).End(xlUp).Offset(1, 0) = vData(i, 1)
Else
' 如果拆分的数据不存在,则新建工作表并将数据添加到该工作表
ReDim Preserve vSplit(0 To i - 1)
vSplit(i - 1) = sSplit
Set wsNew = wb.Sheets.Add
wsNew.Name = sSplit
wsNew.Range("A1") = sSplit
wsNew.Range("A" & Rows.Count).End(xlUp).Offset(1, 0) = vData(i, 1)
End If
Next i
End Sub
```
上述代码会按照指定的列(默认为 A 列)拆分工作表,将拆分后的数据保存到不同的工作表中。
### 回答2:
以下是一段VBA代码,可以实现将一个工作表内的数据按指定的列拆分成不同的工作表:
```VBA
Sub SplitData()
Dim ws As Worksheet
Dim newWs As Worksheet
Dim lastRow As Long
Dim columnName As String
Dim uniqueValues As Collection
Dim cellValue As Variant
Dim i As Integer
' 设置要拆分的工作表
Set ws = ThisWorkbook.Worksheets("Sheet1")
' 设置要拆分的列名
columnName = "A"
' 获取最后一行的行号
lastRow = ws.Cells(ws.Rows.Count, columnName).End(xlUp).Row
' 创建集合对象用于存储唯一值
Set uniqueValues = New Collection
' 循环遍历指定列的数据,将唯一值存储进集合对象
On Error Resume Next
For i = 2 To lastRow
cellValue = ws.Range(columnName & i).Value
uniqueValues.Add cellValue, CStr(cellValue)
Next i
On Error GoTo 0
' 循环遍历集合对象,创建并命名新的工作表
For i = 1 To uniqueValues.Count
Set newWs = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
newWs.Name = "Sheet" & i
' 在新的工作表内复制指定列的标题行
ws.Rows(1).Copy Destination:=newWs.Rows(1)
' 在新的工作表内复制拥有相同值的数据行
On Error Resume Next
For j = 2 To lastRow
cellValue = ws.Range(columnName & j).Value
If cellValue = uniqueValues.Item(i) Then
ws.Rows(j).Copy Destination:=newWs.Rows(newWs.Cells(newWs.Rows.Count, columnName).End(xlUp).Row + 1)
End If
Next j
On Error GoTo 0
Next i
End Sub
```
请将代码拷贝到VBA编辑器中,在编辑器窗口内按下F5运行代码。这段代码会将在“Sheet1”工作表的A列内的数据拆分到不同的工作表中,每个工作表中只包含拥有相同值的数据行。拆分后的工作表名称分别为“Sheet1”,“Sheet2”,“Sheet3”......,数据行与源工作表一致。
### 回答3:
以下是一个可以实现将一个工作表内的数据按指定的列拆分成不同工作表的VBA代码:
```vba
Sub SplitDataByColumn()
Dim sourceSheet As Worksheet
Dim targetSheet As Worksheet
Dim lastRow As Long
Dim columnToSplit As Integer
Dim uniqueValues As Collection
Dim cellValue As Variant
' 设置源数据所在的工作表,这里假设数据在Sheet1中
Set sourceSheet = ThisWorkbook.Worksheets("Sheet1")
' 设置按照哪一列拆分数据,这里假设是列A,即第1列
columnToSplit = 1
' 初始化列,用于储存不同的值
Set uniqueValues = New Collection
' 遍历源数据的拆分列,将不同的值添加到uniqueValues中
lastRow = sourceSheet.Cells(sourceSheet.Rows.Count, columnToSplit).End(xlUp).Row
On Error Resume Next
For i = 2 To lastRow
cellValue = sourceSheet.Cells(i, columnToSplit).Value
If Not IsError(cellValue) Then
uniqueValues.Add cellValue, CStr(cellValue)
End If
Next i
On Error GoTo 0
' 按照uniqueValues的值创建新的工作表,并将对应数据复制到相应工作表
For Each cellValue In uniqueValues
Set targetSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
targetSheet.Name = CStr(cellValue)
sourceSheet.UsedRange.Copy Destination:=targetSheet.Range("A1")
Next cellValue
' 修改拆分后工作表的标题行,假设源数据的标题行在第一行
For Each targetSheet In ThisWorkbook.Sheets
targetSheet.Rows(1).Font.Bold = True
Next targetSheet
End Sub
```
这段代码可以根据指定的列,将源工作表中的数据拆分成不同的工作表。你需要将源数据所在的工作表名称更改为实际的工作表名称,并指定按照哪一列拆分数据(默认为列A)的列号。这段代码将为每个不同的值创建一个新的工作表,并将具有对应值的行复制到相应的工作表。最后,代码还会将拆分后的工作表的标题行加粗以突出显示。
阅读全文