示例图片

在 Excel 中,有时需要对可见单元格中的数字进行排名。一般的操作是复制需要排名的数据至辅助表,使用 RANK 函数进行排名,然后再将排名结果复制回原表格。但在 Excel 中,没有像 WPS 那样的“复制至可见单元格”选项,而且使用 RANK 函数操作起来比较麻烦。

下面是使用 VBA 实现的解决思路:

Sub RankNumbers()
Dim rng As Range
Dim cell As Range
Dim rank As Long

' 设置选区为 rng
Set rng = Selection

' 检查选区是否有两列
If rng.Columns.Count <> 2 Then
MsgBox "请选择两列"
Exit Sub
End If

' 遍历 rng 的每个单元格
For Each cell In rng.Cells
' 如果单元格在第一列且可见
If cell.Column = rng.Column And cell.EntireRow.Hidden = False Then
' 如果单元格是数字
If IsNumeric(cell.Value) Then
' 计算单元格的排名值,忽略隐藏的单元格
rank = Application.WorksheetFunction.Rank(cell.Value, rng.Columns(1).SpecialCells(xlCellTypeVisible), 0)
' 在第二列上输出排名值
cell.Offset(0, 1).Value = rank
End If
End If
Next cell
End Sub

以上 VBA 代码可以实现对可见单元格中的数字进行排名。使用该代码的步骤如下:

  1. 打开 Excel,进入包含要进行排名的工作表。
  2. 选择需要进行排名的两列数据。
  3. 按下 Alt + F11 打开 VBA 编辑器。
  4. 通过点击菜单中的 “插入”,然后选择 “模块” 来插入一个新模块。
  5. 将提供的代码粘贴到模块中。
  6. 关闭 VBA 编辑器。
  7. 按下 Alt + F8 打开 “宏” 对话框。
  8. 从列表中选择 “RankNumbers” 宏,然后点击 “运行”。

这样就能快速对可见单元格中的数字进行排名,并在第二列输出排名结果。

排名示例图片

如上图所示,通过运行上述 VBA 代码,可以方便地对可见单元格中的数字进行排名。选区的第一列是要进行排名的数据,第二列将显示排名结果。

注意事项:

  • 在运行宏之前,确保已选择正确的两列数据。
  • 代码会自动忽略隐藏的行,只对可见单元格进行排名。
  • 只有包含数字的单元格才会进行排名,其他类型的值会被忽略。
  • 排名结果将显示在选定范围的第二列中。