EXCEL中,我想用VBA代码实现 E列/ F列/ G列/H列I列数据有条件输入,我的将再给100分的表示感谢

前言:我原来的EXCEL表格行数很多,但下一行和上一行相同的地方也比较多,完全不同的只有 J列 和 k列,只有这两列的数据每行都要填,(其它大多数的数据基本上都是自动生)。(备注:K列和J列的数据互相独立,没有关联性),原来用函数公式执行以下功能,但因为行数太多,表格反应非常慢,所以想换成VBA来解决)我的数据从第三行开始,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列和上面的要求完相同 感谢您看完我的提问.如果解决,不胜感激.

【图例仅供参考】

修改了程序,是不是这样?试一下。
Private Sub Worksheet_Change(ByVal Target As Range)
H = Target.Row: L = Target.Column
Hs = 3: He = Cells(60000, 3).End(xlUp).Row
If He < Hs Then
He = Hs
Else
He = He + 1
End If
Lb = 11
Columns("D:D").NumberFormatLocal = "yyyy/m/d h:mm;@"
Columns("B:B").NumberFormatLocal = "@"
If Hs <= H And H <= He And L = Lb Then
If H = Hs Then
If Cells(H, 1) = "" Then Cells(H, 1) = 1
If Cells(H, 2) = "" Then Cells(H, 2) = "00001"
If Cells(H, 3) = "" Then Cells(H, 3).Select
If Cells(H, 4) = "" Then Cells(H, 4) = Now
Else
If Cells(H, 1) = "" Then Cells(H, 1) = H - Hs + 1
If Cells(H, 3) = "" Or (Cells(H, 3) = Cells(H - 1, 3)) Then
Cells(H, 2) = Cells(H - 1, 2)
For LL = 3 To 9
Cells(H, LL) = Cells(H - 1, LL)
Next
Else
编号 = Val(Cells(H - 1, 2))
For I = 1 To 5 - Len(LTrim(Str$(编号)))
订单编号 = 订单编号 + "0"
Next
订单编号 = 订单编号 + LTrim(Str$(编号 + 1))
Cells(H, 2) = 订单编号
Cells(H, 4) = Now
End If
End If
End If
End Sub追问

我把两段比较了半天,也没有看出来,我要的ID号用行号减2是哪一句代码呀?

追答

If Cells(H, 1) = "" Then Cells(H, 1) = H - Hs + 1
H: 当前行号,假设H=4
Hs:记录的起始行号,本程序Hs=3,如果调整记录起始行号时,直接对Hs赋值即可,
这样当前ID=H-Hs+1=4-3+1=2

来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-05-11
把sheet1发过来,我试验一下,今晚不一定能完成,请理解
发邮箱:xymath@qq.com
第2个回答  2014-05-11
给我发邮件吧!我来帮你:
ouyangff@qq.com

...F列\/ G列\/H列I列数据有条件输入,我的将再给100分的表示感谢_百度知 ...
Private Sub Worksheet_Change(ByVal Target As Range)H = Target.Row: L = Target.Column Hs = 3: He = Cells(60000, 3).End(xlUp).Row If He < Hs Then He = Hs Else He = He + 1 End If Lb = 11 Columns("D:D").NumberFormatLocal = "yyyy\/m\/d h:mm;@"Columns("B:...

excel 如何用vba 实现 某列 限制输入范围
1、打开要处理的excel文档,2、按alt+f11,打开vba编辑窗口,3、双击左侧树中的thissheet,4、在右侧的空白窗口中输入如下的内容:Private Sub Worksheet_Change(ByVal Target As Range)Dim s As StringDim i As Long, j As LongDim LL As StringLL = "D" '需要控制的列Dim cc As RangeFor Each cc In Tar...

excel VBA 对EXCEL的行、列、单元格的批量赋值、取值
cells(i,5).value=""else cells(i,5).value=cells(i,4).value+10 endif next i

Excel中,如何用VBA来执行以下功能,高手请进,若能完美运行,我将增加100...
Private Sub worksheet_change(ByVal Target As Range)If Target.Column = 11 Then '如果K列的值有变动 Call ValueChangeK(Target)ElseIf Target.Column = 3 Then '如果C列的值有变动 Call ValueChangeC(Target)End If End Sub Sub ValueChangeK(ByVal Target As Range)Dim i As Long D...

求一段excel vba代码
' 1. 给 E 列升序排序 With ws lastRow = .Cells(.Rows.Count, "E").End(xlUp).Row .Range("A1:H" & lastRow).Sort Key1:=.Range("E1"), Order1:=xlAscending, Header:=xlYes End With ' 2. 在 E 列后插入 F、G、H 列并写入文字 ws.Range("F2").Resize(lastRow - 1, ...

excel 如何用vba 实现 某列 限制输入范围
1、打开要处理的excel文档,2、按alt+f11,打开vba编辑窗口,3、双击左侧树中的thissheet,4、在右侧的空白窗口中输入如下的内容:Private Sub Worksheet_Change(ByVal Target As Range)Dim s As String Dim i As Long, j As Long Dim LL As String LL = "D" '需要控制的列 Dim cc As Range...

Excel VBA代码表示工作表中指定的列进行分裂
步骤一:选择A列数据区域,数据>>>分列,选择“分隔符号">>>下一步 步骤二:在”其他“框中输入=号,再单击”下一步“,如下图 步骤三:选择第一列,点击”不导入此列(跳过),再选择最后 列,点击”不导入此列(跳过),“目标区域”改为=$F$1 分列后结果如下 步骤四:选择F:G列,按...

EXCEL代码帮忙改成VBA命令,点击按钮自动遍历G列,循环判断省份后执行相应...
if arr(i,5)<>""" and arr(i,7)<>"" then'只处理E、G列不为空的 if vartype(arr(i,5))=vbdouble then '只处理E列为数值的 for j=2 to ubound(std)if std(j,1)=arr(i,7) then if std(j,2)<=arr(i,5) and std(j,3)>=arr(i,5) then cells(i,6) = std(j,4)...

请问一下EXCEL如何用vba语言把表格满足条件的单元个复制到另外相应的列...
On Error Resume Next 'For d = 1 To 10 ' arr(d) = 0 'Next r = Range("B2").End(xlDown).Row c = Range("B2").End(xlToRight).Column f1 = [o2]f2 = [o3]For i = 2 To c For j = 3 To r - 1 If Cells(j, i) = f1 And Cells(j + 1, i) = f2 Then Cell...

excel 用vba 宏中 用一个for循环 将 一列满足条件的后面加上 需要的数...
1、打开一个表,选中序列,点击工具-宏,开始录制。2、录制完成后按alt+f11 切换到代码编辑窗口,设置变量i为长整形,并且设置一个for循环,循环次数比要添加的工资条标签大,在end sub之前加next。3、按alt+f11切换到excel界面,再录制一个删除标题的宏,修改代码,添加for循环按alt+f8调出宏窗口。4...

相似回答