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

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

图1

甲:对照工作表分析一下列号的规律,列乙, Ç , d , ê , ˚F , G ^ , ...对应的列号为2 , 3 , 4 , 5 , 6 , 7 , ...... ,每个数字除以3 ,依次以每3个为一组,它们的余数均为2 , 0 , 1 ,这就好办了!

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

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

私有子Worksheet_SelectionChange(按目标的ByVal范围)

调光范围

设置rng = Range(“ B6:S20”)

有目标

如果不相交(目标,rng)什么都没有

如果(.Mod 3列)= 2

.Offset(0,1).ClearContents

.Offset(0,2).ClearContents

ElseIf(.ColumnMod 3)= 0然后

.Offset(0,-1).ClearContents

.Offset(0,1).ClearContents

ElseIf(Target.Column Mod 3)= 1然后

.Offset(0,-2).ClearContents

.Offset(0,-1).ClearContents

万一

万一

结束于

结束子

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

私有子工作簿_SheetSelectionChange(ByVal Sh作为对象,ByVal目标作为范围)

调光范围

设置rng = Range(“ B6:S20”)

有目标

如果不相交(目标,rng)什么都没有

如果(.Mod 3列)= 2

.Offset(0,1).ClearContents

.Offset(0,2).ClearContents

ElseIf(.ColumnMod 3)= 0然后

.Offset(0,-1).ClearContents

.Offset(0,1).ClearContents

ElseIf(Target.Column Mod 3)= 1然后

.Offset(0,-2).ClearContents

.Offset(0,-1).ClearContents

万一

万一

结束于

结束子

代码的图片版如下:

(0)

相关推荐