0

上司用の単純な Excel 見積もりシートを作成しようとしています。適用されない行を非表示にする必要があります。特定のセル値は = 0 ですが、= 1 の場合はシート 2 に表示されます。

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then Macro
End Sub

Sub HURows()
BeginRow = 17
EndRow = 34
ChkCol = 4

For RowCnt = BeginRow To EndRow
    If Cells(RowCnt, ChkCol).Value = 1 Then
        Cells(RowCnt, ChkCol).EntireRow.Hidden = False
    Else
        Cells(RowCnt, ChkCol).EntireRow.Hidden = True
    End If
Next RowCnt

BeginRow = 37
EndRow = 44
ChkCol = 4

For RowCnt = BeginRow To EndRow
    If Cells(RowCnt, ChkCol).Value = 1 Then
        Cells(RowCnt, ChkCol).EntireRow.Hidden = False
    Else
        Cells(RowCnt, ChkCol).EntireRow.Hidden = True
    End If
Next RowCnt

BeginRow = 48
EndRow = 51
ChkCol = 4

For RowCnt = BeginRow To EndRow
    If Cells(RowCnt, ChkCol).Value = 1 Then
        Cells(RowCnt, ChkCol).EntireRow.Hidden = False
    Else
        Cells(RowCnt, ChkCol).EntireRow.Hidden = True
    End If
Next RowCnt
End Sub

このマクロをセル値の変更時に自動的に実行する方法を教えてください....

4

1 に答える 1

1

Worksheet_ChangeサブとIfステートメントが実際にマクロに使用されている場合は、ステートメントを私の例から自分のものMacroにコピーする必要があります。使用されていない場合は、単に置き換えることができます。If

この列の一部のセルは行を非表示/非表示にしないため、最も効率的ではないため、必要以上にサブルーチンが呼び出される可能性がありますが、害はありません。

次のコードをワークシート コードに配置する必要があります。Sheet1

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Sheet1.Columns(4)) Is Nothing Then
      ' Target Intersects
      HURows
  Else
      ' No Intersection
  End If
End Sub

このコードは、新しいModule(ワークシートまたはワークブック モジュールではなく)に配置する必要があります。

Sub HURows()
Dim Sheet As Worksheet
BeginRow = 17
EndRow = 34
ChkCol = 4

Set Sheet = ThisWorkbook.Worksheets("Sheet2")
For RowCnt = BeginRow To EndRow
    If Sheet.Cells(RowCnt, ChkCol).Value = 1 Then
        Sheet.Cells(RowCnt, ChkCol).EntireRow.Hidden = False
    Else
        Sheet.Cells(RowCnt, ChkCol).EntireRow.Hidden = True
    End If
Next RowCnt

BeginRow = 37
EndRow = 44
ChkCol = 4

For RowCnt = BeginRow To EndRow
    If Sheet.Cells(RowCnt, ChkCol).Value = 1 Then
        Sheet.Cells(RowCnt, ChkCol).EntireRow.Hidden = False
    Else
        Sheet.Cells(RowCnt, ChkCol).EntireRow.Hidden = True
    End If
Next RowCnt

BeginRow = 48
EndRow = 51
ChkCol = 4

For RowCnt = BeginRow To EndRow
    If Sheet.Cells(RowCnt, ChkCol).Value = 1 Then
        Sheet.Cells(RowCnt, ChkCol).EntireRow.Hidden = False
    Else
        Sheet.Cells(RowCnt, ChkCol).EntireRow.Hidden = True
    End If
Next RowCnt
End Sub
于 2013-03-04T13:53:29.723 に答える