=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