Excel VBA:从左侧返回第一个非隐藏列?

有没有办法获得第一个非隐藏列的列号?

所以,如果列A隐藏,返回2。
如果列A和B被隐藏,则返回3。
如果A和C隐藏,则返回2等。

Sub test() Dim ColCounter As Integer ColCounter = 1 Do While ColCounter > 0 And ColCounter < 66536 If Sheet1.Columns(ColCounter).Hidden = False Then MsgBox (ColCounter) Exit Do End If ColCounter = ColCounter + 1 Loop End Sub 

没有循环

更新:没有处理最左边的列被隐藏的情况。 如果没有细胞testing是多余的,那么Tmdean更短的解决scheme是优越的

  Sub FirstNonHidden() Dim rng1 As Range Set rng1 = Cells.SpecialCells(xlCellTypeVisible) If rng1.Column <> 1 Then MsgBox rng1.Areas(1).Column Else MsgBox "No hidden cells" End If End Sub 

最简单的方法可能是

 Dim column_num As Long column_num = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Cells(1).Column 

使用循环会更有效率,但是,像bhuang3的解决scheme,但它可以做得更简单一些。

 Dim cursor As Range, column_num As Long Set cursor = Range("A1") Do Until cursor.ColumnWidth > 0 Set cursor = cursor.Offset(0, 1) Loop column_num = cursor.Column 

尝试这个

 ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).End(xlToLeft).Column 

编辑

certificate是行不通的 在这里输入图像说明