2016-07-19 14 views
0

ワークシート「再計算されたFS」の列A、W、Gのセルを「テンポ」と呼ばれる別のワークシートにコピーしたい同じ行のAI列= "はい"。cell.Value = "Yes"の場合、MS-Excelの特定のセルをコピーする

これは、私はそれが動作しない、今

Sub dural() 
    Dim ws As Worksheet 
    Set ws = ThisWorkbook.Sheets.Add(After:= _ 
    ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) 
    ws.Name = "Tempo" 
    For Each Cell In Sheets("Recalculated FS").Range("AI:AI") 
     If Cell.Value = "YES" Then 
      Sheets("Recalculated FS").Range("A:A").Copy Sheets("Tempo").Range("B:B") 
      Sheets("Recalculated FS").Range("W:W").Copy Sheets("Tempo").Range("A:A") 
      Sheets("Recalculated FS").Range("G:G").Copy Sheets("Tempo").Range("C:C") 
     End If 
    Next 
End Sub 

を使用していたコードです。 この写真は私の必要性を描写するAI =はい - >私たちはA、G、W列の値をコピーします enter image description here お願いします。

+0

シートの「テンポ」には、セルのコピーが必要ですか?例えば。 "再計算されたFS"のセルAI15がAI列に "YES"を持つ3行目の場合、Sheets( "Recalculated FS")を使用しますか?Range( "A15:A15") 'Sheets(" Tempo Range( "B15:B15") '、またはそれを別の場所に完全にコピーしたいですか? – YowE3K

+0

注:この質問に答えることについての混乱の多くは、最初の声明を「私はセルA、W、Gを「AI」セルの値が「YES」の場合は「ワークシートから列A、W、G **をコピーします」と表示されている場合は、ワークシート「再計算されたFS」を別の「テンポ」に変換します。 "** Column AI ** valueのセルが" YES "の場合。"セルのコピーとカラムのコピーには大きな違いがあります。どのようにそれを編集します。 – YowE3K

答えて

0

1)あなたが列をコピーするために、次を使用することができます。

Sheets("Recalculated FS").Range("A:A").Copy Sheets("Tempo").Range("B:B") 
Sheets("Recalculated FS").Range("W:W").Copy Sheets("Tempo").Range("A:A") 
Sheets("Recalculated FS").Range("G:G").Copy Sheets("Tempo").Range("C:C") 

注:OPは彼のコードを変更したとして、上記の点は、今は無関係です。 「テンポ」シートの見出しを変更するには

2)、あなただけ言うことができる:

Sheets("Tempo").Range("A1").Value = "Heading for column A" 

など

注:上記の点をOPが取り除かたように、今は関係ありません彼のポストからのこの質問。

3)あなたFor Each Cell In Sheets("Recalculated FS").Range("AI:AI")ループの列AIが「Yes」の値を持つ10個の細胞を含む場合、3つの列10をコピーされることを意味するカラムAI内のすべてセルのループの内容を実行します(正確に同じものを正確に同じ場所にコピーするたびに)。 (そして、空のセルを見て、何もする必要がないと判断して、何度も何度も何度もループを繰り返しますが、それでも決定する時間はかかります)

注:上記の点依然として関連性がある。

+0

あなたの助けてくれてありがとう、If節にこの3行を追加する必要があります。あなたの3番目のポイントは私にとって十分ではありません(Foreach)、AIは120000の行を持つ単一の列です – BKChedlia

+0

3つのrange.copy行のそれぞれは、Recalculate FSシートからテンポシートに1列をコピーします。あなたのIFステートメントはループ内にあるが、そうするのは良い考えではないかもしれない。AIに120000の行が含まれている場合、ループはそれらの120000の各セルを順番に調べ、セルに値「はい」が含まれているかどうかを判断します。そのうちの2000個に "YES"が含まれている場合、3つの列は2000回コピーされ、118,000回のループでは何もコピーされません。あなたは列を2000回コピーしたいですか?それとも一度ですか? – YowE3K

+0

私のコードを変更し、私の必要性を示すために写真を追加し、コードがロードされ、決して停止しません。 – BKChedlia

0

ここに、YES値を検索するコードがあります。

YESを1つ見つけたら、列をコピーできます。

Sub dural() 

ThisWorkbook.Sheets("Recalculated FS").Select 
Columns("AI:AI").Select 

Set cell = Selection.Find(What:="YES", After:=ActiveCell, LookIn:=xlFormulas, _ 
     LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False) 
'Search the column for a YES value 

If cell Is Nothing Then 
    'Do nothing if YES isn't found 
Else 
    'Copy columns if YES is found 
End If 

     If Len(ActiveSheet.Range("A1").Value) <> 0 Then 
      Sheets("Tempo").Name = ActiveSheet.Range("A1").Value 
     Else 
      'Don't change the name 
     End If 
'Rename the Tempo worksheet based on a cell value 

End Sub 
+0

'ThisWorkbook.Sheets(" Recalculated FS ")選択したセルが選択されているかどうかを確認するには、 列( "AI:AI")を選択してください。 セルを選択する= Selection.Find(What:= "YES"、After:= ActiveCell、LookIn:= xlFormulas、_ LookAt:= xlWhole、SearchOrder:= xlByRows、 SearchDirection:= xlNext、_ MatchCase:= Falseの、SearchFormat:)= Falseの場合、 'セルが何もない場合はYES値 の列を検索すると ' YESが見つからない場合は何もしない エルス シート(「再計算FS ( "A:A")コピーシート( "テンポ")範囲( "B:B") シート( "再計算されたFS")。範囲( "A:A") End If'もうまくいきません( "W:W")コピーシート( "Tempo" – BKChedlia

関連する問題