Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用VBA识别特定范围内的第一个emtpy列_Excel_Vba - Fatal编程技术网

Excel 使用VBA识别特定范围内的第一个emtpy列

Excel 使用VBA识别特定范围内的第一个emtpy列,excel,vba,Excel,Vba,我有以下Excel电子表格: A B C D E F G H 1 2019-03 2019-04 2019-05 2019-06 2019-07 Total 2 3 Revenue 500 600

我有以下Excel电子表格:

       A                 B         C         D        E          F         G        H
1                     2019-03   2019-04   2019-05   2019-06   2019-07   Total
2    
3   Revenue             500       600                                  1.100
4   COGS                -40       -30                                    -70
5   Gross Profit        460       570        0        0        0       1.030
6   
7   OPEX                -10       -12                                    -22
8   Interests           -20       -50                                    -70
9
8   EBT                 430       508        0        0        0         938
公式:

Row 5 = SUMS of Row 3 and Row 4
Row 8 = SUMS of Row 5, Row 7 and Row 8
Column G = SUMS of Columns B to H
电子表格显示了公司每月的绩效

每次到达新月份时,我都希望将上个月的值复制到新月份。因此,我需要识别第一个空列。 我尝试从以下位置使用VBA解决方案:

现在的问题是,与问题I相反,有一个新的列G,显示总体性能。 因此,使用上述代码,我将得到列H,但我希望将列D标识为第一个空列

我认为解决方案可能是将VBA查找第一个空列的范围限制为
列B:F


如何更改以上代码以实现此?

< P>这将给您最后一个使用的Calk 3行,然后给空白单元格

<代码> + 1 < /代码>。
Sheet1.Rows("3").CurrentRegion.Columns.Count

这将给你最后一个使用的Calk在行3,然后<代码> + 1 < /代码>空白单元格

Sheet1.Rows("3").CurrentRegion.Columns.Count
用这个

Dim c As Long
c = Sheet1.Cells(3, Sheet1.Columns.Count).End(xlToLeft).Offset(ColumnOffset:=-1).End(xlToLeft).Column 
它使用这个

c = Sheet1.Cells(3, Sheet1.Columns.Count).End(xlToLeft) 
查找最后使用的列(在示例G中)。然后向左走一列

.Offset(ColumnOffset:=-1)
并再次查找最后使用的列(从那里开始)

最后,您可以使用
c+1
在上次使用的列的右侧获取空列


注意:如果没有空列,则
c
将为
1
,因此您可以轻松测试:

If c = 1 Then
    MsgBox "No empty columns found", vbCritical
    Exit Sub
End If
用这个

Dim c As Long
c = Sheet1.Cells(3, Sheet1.Columns.Count).End(xlToLeft).Offset(ColumnOffset:=-1).End(xlToLeft).Column 
它使用这个

c = Sheet1.Cells(3, Sheet1.Columns.Count).End(xlToLeft) 
查找最后使用的列(在示例G中)。然后向左走一列

.Offset(ColumnOffset:=-1)
并再次查找最后使用的列(从那里开始)

最后,您可以使用
c+1
在上次使用的列的右侧获取空列


注意:如果没有空列,则
c
将为
1
,因此您可以轻松测试:

If c = 1 Then
    MsgBox "No empty columns found", vbCritical
    Exit Sub
End If

嗨,佩赫,谢谢你的代码,但当我试图在我的文件上运行它时,不知怎的,我得到了运行时错误424。@米奇,我用你例子中的数据测试了它。用这些数据测试一下,我发现了问题。现在它运行得很好。嗨,佩赫,谢谢你的代码,但当我试图在我的文件上运行它时,不知怎的,我得到了运行时错误424。@Michi好吧,我用你例子中的数据测试了它。用这些数据测试一下,我发现了问题。现在它运行得很好。