2017-07-11 9 views
0

私は行を通過して重複をチェックするこのコードを持っています。重複がある場合は、行を非表示にする必要があります。しかし、それはそれを隠すことはありません。Excel vbaは行を非表示にできません

Function sumAll() 

Dim firstRow As Long 
firstRow = 5 
Dim lastRow As Long 
lastRow = 1424 
Dim aRow As Long 

Dim totalDoubles As Long 
totalDoubles = 0 

Dim sumResult As Double 
sumResult = 0 
Dim previousValue As String 

previousValue = -1 
For aRow = firstRow To lastRow 
    If Cells(aRow, 1).Value <> previousValue Then 
     sumResult = sumResult + Cells(aRow, 2) 
     previousValue = Cells(aRow, 1) 
     Cells(aRow, 1).EntireRow.Hidden = True 
    Else 
     totalDoubles = totalDoubles + 1 

    End If 
Next aRow 
sumAll = sumResult 
MsgBox ("end: " & totalDoubles) 

End Function 

私もSheets("Sheet name").Rows("5:5").EntireRow.Hidden=Trueを試みたが、それは同様に何の影響も与えませんでした。

Rows(aRow).Hidden = True 

:@Rik Sportelが述べたように、あなたが任意の値またはオブジェクトを返すされていないとして、これはFunctionであるためには理由がありません

+2

'サブsumAll(として全体のことを宣言します)' ... 'Sub'を終了します。関数はパラメータをとり、戻り値を返すものです。あなたがやっていることは、サブが必要です。関数の実行中は、ワークシート/ワークブックを変更することはできません。 –

答えて

1

Cells(aRow, 1).EntireRow.Hidden = True 

にを変更してみてくださいそれで、普通のSubにすることができます。 、すべてのあなたのCellsRowsがあなたのWorksheetオブジェクトと完全に修飾されていることを確認してくださいWith文を追加するには

With Sheets("YourSheetName") 
    For aRow = firstRow To lastRow 
     If .Cells(aRow, 1).Value <> previousValue Then 
      sumResult = sumResult + .Cells(aRow, 2) 
      previousValue = .Cells(aRow, 1) 
      .Rows(aRow).Hidden = True 
     Else 
      totalDoubles = totalDoubles + 1 
     End If 
    Next aRow 
End With 
関連する問題