2

私はプログラミングにとても興味があり、仕事のために VBA から始めることにしました。だから、私はコードに問題があります。数式の結果が TRUE であるセルを特定し、選択した同じ行の最初のセルの内容をクリアする必要があります。しかし、ループを使用すると、マクロは同じ結果を 3 回返します (これは、変更する必要がある行の正確な数です)。私のコードを以下に置きます。誰か助けてくれませんか?

ありがとう!!!

Sub Teste2sigma()

Windows("1.xls").Activate
    Sheets("Standard 1").Activate
    Range("AI3:AJ42").Select
    With Range("AI3:AJ42")
            Set C = .Find("TRUE", LookIn:=xlValues)
            If Not C Is Nothing Then
                ClearAddress = C.Address
                ClearRow = C.Row
                ClearColumn = C.Column
                Do
                    Cells(ClearRow, 1).Select
                    Cells(ClearRow, 1).ClearContents
                    ClearRows = ClearAddress & "," & C.Address(RowAbsolute:=False)
                    'Cells(ClearRow, ClearColumn).Select
                    Set C = .FindNext(After:=C)
                Loop While Not C Is Nothing And C.Address <> ClearAddress
            End If
        End With


End Sub
4

4 に答える 4

3

Craig T が指摘したように、あなたの明確な行動は見当違いでした。また、コードを少し合理化しました。

  Option Explicit
  Sub Teste2sigma()

  Dim c As Range
  Dim ClearAddress As String
  Dim ClearRow As Long

  With ThisWorkbook.Worksheets("Sheet1").Range("AI3:AJ42")
      Set c = .Find(What:=True, LookIn:=xlValues, lookat:=xlPart)
      If Not c Is Nothing Then
          ClearAddress = c.Address
          Do
             ClearRow = c.Row
             Cells(ClearRow, 1).ClearContents
             Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
      End If
  End With

  End Sub
于 2013-06-04T01:00:34.553 に答える
2

ループ内に ClearRow 割り当てを入れてみてください。

Do
    ClearRow = C.Row
    Cells(ClearRow, 1).Select

現時点では、ループの前に ClearRow を割り当てています。つまり、毎回同じセルの内容をクリアしています。

于 2013-06-04T00:49:55.183 に答える
0

みんなありがとう、今はすべて順調です!!! 最終コードの下

問題は、次の「with」を開始する前に c 変数をクリーンにする必要があることです。したがって Set c = Nothing、次のように、すべての「with」の前に挿入しました。

Set c = Nothing

    Worksheets("Sample 2").Activate

With Worksheets("Sample 2").Range("AI3:AJ42")
      Set c = .Find(What:="True", LookIn:=xlValues, lookat:=xlPart)
      If Not c Is Nothing Then
          ClearAddress = c.Address
          Do
             ClearRow = c.Row
             Cells(ClearRow, 1).Value = ""
             Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
      End If
  End With

    Set c = Nothing

    Worksheets("Sample 3").Activate

With Worksheets("Sample 3").Range("AI3:AJ42")
      Set c = .Find(What:="True", LookIn:=xlValues, lookat:=xlPart)
      If Not c Is Nothing Then
          ClearAddress = c.Address
          Do
             ClearRow = c.Row
             Cells(ClearRow, 1).Value = ""
             Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
      End If
  End With
于 2013-06-05T11:37:40.000 に答える
0

回答ありがとうございました!! chuff によって書かれたコードを使用しましたが、うまくいきました。ただし、これはより大きなコードの一部に過ぎず、多くの順序付けられたワークブック (1 から n) の 7 シートで同じことを行う必要があります。そのため、ワークブックごとにコードを繰り返しましたが、何も変わりません。重要なことの 1 つは、"True" が Excel の OR 関数の結果であるということです。

 Sub Teste2Sigma()


 Windows("datacao_v2.xls").Activate
        Sheets("SamList").Activate
        Range("f2").Select
        varPasta = ActiveCell
        varDatacao = varPasta & "datacao_v2"
        Sheets("SamList").Select
        Columns(1).Find(What:="fim").Activate
        fim = ActiveCell.Row 'linha correspondente ao "fim"
        first = Cells(4, 3) 
        aux = Range(Cells(fim - 3, 1), Cells(fim - 3 - 9, 1)).Find(What:="GJ", SearchDirection:=xlPrevious).Row
        last = Cells(aux + 1, 3) 
        nInt = (fim - (fim - aux) - 3) / (first + 2) 
        nVal = first * nInt + last 'número total de amostras lidas
        nPlan = Ceiling(nVal / 4)
        media = Range(Cells(2, 1), Cells(nPlan + 1, 1))


    For K = 1 To nPlan

        Windows(K & ".xls").Activate



    Dim c As Range
    Dim ClearAddress As String
    Dim ClearRow As Long

  With Worksheets("Standard 1").Range("AI3:AJ42")
      Set c = .Find(What:="True", LookIn:=xlValues, lookat:=xlPart)
      If Not c Is Nothing Then
          ClearAddress = c.Address
          Do
             ClearRow = c.Row
             Cells(ClearRow, 1).Value = ""
             Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
      End If
  End With

  With Worksheets("Standard 2").Range("AI3:AJ42")
      Set c = .Find(What:="True", LookIn:=xlValues, lookat:=xlPart)
      If Not c Is Nothing Then
          ClearAddress = c.Address
          Do
             ClearRow = c.Row
             Cells(ClearRow, 1).Value = ""
             Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
      End If
  End With

With Worksheets("Sample 1").Range("AI3:AJ42")
      Set c = .Find(What:="True", LookIn:=xlValues, lookat:=xlPart)
      If Not c Is Nothing Then
          ClearAddress = c.Address
          Do
             ClearRow = c.Row
             Cells(ClearRow, 1).Value = ""
             Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
      End If
  End With

With Worksheets("Sample 2").Range("AI3:AJ42")
      Set c = .Find(What:="True", LookIn:=xlValues, lookat:=xlPart)
      If Not c Is Nothing Then
          ClearAddress = c.Address
          Do
             ClearRow = c.Row
             Cells(ClearRow, 1).Value = ""
             Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
      End If
  End With

With Worksheets("Sample 3").Range("AI3:AJ42")
      Set c = .Find(What:="True", LookIn:=xlValues, lookat:=xlPart)
      If Not c Is Nothing Then
          ClearAddress = c.Address
          Do
             ClearRow = c.Row
             Cells(ClearRow, 1).Value = ""
             Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
      End If
  End With

With Worksheets("Sample 4").Range("AI3:AJ42")
      Set c = .Find(What:="True", LookIn:=xlValues, lookat:=xlPart)
      If Not c Is Nothing Then
          ClearAddress = c.Address
          Do
             ClearRow = c.Row
             Cells(ClearRow, 1).Value = ""
             Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
      End If
  End With

        With Worksheets("Blank").Range("Z7:Z46")
            Set c = .Find(What:="True", LookIn:=xlValues, lookat:=xlPart)
             If Not c Is Nothing Then
                 ClearAddress = c.Address
                 Do
                  ClearRow = c.Row
                    Cells(ClearRow, 1).Value = ""
                        Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
             End If
  End With

        With Worksheets("Blank").Range("AA7:AA46")
            Set c = .Find(What:="True", LookIn:=xlValues, lookat:=xlPart)
            If Not c Is Nothing Then
          ClearAddress = c.Address
          Do
             ClearRow = c.Row
             Cells(ClearRow, 23).Value = ""
             Set c = .FindNext(c)
          Loop While c.Address <> ClearAddress
      End If
  End With

Next K


End Sub
于 2013-06-04T14:16:42.630 に答える