You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel选取最小数值分组单元格区域并返回中间单元格信息的方案

我来帮你搞定这个Excel的需求!下面分别提供公式方案和VBA代码方案,你可以根据自己的使用习惯来选择:

公式方案(适用于Excel 365/2021及以上版本)

这个方案利用Excel的LET函数简化逻辑,一步到位完成计算,可读性和维护性都很好:

=LET(
    rng, BHS2:BWT2,
    min_val, MIN(rng),
    first_col, MATCH(min_val, rng, 0),
    last_col, MATCH(2, 1/(rng=min_val)),
    mid_col, ROUND((first_col + last_col)/2, 0),
    mid_val, INDEX(rng, mid_col),
    header, INDEX(BHS$1:BWT$1, mid_col),
    mid_val & " " & header
)

公式细节说明:

  • rng:定义当前行的目标数据区域(BHS到BWT列)
  • min_val:提取该行的最小数值
  • first_col:定位第一个等于最小值的单元格在区域内的位置
  • last_col:通过数组运算找到最后一个等于最小值的单元格位置
  • mid_col:计算连续最小值区域的中间列位置(用ROUND处理奇数个单元格的情况)
  • mid_val和header:分别提取中间单元格的数值,以及该列对应的第1行标题
  • 最后把数值和标题拼接起来,写入BWU列

把这个公式粘贴到BWU2单元格,然后下拉填充到BWU51即可。如果是旧版Excel(不支持LET),更推荐用下面的VBA方案。

VBA代码方案(适用于所有Excel版本)

如果需要批量处理或者使用旧版Excel,VBA代码会更灵活稳定。按以下步骤操作:

  1. 打开你的Excel文件,按下Alt + F11打开VBA编辑器
  2. 右键点击左侧的工作表名称,选择「插入」→「模块」
  3. 粘贴下面的代码:
Sub GetMinMidValueAndHeader()
    Dim ws As Worksheet
    Dim targetRng As Range
    Dim rowNum As Integer
    Dim minVal As Double
    Dim startCol As Integer, endCol As Integer
    Dim midCol As Integer
    Dim midCellVal As Double
    Dim header As String
    
    ' 替换成你的工作表名称,比如Sheets("数据工作表")
    Set ws = ActiveSheet
    
    ' 遍历第2行到第51行
    For rowNum = 2 To 51
        ' 定位当前行的目标区域:BHS到BWT列
        Set targetRng = ws.Range("BHS" & rowNum & ":BWT" & rowNum)
        ' 获取当前行的最小数值
        minVal = Application.Min(targetRng)
        
        ' 找到第一个出现最小值的列
        startCol = targetRng.Find(What:=minVal, LookIn:=xlValues, LookAt:=xlWhole).Column
        ' 找到最后一个出现最小值的列(反向查找)
        endCol = targetRng.Find(What:=minVal, LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious).Column
        
        ' 计算中间列的位置
        midCol = Round((startCol + endCol) / 2, 0)
        ' 提取中间单元格的数值和对应列标题
        midCellVal = ws.Cells(rowNum, midCol).Value
        header = ws.Cells(1, midCol).Value
        
        ' 将结果写入BWU列
        ws.Range("BWU" & rowNum).Value = midCellVal & " " & header
    Next rowNum
    
    MsgBox "处理完成!所有结果已写入BWU列。"
End Sub

代码细节说明:

  • 代码会自动遍历第2到51行,针对每行找到最小数值的连续区域
  • 通过Find方法定位最小值区域的首尾列,计算中间列后提取对应内容
  • 最后把拼接好的结果写入同行的BWU列
  • 运行后会弹出提示框告知处理完成

运行代码时,直接在VBA编辑器里点击「运行」按钮,或者回到Excel界面后按下Alt + F8选择宏名称运行即可。

内容的提问来源于stack exchange,提问作者pmgibs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:29:54