EXCEL中,我想用VBA代码实现(E列F列G列H列I列)数据按条件输入.盼高人相助!
EXCEL中,我想用VBA代码实现(E列F列G列H列I列)数据按条件输入.盼高人相助!前言:我原来的EXCEL表格行数很多,但下一行和上一行相同的地方也比较多,完全不同的...
EXCEL中,我想用VBA代码实现(E列F列G列H列I列)数据按条件输入.盼高人相助! 前言:我原来的EXCEL表格行数很多,但下一行和上一行相同的地方也比较多,完全不同的只有 k列,只有这列的数据每行都要填,(其它大多数的数据基本上都是自动生)。 具体要求如下: 一、当K列某单元格(该单元格原来是空白,不是修改数据)输入数据时: (一)如果同一行的C列单元格其上一单元格相等时: <1>、 如果本行的 E、F、G、H、I列中已有数据(不是空白时),保持原有数据不变。 <2>、如果本行的 E、F、G、H、I列中是空白时(没有数据),则这些单元格则等于上一单元格; (二)如果C列与上一单元格不相等时,无论在K列输入数据还是改动数据,对 E、F、G、H、I列都不起作用。(E、F、G、H、I列内原有数据〈包含空白〉,都保持不变) 二、当K列某单元格只是修改数据(该单元格原来不是空白,只是修改数据)的时候,则对所有单元格不发生作用.原有数据都保持不变 三、 E、F、G、H、I列这五列数据完全独立,互不相干; 我的数据从第三行开始,6万行结束 我想要的是:当K列的单元格是《空白,也就是原来K列的单元格里面没有数据在里面》时候,在K列输入数据后 【E列/ F列/ G列/H列I列 】分别同时达到以下功能(这几列完全一样,下面我以E列为例,来说明代码要求)。(备注:如果k列原来有数据,只是改动,所有已经输入的数据都不因为k列数据变化而变化,【本代码只有在k列为空白,输入数据才有效】)。: 1). 当在K列输入数据后,将会有两种情况〈下面以在K4单元格输入数据为例〉: 1.如果此时C4等于C3时,则K4输入一个数据后,E4等于E3。 2.如果此时C4不等于C3时,则K4输入一个数据后,E4内如果没有数据,保持空白.如果E4内以经有了数据,保持原有数据。<E列内数据允许修改善> 【本代码只有在k列为空白时,输入数据才有效,如果只是修改K列数据,则对E列无效,同行E列单元格内无论是空白还是有数据都要保持不变】。 2).同样 F列 G列 H列 I列和上面的要求完相同 感谢您看完我的提问.如果解决,不胜感激.
展开
4个回答
展开全部
看得有点烦,不过楼主关心的区别K列空白不空白,楼主应该也会编程的,所以写了很多。
关于空白的识别,如更改的触发,我给个简单代码示例,首先要定义一个共用的变量,如下
Dim xx As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 11 And xx = True Then
xx = False
Cells(Target.Row, 5) = 555
Cells(Target.Row, 6) = 666
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 11 And Target.Value = "" Then
xx = True
Else
xx = False
End If
End Sub
关于空白的识别,如更改的触发,我给个简单代码示例,首先要定义一个共用的变量,如下
Dim xx As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 11 And xx = True Then
xx = False
Cells(Target.Row, 5) = 555
Cells(Target.Row, 6) = 666
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 11 And Target.Value = "" Then
xx = True
Else
xx = False
End If
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用事件代码可满足要求,详见附件。
只是要考虑K列数据输入的顺序,因为修改K列不能改变前面各列。
更多追问追答
追问
文件打不开,网页登不上
追答
文件没问题,重新下载一次吧。
代码如下:
Option Explicit
Dim S$
Private Sub Worksheet_Activate()
S = ActiveCell.Text
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim I%
If Intersect(Target, [k4:k65536]) Is Nothing Or Target.Count > 1 Then Exit Sub
If S = "" Then
If Target.Offset(0, -8) = Target.Offset(-1, -8) Then
For I = -7 To -2
If IsEmpty(Target.Offset(0, I)) Then Target.Offset(0, I) = Target.Offset(-1, I)
Next
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
S = ActiveCell.Text
End Sub
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
千言万语不如加好友,Q与此号同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
太长了,语文不好,看着头晕。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询