-1

エクセルVBAのコードで困っています。

私がやりたいことは、シート 1 の RANGE 内のセルが <= 2000 の場合、シート 2 の特定の行を非表示にすることです。そのため、その範囲内の 1 つのセルのみが、他の行の <= 2000 になります。非表示にするシート。腐ったリンゴが束を台無しにするようなものです。

どんな助けでも大いに感謝します。前もって感謝します。

編集: 動作していないコード: Edit2: 与えられたコメントに基づいてコードが更新されましたが、まだ機能していません。

Private Sub HideRows()

   Sheets("Summary").Cells.EntireRow.Hidden = False

   For Each cell In Sheets("Worksheet").Range("G9:P9")
     If Abs(cell.Value) < 2000 Then
         Sheets("Summary").Rows(11).EntireRow.Hidden = True
         Sheets("Summary").Rows(23).EntireRow.Hidden = True
         Sheets("Summary").Rows(43).EntireRow.Hidden = True
         Sheets("Summary").Rows(54).EntireRow.Hidden = True
         Sheets("Summary").Rows(78).EntireRow.Hidden = True
         Sheets("Summary").Rows(90).EntireRow.Hidden = True
     End If
   Next
End Sub

コードには、End Select、Next、End Sub などの正しいエンダーも含まれています。

-マット

4

6 に答える 6

2

私はこのようにします:

Private Sub HideRows()
     Worksheets("Summary").Cells.EntireRow.Hidden = False

     For Each cell In Sheets("Worksheet").Range("G9:P9")
        If Abs(cell) < 2000 Then
            Worksheets("Summary").Range("A11,A22,A43,A54,A78,A90").EntireRow.Hidden = True
        End If
    Next
End Sub

オブジェクトを使用して、Range連続していないセルを参照すると、1 行になるため、これを使用することをお勧めします。

于 2013-07-05T15:20:24.857 に答える
2

次のようなループを試して回避したい場合があります。

Sub NoLoopSample()
Dim lngLessThenSum As Long, lngGreaterThenSum As Long
Dim rngTestRange As Range

Set rngTestRange = Sheets("Worksheet").Range("G9:P9")

lngBetween2k4k = WorksheetFunction.SumIfs(rngTestRange, rngTestRange, ">=" & 2000, rngTestRange, "<" & 4000)
lngLessThenSum = WorksheetFunction.SumIf(rngTestRange, "<" & 2000)

If lngBetween2k4k > 0 Then
        MsgBox "Atleast 1 Number Is Between 2000 And 4000"
End If

If lngLessThenSum > 0 Then
    MsgBox "Atleast 1 Number Is Less then 2000"
    Sheets("Summary").Range("11:11, 23:23, 43:43, 54:54, 78:78, 90:90").EntireRow.Hidden = True
End If
End Sub

必要なことを行う必要があり、範囲内のすべての単一セルをテストする必要はありません。他の機能や方法があるかもしれませんが、これが私の頭の一番上にありました。このような小さな範囲では、違いに気付くことさえありません。

また、VBA からのワークシートへの変更をできるだけ少なくしたいので、私の例では、各行の呼び出しではなく、1 回の呼び出しで言及したすべての行を非表示にします。

于 2013-07-05T13:30:38.013 に答える
0

多分それはEntireRowプロパティについてです..

参照.. http://msdn.microsoft.com/en-us/library/office/ff836836.aspx

あなたのコード以来.. Rows("11").EntireRow.Hidden = True.. Row("11") が Range var であることを確認する必要があります..

行を非表示にするにはRows(11).Hidden = True

于 2013-07-05T13:06:50.750 に答える
0
Sub try()
i = 1
While Sheet1.Cells(i, 1).Value <> ""
If Sheet1.Cells(i, 1).Value > 2000 Then
    Sheet2.Rows(i).EntireRow.Hidden = True
End If
i = i + 1
Wend
End Sub
于 2013-07-06T20:13:49.730 に答える
0

最小値のみに関心があります。仕事にはExcelのMin関数を使用したいと思います。

Sub HideRows()

Set InRng = Worksheets("Worksheet").Range("G9:P9") 'Input Range
Set OutRng = Worksheets("Summary").Range("A11,A22,A43,A54,A78,A90") 'Rows to be hidden

MinVal = Application.WorksheetFunction.Min(InRng) 'Invoking inbuilt function to get minimum value

If MinVal < 2000 Then
    OutRng.EntireRow.Hidden = True
End If

End Sub
于 2015-07-10T05:01:12.803 に答える
0

要点を言えば:

Range("a11,a22,a43,a54,a78,a90").EntireRow.Hidden = [sum((g9:p9>0)*(g9:p9<2001))]
于 2015-05-01T06:28:28.160 に答える