2011-06-24 3 views
1

まず、Excel 2007を使用していて、Visual Basic Editor(VBA、私は信じています)で作業しています。列の値を見つけてvbaの対応する行番号に関連付けるのに問題がありますExcel2007

データシート(7500行)を取り出し、それを2999行に減らし、列 "F"からInitialValue(0.2)で始まるようにフォーマットします。InitialValueをRowとして定義します。数。列 "F"の0.2が最初に出現する前のすべての行のすべての値を削除できます。次に、新しい行1から始めて、ファイルを2999行に短くしたいと思います。

列Fは、特定のモーションセンサー入力によってリセットされることがあるデータカウンターであるため、データセットの最初の参照を指定されたInitialValue(0.2)にのみ検索したいと思います。私はこのための戦略をコード化する必要があるかどうかは不明です。

シートは、フォーマットは次のとおりです。

ROW | A  | B | C |  D 
1  date-time data  data  599.4 
2  date-time data  data  599.6 
3  date-time data  data  599.8 
4  date-time data  data   0.2 
5  date-time data  data   0.4 
6  date-time data  data   0.6 
7  date-time data  data   0.8 
.  date-time data  data   1.0 
.  date-time data  data   0.2 
.  date-time data  data   0.4 
7500 date-time data  data  345.4 

私はVBAにかなり新しいですので、私は確かにここで重要な何かが欠けています。私は、列「D」で0.2の最初の出現の定義になってとは成功を持っていない、とどこから始めればわからないのです「に設定InitialValueに」ラインで

Sub Scrub_clean() 
     'Scrub_clean Macro isolates event 

    Dim InitialValue As Integer 
    Set lookupTable = Worksheets("Sheet1").Range("D1:D7500") 

    With Worksheets(1).Range("D1:D7500").Value 
     Set InitialValue = .Find(0.2, LookIn:=xlValues) 

    End With 

    Rows("1:InitialValue-1").Select 
     'subtract one from initial value to ensure the 0.2 value does not get deleted 
    Selection.Delete Shift:=xlUp 

    Rows("3000:7500").Select 
    Selection.Delete 
End Sub 

を対象に必要なエラーが出ますマクロが同じ値の他のオカレンスを探し続けることがないようにします。どんな助けでも大歓迎です。前もって感謝します。

答えて

0

Withステートメントで.Valueを削除してみます。私はFind関数がValueプロパティのメンバーだとは思っていませんが、Rangeオブジェクトの一部です。

+0

.Valueを削除しましたが、Set InitialValueステートメントでまだコンパイルエラー/オブジェクト要求メッセージが表示されています。 – Jason

1

整数としてディメンション化されたInitialValue変数でSetコマンドを使用しようとしています。その後、あなたはoriginanlly行ったように設定し使用することができますが、

InitialValue = .Find(0.2, LookIn:=xlValues).Row 

または範囲としてInitialValueに変数をディメンション:あなたは、その使用のいずれかの操作を行い傾けます。

また、あなたが使用し、それらと連携した細胞を選択する必要はありませドン:

Rows("3000:7500").Delete 

これは、私はあなたが要求する何だろうかです:あなたの助けのための

Sub Scrub_clean() 
     'Scrub_clean Macro isolates event 

    Dim rCell As Range 

    With Worksheets("Sheet1") 
     Set rCell = .Range("D1:D7500").Find(0.2, LookIn:=xlValues) 

     If Not rCell Is Nothing Then 
      '// Assumes you have no headers as per your example 
      .Rows(1).Resize(rCell.Row - 1).Delete Shift:=xlUp 
      .Rows(3000).Resize(.UsedRange.Rows.Count).Delete Shift:=xlUp 
     End If 
    End With 


End Sub 
0

感謝。私はこれもうまく動作することを発見した、それは原油のようなものです、Findコマンドがより効率的なプロセスになるのだろうか?

Sub Scrub_clean() 

    Dim InitialValue As Integer 
    Set lookupTable = Worksheets("Sheet1").Range("d1:d7500") 

    With Worksheets(1).Range("d1:d7500") 
     Set InitialValue = .Find(0.2, LookIn:=xlValues) 

    End With 

    Rows("1:InitialValue-1").Select 

    Selection.Delete Shift:=xlUp 

    Rows("3000:7500").Select 
    Selection.Delete 
End Sub  
+0

これと元のコードとの違いはありません。私のコメントを実際に読んだことはありますか? – Reafidy

+0

はい私はあなたの時間を助けてくれてありがとう、あなたのコメントを読んだ。 – Jason

+0

Cool。だからあなたのソリューションは何でしたか?上記のあなたのコードには欠陥があります。 – Reafidy

関連する問題