2017-04-13 6 views
0

私は何時間も失敗した試みとインターネットの精査の後に何をしようとしているのか見当がつかない。文字列を探している列をスキャンしたい場合は、次のセルの値をコピーして新しいシートに貼り付け、次の文字列の列を続けて、その隣の値を次のセルにコピーしたいもう一方のシートを下に押してください。コピーと貼り付けを行うコードを取得しましたが、貼り付け場所を次のセルに移動して上書きを続行しないようにする方法がわかりません。私は、A1セルが表示されている整数Iを使用して、目的地で= I + 1つのインクリメント私をdiong試みたが、それは動作しません文字列のVBA検索列と、見つかった場合新しいシートに次のセルデータをコピー

For Each cell in SrchRng 
    If cell.Value = "1_Complete" Then 
      cell.Offset(0,1).Copy Sheets("WO Completion List").[A1] 
    End If 
Next cell 

:ここで私はこれまで持っているものです。これはシンプルですが、私はそれを理解することはできません。おそらく私は配列を作成する必要がありますか?私はVBAの初心者です。私はJavaやC++に慣れています。

クイックアップデート:

私は「.Cellsは」私は 『s』をオフに左ので、私は仕事にそれを得て使用していませんでした。私はこれをしました:

For Each cell In SrchRng 
    If cell.Value = "1_Complete" Then 
     cell.Offset(0, 1).Select 
     Selection.Copy 
     Sheets("WO Completion List").Cells(i, 1).PasteSpecial xlPasteValues 
     i = i + 1 
    End If 
Next cell 

今私の質問は、これを行うより良い方法ですか?私は関数を実行すると、束を点滅させてリストを1枚のシートにコピーし、値が消えて奇妙に見えます。

答えて

1

コピー先の行と増分を記録します。私はここで本当の変化は、あなたが範囲を参照している方法だと思います。 [A1]の代わりに.Range("A1")の形式を使用するか、.Cells(1,1)をインクリメントするには、最初のパラメータが行で、2番目が列です。ここでも.Offset()を使用することもできますが、ネストすると混乱することがあります。

'declare an integer to keep track of the row to write to 
Dim rowCounter as integer 

'set to 1 for row 1 to start 
rowCounter = 1 
For Each cell in SrchRng 
    If cell.Value = "1_Complete" Then 
      cell.Offset(0,1).Copy Sheets("WO Completion List").Cells(rowCounter, 1) 
      'we wrote out a value, so increment to the rowCounter to the next row 
      rowCounter = rowCounter + 1 
    End If 
Next cell 
+0

ありがとう@JNevill私が使用していたことに気づきました。画面が狂ってしまわないようにする方法はありますか?私はこれを使用することになるつもりはないので、スプレッドシートを使用するたびに誰もがなぜそれをするのか聞かせてもらいたい。 –

+0

あなたのコードの前に、あなたのサブルーチンでは、アプリケーションのScreenUpdating設定を 'application.screenupdating = false'にすることができます。コードの最後に、それをTrueに戻してください。さもなければ、非常に混乱したエンドユーザーがいるでしょう。 – JNevill

+0

'range.copy ...'の代わりに、もう一方の値に基づいて値を設定するだけで、より良い動作が得られるかもしれません。ただし、書式や式はコピーされません。 'Sheets(" WO補完リスト ")。セル(rowCounter、1).value = cell.Offset(0,1).value'。 – JNevill

関連する問題