我想要可以让用户自己选中数据区域和展示区域,行标题数量和列标题数量
时间: 2024-02-22 15:58:04 浏览: 59
Dreamweaver中Spry区域功能说明
以下是 VBA 代码实现用户可以自己选中数据区域和展示区域,以及指定行标题数量和列标题数量的功能:
```vb
Sub MergeWorksheets()
Dim mergedWorksheet As Worksheet
Dim sourceWorksheet As Worksheet
Dim lastRow As Long
Dim lastColumn As Long
Dim destinationColumn As Long
Dim sourceColumn As Long
Dim sourceRow As Long
Dim dataRange As Range
Dim displayRange As Range
Dim rowHeaderCount As Long
Dim columnHeaderCount As Long
' 让用户选择数据区域和展示区域
Set dataRange = Application.InputBox("请选择数据区域", Type:=8)
Set displayRange = Application.InputBox("请选择展示区域", Type:=8)
' 让用户指定行标题数量和列标题数量
rowHeaderCount = Application.InputBox("请输入行标题数量")
columnHeaderCount = Application.InputBox("请输入列标题数量")
Set mergedWorksheet = Worksheets.Add(after:=Worksheets(Worksheets.Count))
mergedWorksheet.Name = "Merged Data"
destinationColumn = 1
' 处理数据区域中的每一列
For sourceColumn = 1 To dataRange.Columns.Count
' 判断当前列是否为行标题列
If sourceColumn <= rowHeaderCount Then
' 如果是行标题列,则直接将该列复制到目标表中
dataRange.Columns(sourceColumn).Copy mergedWorksheet.Cells(1, destinationColumn)
destinationColumn = destinationColumn + 1
Else
' 如果不是行标题列,则处理该列中的每一个非空单元格
For sourceRow = 1 To dataRange.Rows.Count
If Not IsEmpty(dataRange.Cells(sourceRow, sourceColumn)) Then
' 将该单元格的值复制到目标表中对应的位置
mergedWorksheet.Cells(sourceRow + rowHeaderCount, destinationColumn).Value = dataRange.Cells(sourceRow, sourceColumn).Value
End If
Next sourceRow
destinationColumn = destinationColumn + 1
End If
Next sourceColumn
' 处理展示区域中的每一个非空单元格
For Each cell In displayRange
' 将该单元格的值复制到目标表中对应的位置
mergedWorksheet.Cells(cell.Row, cell.Column + rowHeaderCount).Value = cell.Value
Next cell
End Sub
```
上述代码会先让用户选择数据区域和展示区域,并让用户指定行标题数量和列标题数量。然后会将数据区域中的数据按照指定的行标题数量和列标题数量进行处理,将结果合并到一个新建的工作表中。同时,还会将展示区域中的数据复制到目标表中对应的位置。注意,在处理数据区域时,如果某一列为行标题列,则直接将该列复制到目标表中,否则只复制该列中非空单元格的值。
阅读全文