=INDEX(C30:M30,MATCH(TRUE,INDEX(C30:M30<>0,),0)+1)
会给你的第一个公式右边的单元格的值,但因为它看起来像你正在寻找更动态的东西,这不会工作得非常好,对于单元格2在第一个配方的右边,你需要这个:
=INDEX(C30:M30,MATCH(TRUE,INDEX(C30:M30<>0,),0)+2)
用于抓住出所有细胞对示出的公式的右侧将是VBA任一变调和过滤或使用VBA,例如最好的办法:
Sub toRightOfZeros()
Dim rng, cell As Range
Dim startCellCol, destCellLocX As Integer
Dim ValsArr() As String
Dim wb As Workbook
Dim foundNotZero As Boolean
Set wb = ThisWorkbook
destCellLocX = 1
foundNotZero = False
With wb.Sheets("Sheet1")
Set rng = .Range(.Cells(30, 3), .Cells(30, 13))
End With
For Each cell In rng
If foundNotZero = False Then
If Not cell.Value = 0 Then
foundNotZero = True
startCellCol = cell.Column
Exit For
End If
End If
Next
With wb.Sheets("Sheet1")
Set rng = .Range(.Cells(30, startCellCol), .Cells(30, 13))
End With
For Each cell In rng
With wb.Sheets("Sheet2")
.Cells(1, destCellLocX).Value = cell.Value
End With
destCellLocX = destCellLocX + 1
Next
End Sub
输入(在C30:M30):0 0 0 0 365 788 940 239 12 0 99
输出(表2):365 788 940 239 12 0 99
你能使用相同的INDEX()函数,但与COLUMN_NUMBER栏改变? –
@ D.R。我认为他希望所有的单元格都是正确的(基于具有6列的例子,输出是4-6行),这需要比这更多的代码,但这绝对是一个简单而优秀的解决方案,用于书面问题/标题。 – Cyril
@Daniel_Coutinho,你有固定的列数,或者数据如何坐?不确定是否需要使用动态范围,或者是否可以处理固定范围的6列(如示例)。 – Cyril