前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >问与答67: 如何每3列中同一行只允许一个单元格中能输入数据?

问与答67: 如何每3列中同一行只允许一个单元格中能输入数据?

作者头像
fanjy
发布2019-09-24 17:55:30
1K0
发布2019-09-24 17:55:30
举报
文章被收录于专栏:完美Excel完美Excel

Q:工作表同一行中每三个单元格同时只能有一个单元格显示数据。如下图1所示,在单元格区域B6:D6中,如果在单元格B6中输入了数据,那么单元格C6和D6中的内容就会被清除;如果在单元格C6中输入了数据,那么单元格B6和D6中的内容会被清除;如果在单元格D6中输入了数据,那么单元格B6和C6中的内容就会被清除。同样,对于单元格区域E6:G6也是如此,H6:J6也是如此……,依此类推。并且,下面的第7行至第20行也都是如此。该如何实现?

图1

A:对照工作表分析一下列号的规律,列B、C、D、E、F、G、……对应的列号为2、3、4、5、6、7、……,每个数字除以3,依次以每3个为一组,它们的余数均为2、0、1,这就好办了!

如果当前输入的单元格所在列的列号除以3,余数为2,表明当前单元格在该组3个单元格的第1个单元格,那么其相邻的两个单元格中的内容就要清空。如果当前单元格所在列的列号除以3,余数为0,表明当前单元格处在3个单元格的中间,那么其相邻的左侧和右侧单元格中的内容要清空。如果当前单元格所在列的列号除以3,余数为1,表明当前单元格处在3个单元格的最后一个单元格,那么其前面的两个单元格中内容要清空。

按照这个思路,在工作表所在的模块中输入事件过程代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim rng As Range

Set rng =Range("B6:S20")

With Target

If Not Intersect(Target, rng) Is Nothing Then

If (.Column Mod 3) = 2 Then

.Offset(0,1).ClearContents

.Offset(0,2).ClearContents

ElseIf (.ColumnMod 3) = 0 Then

.Offset(0, -1).ClearContents

.Offset(0,1).ClearContents

ElseIf (Target.Column Mod 3) = 1 Then

.Offset(0,-2).ClearContents

.Offset(0,-1).ClearContents

End If

End If

End With

End Sub

如果工作簿中的所有工作表都要实现上述功能,那么可以将在工作簿模块中编写事件代码:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Dim rng As Range

Set rng =Range("B6:S20")

With Target

If Not Intersect(Target, rng) Is Nothing Then

If (.Column Mod 3) = 2 Then

.Offset(0,1).ClearContents

.Offset(0,2).ClearContents

ElseIf (.ColumnMod 3) = 0 Then

.Offset(0,-1).ClearContents

.Offset(0,1).ClearContents

ElseIf (Target.Column Mod 3) = 1 Then

.Offset(0,-2).ClearContents

.Offset(0,-1).ClearContents

End If

End If

End With

End Sub

代码的图片版如下:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档