2016-09-20 17 views
-2

特定の条件が満たされたときにExcelのシートから行をコピーする方法の解決策を探しています。私は他のマクロ/ソリューションを無駄にここに投稿しようとしました。条件が満たされたときに新しいシートに行をコピー

新しいシートにコピーしたいデータはGG行にあり、「飛行色で渡されました」というテキストです。 SchoolEastというシートにあります。

このフレーズがデータセットのGG列のセルに見つかった場合は、AからGHまでの行全体をコピーしたいと思います。対象シートはPassedFCと呼ばれます。

これについていくつかの助けをしたいと思います。これ以上の情報が必要な場合はお知らせください。

+2

'私が試してみました他のマクロ/ソリューションは、あなたに最も近い得たものを投稿し、あなたがコードを実行時にエラーが起こっているか教えてくださいなしavail'とここに掲載します。編集を使用して元の投稿にコードを投稿します。コメントを使用してコードを投稿しないでください。 –

答えて

0

これはかなりシンプルなVBAルーチンですが、最初に始めたときに、このようなものの周りを頭で囲むのはどれほど難しいのですか?下には、あなたがそこに行く途中の99%のようなあなたを得られるはずの、テストされていないサブルーチンがあります。私は助けになるような豊富なコメントをしました。

Sub copyWhenCriteriaIsMet() 
    Dim shFrom as worksheet, shTo as worksheet 
    Dim rngReadCell as Range, rngRead as Range 
    Dim intWriteRow as integer 


    'Change shFrom to the sheet name we are reading and shTo to the sheet we are writing to 
    set shFrom = Sheets("Sheet1") 
    set shTo = Sheets("Sheet2") 

    'Change this to fit the range we are reading 
    set rngRead = shFrom.Range("GG1:GG5000") 

    'Set the initial row to which we are writing the found data 
    'Inside the For loop below we will increase this by one whenever we write a new line 
    intWriteRow = 1 

    'Now loop through each cell in the range using a "For" loop 
    For Each rngReadCell in rngRead.Cells 
     'Everything happening between "For" and "Next" is done over and over again for each cell 
     'We can reference the Cell that is being read as it will be automatically stored in 
     'variable "rngReadCell" 

     'Use an "IF" statement to test if the value in rngReadCell says "Passed with flying colors" 
     If rngReadCell.Value = "Passed with flying colors" 'note this is case sensitive here in VBA 
      'Everything happening between "If" and "End IF" only happens if that conditions is true 

      'Copy the contents of rngReadCell's Row (between Column A and GH) to the other sheet 
      'There are a few ways to reference this A:GH range, I'm going to use "RANGE()" and concatenate 
      'since that's the easier to understand than .offset().resize() or .Row().Range() 
      shFrom.Range("A" & rngReadCell.row & ":GH" & rngReadCell.row).copy Destination:=shTo.Range("A" & intWriteRow) 

      'Now that we wrote that line out, lets increment the intWriteRow variable 
      intWriteRow = intWriteRow + 1 

     End IF 

     'Nothing else to do here, so this will loop back to the top of the For loop and test the next 
     'rngReadCell.Value 
    Next rngReadRow 
End Sub 
関連する問題