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

使用VBA For循环求解谢丽尔生日 如何对比单元格与区域提取唯一值

VBA实现谢丽尔生日逻辑题解法

唯一值提取代码修正

你原有代码的问题在于:Range("A2:D4").Value返回的是二维数组,无法直接和单个单元格值做等值对比,你可以用工作表函数CountIf统计单元格值在目标区域的出现次数,次数为1即为唯一值,参考代码如下:

Sub FindUniqueDates()
    Dim targetRng As Range
    Dim c As Range
    Dim uniqueCol As Long ' 存储唯一值所在列号,后续清除用
    
    ' 设定要对比的候选日期区域
    Set targetRng = Range("A2:D4")
    
    ' 循环遍历你要检查的单元格区域,可根据实际存放日期的区域调整
    For Each c In Range("A1:A12") ' 对应你原代码循环的1-12行A列单元格
        If WorksheetFunction.CountIf(targetRng, c.Value) = 1 Then
            MsgBox c.Value & " 是唯一日期,位于第" & c.Row & "行"
            ' 记录唯一值所在列
            uniqueCol = c.Column
        End If
    Next c
    
    ' 后续要清除唯一值所在列内容的话,取消注释下面一行即可
    ' Columns(uniqueCol).ClearContents
End Sub

如果你的日期是按“月/日”格式存储,确认单元格格式一致即可正常对比。

谢丽尔生日逻辑题推导结果

推导过程:

  • 先排除唯一日期18、19对应的5月、6月(阿尔伯特确定伯纳德不知道,说明他拿到的月份里没有唯一日期),剩余候选:7月14日、7月16日、8月14日、8月15日、8月17日
  • 伯纳德听完阿尔伯特的话就知道答案,说明剩余候选里他拿到的日期是唯一的,排除出现2次的14日,剩余:7月16日、8月15日、8月17日
  • 阿尔伯特听完也知道了答案,说明他拿到的月份只剩1个候选,排除有2个候选的8月,最终答案为7月16日

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:54:03