+ -
当前位置:首页 → 问答吧 → 请教用VBA判断单元格为空返回前一单元格值

请教用VBA判断单元格为空返回前一单元格值

时间:2011-08-05

来源:互联网

请老师帮忙

附件

填充日期.rar(4.79 KB)

2011-8-5 17:35, 下载次数: 3

作者: 风和日月   发布时间: 2011-08-05

因用IF超过7层就无法运算了,请教请教

作者: 风和日月   发布时间: 2011-08-05

仅供参考:

附件

IF嵌套7层以上.rar(3.9 KB)

2011-8-5 17:54, 下载次数: 4

作者: LangQueS   发布时间: 2011-08-05

谢谢老师指点,因本人知识有限,下了学习学习

作者: 风和日月   发布时间: 2011-08-05

复制内容到剪贴板
代码:
Sub aa()
Dim arr, h%, i%
arr = Sheet1.Range("a3:k16")
For h = 1 To UBound(arr)
For i = UBound(arr, 2) To 1 Step -1
If Len(arr(h, i)) <> 0 Then
Cells(h + 2, 12) = arr(h, i)
Exit For
End If
Next i
Next h

End Sub

附件

填充日期.rar(8.01 KB)

2011-8-5 18:16, 下载次数: 1

作者: flysum2008   发布时间: 2011-08-05

谢谢老师指点,因本人知识有限,老师能否抽空注解一下代码

作者: 风和日月   发布时间: 2011-08-05

Sub aa()
Dim arr, h%, i%
arr = Sheet1.Range("a3:k16")      '将数据区域赋值给数组arr
For h = 1 To UBound(arr)              '循环,有多少行就循环多少次
For i = UBound(arr, 2) To 1 Step -1  ''倒循环,有多少列就循环多少次,目的是判断靠近空单元格的第一个日期
If Len(arr(h, i)) <> 0 Then                    '如果单元格不是空值,则
Cells(h + 2, 12) = arr(h, i)                    '将arr(h, i) 写入L列
Exit For                                                     '退出循环,因为已经找到日期了
End If
Next i
Next h

End Sub

你可以打开代码窗口,按F8逐语句就会明白了。

作者: flysum2008   发布时间: 2011-08-05

谢谢老师的讲解

作者: 风和日月   发布时间: 2011-08-05

结果等于最后数据就是了,不必IF。
Sub test2()
Worksheets("sheet1").Activate
For i = 3 To [a65536].End(3).Row
    Cells(i, 12) = Cells(i, 12).End(1).Value
Next
End Sub

附件

填充日期.rar(7.39 KB)

2011-8-5 18:44, 下载次数: 11

作者: yaozong   发布时间: 2011-08-05

请老师解决下,我更改列,谢谢

附件

填充日期更改了初始列请老师解决一下.rar(5.22 KB)

2011-8-5 18:54, 下载次数: 4

作者: 风和日月   发布时间: 2011-08-05

Sub test2()
Worksheets("sheet2").Activate
For i = 3 To Cells.Find("*", , , , 1, 2).Row
    If Cells(i, 2) = "" Then
       Cells(i, 12) = Cells(i, 14).Value
    Else
       Cells(i, 12) = Cells(i, 12).End(1).Value
    End If
Next
End Sub

附件

填充日期更改了初始列请老师解决一下.rar(7.85 KB)

2011-8-5 19:08, 下载次数: 5

作者: yaozong   发布时间: 2011-08-05

老师能否帮忙讲解一下,谢谢

作者: 风和日月   发布时间: 2011-08-05

引用:
原帖由 风和日月 于 2011-8-5 19:19 发表
老师能否帮忙讲解一下,谢谢
Sub test2()
Worksheets("sheet2").Activate                   '激活表2
For i = 3 To Cells.Find("*", , , , 1, 2).Row    '3至最后数据行的循环
    If Cells(i, 2) = "" Then                    '判断/如果b列等于空白时
       Cells(i, 12) = Cells(i, 14).Value        '循环行的L列等于N列值
    Else                                        '否则
       Cells(i, 12) = Cells(i, 12).End(1).Value '循环行的L列等于L列向左有数据列的值
    End If                                      '退出判断
Next                                            '下一个/结束循环
End Sub

作者: yaozong   发布时间: 2011-08-05

相关阅读 更多