2016-06-13 16 views
0

1つのシートの値に基づいてシートを別のシートにコピーしたいと思います。問題は、数式ではなく値をコピーしたいのですが、Pastespecialで動作するDestinationコマンドを取得できません。これまでのところ私が持っている:Excelマクロ - 値に基づいてシートを別のシートにコピーする

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ 
Cancel As Boolean) 

Dim i, LastRow 

LastRow = Range("A" & Rows.Count).End(xlUp).Row 

Sheets("Available").Cells.ClearContents 

For Each c In Range("A1:A" & LastRow) 

If UCase(c.Offset(0, 1).Value) = "Not Sold" Then 

Range("A" & c.Row & ":" & "G" & c.Row).Copy _ 

Destination:=Sheets("Available").Range("A" & Rows.Count) _ 

.End(xlUp).Offset(1) 

End If 

Next c 

Target.Offset(1).Select 
End Sub 

私も値をセルの上、いくつかのセルをコピーし、新しいシートにコピーされた行の右側に追加します。

本当にありがとうございます。

+1

問題は 'UCase(c.Offset(0、1).Value)="未販売 "です。 UCaseは、その単語がすべて大文字**であることを意味します。 ''売却しない ''を ''売却しない ''に変更するか、 '' UCase''ラッパーを削除してください。 –

答えて

0

まず、私が働いていると思わないカップルや良いアイデアを指摘しましょう。

大文字に変換して比較するたびに、If UCase(c.Offset(0, 1).Value) = "Not Sold"を使用するたびに失敗するはずです。あなたはIf Ucase(c.Offset(0, 1).Value) = "NOT SOLD"

第二に、あなたは私はあなたが欲しいものであると考えており、代わりにIntegersの、VariantsとしてiLastRowを設定しているしたいです。技術的に問題はありませんが、私は未知の変数が嫌いです。また、私が何かを見落とさない限り、iを使用しているようには思われません。

最後に、正確に最後の行を見つけるために、私は、これは今私が知っている最後の行を見つける最も信頼性の高い方法であり、実際found right here on stack.

lastRow = Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).row 

を使用します実際のコード自体、ここに私の推薦です。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) 

    Dim i, LastRow as Integer 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 
    Set ws1 = ActiveSheet 
    Set ws2 = Sheets("Available") 

    i = 1 

    LastRow = ws1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

    ws2.Cells.ClearContents 

    For Each c In Range(Cells(1,2), Cells(LastRow, 2)) 
     If UCase(c.Value) = "NOT SOLD" Then 
      ws2.Range(ws2.Cells(i, 1), ws2.Cells(i, 7)).Value = ws1.Range(_ 
       ws1.Cells(c.Row, 1), ws1.Cells(c.Row, 7)).Value 
      i = i + 1 
     End If 
    Next c 

    Target.Offset(1).Select 

End Sub 
+0

回答ありがとうございますが、次の2行が好きではありません:ws2.Range(セル(i、1)、セル(i、7))値=範囲(_ セル(c.Row、1) 、Cells(c.Row、7))。値 –

+0

それらを1行にまとめます。値=範囲(セル(c.Row、1)、セル(c.Row、7))。値 '私は、複数行の書式設定が間違っています。 – Malil

+0

まだ幸せではありません...私は整形されたフォーマットを得ることができるかどうかを見ていきます。 –

関連する問題