Sub MergeAndSum() Dim selectedRange As Range Dim sumValue As Double ' 检查是否选择了单元格 If Selection.Cells.Count = 1 Then MsgBox "请先选择一个区域!", vbExclamation Exit Sub End If ' 获取当前选择的区域 Set selectedRange = Selection ' 检查选择的区域是否有效 If selectedRange.Columns.Count <> 1 Then MsgBox "请选择一个横向长度为1的区域!", vbExclamation Exit Sub End If ' 初始化总和值 sumValue = 0 ' 遍历选择的区域,计算总和 For Each cell In selectedRange If IsNumeric(cell.Value) Then sumValue = sumValue + cell.Value End If Next cell ' 合并选择的区域 selectedRange.Merge ' 设置合并区域的内容为总和值 selectedRange.Value = sumValue End Sub
Sub MergeAndSumLeft() Dim selectedRange As Range Dim sumValue As Double ' 检查是否选择了单元格 If Selection.Cells.Count = 1 Then MsgBox "请先选择一个区域!", vbExclamation Exit Sub End If ' 获取当前选择的区域 Set selectedRange = Selection ' 检查选择的区域是否有效 If selectedRange.Columns.Count <> 1 Then MsgBox "请选择一个横向长度为1的区域!", vbExclamation Exit Sub End If ' 初始化总和值 sumValue = 0 ' 遍历选择的区域,计算总和 For Each cell In selectedRange If IsNumeric(cell.Offset(0, -1).Value) Then sumValue = sumValue + cell.Offset(0, -1).Value End If Next cell ' 合并选择的区域 selectedRange.Merge ' 设置合并区域的内容为左侧一系列数字的和 selectedRange.Value = sumValue End Sub
If 条件 Then ' 如果条件为真时执行的代码 ElseIf 条件2 Then ' 如果条件2为真时执行的代码 Else ' 如果以上条件都不为真时执行的代码 End If
' 例子 Sub ExampleIfStatement() Dim num As Integer num = 10 ' 简单的If语句 If num > 5 Then MsgBox "数字大于5" End If ' 带有Else的If语句 If num > 15 Then MsgBox "数字大于15" Else MsgBox "数字不大于15" End If ' 多个条件的If语句 If num > 15 Then MsgBox "数字大于15" ElseIf num > 10 Then MsgBox "数字大于10,但不大于15" Else MsgBox "数字不大于10" End If End Sub
Sub ForLoopExample() Dim total As Integer total = 0 For i = 1 To 10 total = total + i Next i MsgBox "总和为:" & total End Sub
''-------------------------------------------------------------------'' For Each...Next 循环: 用于循环遍历集合、数组或范围中的元素,而不需要指定循环次数。
For Each [元素] In 集合 ' 循环代码 Next [元素]
示例:
Sub ForEachLoopExample() Dim arr() As Integer arr = Array(1, 2, 3, 4, 5) For Each num In arr MsgBox "元素的值为:" & num Next num End Sub
获取对象
获取单元格
1 2 3 4
' 通过行与列获取单元格 Set cell1 = ws.Cells(x, y) ' 通过已有单元格偏移获取单元格 Set cell2 = cell1.Offset(1, 1) ' 向下偏移1行,向右偏移1列,偏移量可为负数
获取一列
1 2 3 4 5 6 7 8 9 10 11
Set selectedRange = Selection ' 获取选择的列 ' 遍历选定列的每个单元格 lastRow = selectedRange.Cells(selectedRange.Rows.Count, 1).End(xlUp).Row For Each cell In selectedRange If IsEmpty(cell) Then cell.value = cell.Offset(-1, 0).value '设置单元格的值 End If If cell.Row = lastRow Then Exit For End If Next cell
获取当前正在操作的工作表作为对象
1 2 3 4 5 6 7 8
' 检查是否选择了工作表 If ActiveSheet Is Nothing Then MsgBox "请先选择一个工作表!", vbExclamation Exit Sub End If ' 设置要操作的工作表 Set ws = ActiveSheet
Sub DeleteBlankRows() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim rng As Range ' 检查是否选择了工作表 If ActiveSheet Is Nothing Then MsgBox "请先选择一个工作表!", vbExclamation Exit Sub End If ' 设置要操作的工作表 Set ws = ActiveSheet ' 取消合并所有单元格 On Error Resume Next ' 忽略错误,以防某些单元格没有合并 Set mergedRange = ws.Cells mergedRange.UnMerge On Error GoTo 0 ' 恢复错误处理 ' 获取工作表中最后一行的行号 lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' 循环遍历每一行,从最后一行向上查找空行并删除 For i = lastRow To 1 Step -1 If Application.WorksheetFunction.CountA(ws.Rows(i)) = 0 Then ' 如果行中没有非空单元格,则删除该行 ws.Rows(i).Delete End If Next i End Sub
Sub test() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim cell As Range Dim mergeRange As Range Dim sumRange As Range Dim cellHeight As Long Dim value As Long ' 检查是否选择了工作表 If ActiveSheet Is Nothing Then MsgBox "请先选择一个工作表!", vbExclamation Exit Sub End If ' 设置要操作的工作表 Set ws = ActiveSheet ' 获取工作表中最后一行的行号 lastRow = ws.Cells(ws.Rows.Count, 4).End(xlUp).Row ' 插入新列在第四列之前 Columns(4).Insert Shift:=xlToRight i = 1 For Each cell In ws.Range("E1:E" & lastRow) If Not IsEmpty(cell) Then ' 如果第四列中有数据 If cell.MergeCells Then ' 如果单元格是合并单元格,获取合并单元格的长度 cellHeight = i + cell.MergeArea.Rows.Count - 1 ' 合并新的单元格 Set mergeRange = ws.Range("D" & i & ":D" & cellHeight) mergeRange.Merge Set sumRange = ws.Range("C" & i & ":C" & cellHeight) value = WorksheetFunction.Sum(sumRange) mergeRange.value = value i = cellHeight + 1 Else Set mergeRange = Range("D" & i) Set sumRange = Range("C" & i) mergeRange.value = sumRange.value i = i + 1 End If End If Next cell End Sub