0

現在、単一のセルからデータを読み取り、そのセルの値が特定の数値の間にある場合に行を非表示/表示する Excel マクロがあります。

私がやろうとしているのは、マクロに機能を追加して、特定のセルが特定の値に達すると、行を表示/非表示にし、元のセルの値を表示されている行の数で割り、各行に等しい値を配置することです.

したがって、G10 の値が 2200 の場合、行 H が表示され、セル G10 が 1100 になり、H10 も 1100 になります。

これが私の現在のコードです:

編集: 各 If ステートメントで、 cell.Value を取る何かを追加し、その if ステートメントで非表示になっている行間で均等に分割します。

Private Sub Worksheet_Calculate()

Dim rng As Range
Dim cell As Range
Set rng = Sheets("Summary").Range("G10:P10")

Application.EnableEvents = False

Sheets("Summary").Range("11:19, 23:31, 43:51, 54:62, 78:86, 90:98").EntireRow.Hidden = True

For Each cell In rng

    If cell >= 2000 And cell < 4000 Then
        Sheets("Summary").Range("11:11, 23:23, 43:43, 54:54, 78:78, 90:90").EntireRow.Hidden = False
        Sheets("Summary").Range("12:19, 24:31, 44:51, 55:62, 79:86, 91:98").EntireRow.Hidden = True
    End If

    If cell.Value >= 4000 And cell.Value < 6000 Then
        Sheets("Summary").Range("11:12, 23:24, 43:44, 54:55, 78:79, 90:91").EntireRow.Hidden = False
        Sheets("Summary").Range("13:19, 25:31, 45:51, 56:62, 80:86, 92:98").EntireRow.Hidden = True
    End If

    If cell.Value >= 6000 And cell.Value < 8000 Then
        Sheets("Summary").Range("11:13, 23:25, 43:45, 54:56, 78:80, 90:92").EntireRow.Hidden = False
        Sheets("Summary").Range("14:19, 26:31, 46:51, 57:62, 81:86, 93:98").EntireRow.Hidden = True
    End If

    If cell.Value >= 8000 And cell.Value < 10000 Then
        Sheets("Summary").Range("11:14, 23:26, 43:46, 54:57, 78:81, 90:93").EntireRow.Hidden = False
        Sheets("Summary").Range("15:19, 27:31, 47:51, 58:62, 82:86, 94:98").EntireRow.Hidden = True
    End If

    If cell.Value >= 10000 And cell.Value < 12000 Then
        Sheets("Summary").Range("11:15, 23:27, 43:47, 54:58, 78:82, 90:94").EntireRow.Hidden = False
        Sheets("Summary").Range("16:19, 28:31, 48:51, 59:62, 83:86, 95:98").EntireRow.Hidden = True
    End If

    If cell.Value >= 12000 And cell.Value < 14000 Then
        Sheets("Summary").Range("11:16, 23:28, 43:48, 54:59, 78:83, 90:95").EntireRow.Hidden = False
        Sheets("Summary").Range("17:19, 29:31, 49:51, 60:62, 84:86, 96:98").EntireRow.Hidden = True
    End If

    If cell.Value >= 14000 And cell.Value < 16000 Then
        Sheets("Summary").Range("11:17, 23:29, 43:49, 54:60, 78:84, 90:96").EntireRow.Hidden = False
        Sheets("Summary").Range("18:19, 30:31, 50:51, 61:62, 85:86, 97:98").EntireRow.Hidden = True
    End If

    If cell.Value >= 16000 And cell.Value < 18000 Then
        Sheets("Summary").Range("11:18, 23:30, 43:50, 54:61, 78:85, 90:97").EntireRow.Hidden = False
        Sheets("Summary").Range("19:19, 31:31, 51:51, 62:62, 86:86, 98:98").EntireRow.Hidden = True
    End If

    If cell.Value >= 18000 Then
        Sheets("Summary").Range("11:19, 23:31, 43:51, 54:62, 78:86, 90:98").EntireRow.Hidden = False
    End If
Next

Application.EnableEvents = True

End Sub
4

2 に答える 2

0

G10 では 2000 ごとに新しい列が表示されるため、次のように言えます。

columns_number = ceil(G10 / 2000)

ここで、ユーザーが G10 ではなく G9 に値を入力するとします。

「columns_number」のプレースホルダーとして H9 を使用するとします。H9 では、次のように記述します。

 = CEILING(G9/2000;1)

次に、G10 の内容は簡単です。

 = $H$9

そしてH10の内容:

 = IF($H$9>=2;$H$9;0)

I10 の内容:

 = IF($H$9>=3;$H$9;0)

...

P10まで続きます。

概要:

    G            H                    I
 9  2200         =CEILING(G9/2000;1)
10  =$H$9        = IF($H$9>=2;$H$9;0) = IF($H$9>=3;$H$9;0)
于 2013-07-09T13:12:55.080 に答える
0

行ごとに分割したいという質問に本当に混乱していますが、例として COLUMNS g と H を使用しますか?? これを試して、どのように機能するかを確認してください。

注: 常にワークブックのコピーでテストされていないコードを実行し、実際のデータでは決して実行しないでください

Dim rng As Range
Dim TestValue As Integer, OffsetValue As Integer
Dim SplitValue As Double

Set rng = Sheets("Summary").Range("G10:P10")
Application.EnableEvents = False
Sheets("Summary").Range("11:19, 23:31, 43:51, 54:62, 78:86, 90:98").EntireRow.Hidden = True
TestValue = WorksheetFunction.Max(rng)

If TestValue >= 18000 Then TestValue = 18000

 OffsetValue = 9 - TestValue / 2000

 With Sheets("Summary").Range("11:" & 19 - OffsetValue & _
                              ", 23:" & 31 - OffsetValue & _
                              ", 43:" & 51 - OffsetValue & _
                              ", 54:" & 62 - OffsetValue & _
                              ", 78:" & 86 - OffsetValue & _
                              ", 90:" & 98 - OffsetValue)
      .EntireRow.Hidden = False
      .Value = TestValue / (.Rows.SpecialCells(xlCellTypeVisible).Count / .Columns.Count)
 End With


Application.EnableEvents = True

これにより、行数に均等に配置する必要がある値が得られます。質問で行または列という単語を本当に使用するつもりかどうかわからないため、終了しませんでした。

于 2013-07-09T16:56:17.550 に答える