Excel VBA如何根据B1:B10区域内选中单元格动态更新A1的值
问题根源
你现有代码的问题出在取值的列索引写错了:Cells(Selection.Row, 1) 里的第二个参数1代表取第1列(也就是A列)的内容,你要拿的是B列(第2列)的激活单元格值,所以才会出现赋值为空或者取值错误的问题。
修正后代码
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 校验当前选中单元格是否属于B1:B10区域 If Not Intersect(Target, Me.Range("B1:B10")) Is Nothing Then ' 直接将选中的B列单元格值赋值给A1 Me.Range("A1").Value = Target.Value End If End Sub
运行原理说明
Worksheet_SelectionChange是工作表自带的选中变化事件,只要当前工作表的选中单元格发生变动(包括方向键移动选中、鼠标点击选中)就会自动触发,参数Target就是当前新选中的单元格对象。Intersect是VBA的区域处理方法,用于判断两个区域是否存在重叠,没有重叠就返回Nothing,这里用来判断选中的单元格是不是在你指定的B1:B10范围内。- 修正后的代码直接取选中的目标单元格本身的值赋值给A1,不用手动拼接行号列号,避免出错;用
Me指代当前代码所在的工作表,避免跨工作表操作时出现范围混乱的问题。 - 如果需要支持选中多个B1:B10区域的单元格时取第一个选中单元格的值,这段代码也可以正常兼容。
内容的提问来源于stack exchange,提问作者Alpaca
相关产品推荐
相关产品推荐

