2017-10-18 7 views
1

現在Excelのスプレッドシートで作業しています。Excel:VBAを使用して別のシートのテーブルに行をコピー

私の目的は、特定の条件を持つ行をブック内の次のシートと「ログシート」にコピーするVBAを作成することです。

私のVBAは、次のようになります。

Sub ImportRows() 

    Dim xRg As Range 
    Dim xCell As Range 
    Dim I As Long 
    Dim J As Long 
    Dim K As Long 
    I = Worksheets("Print").UsedRange.Rows.Count 
    J = Worksheets("Store").UsedRange.Rows.Count 
    If J = 1 Then 
     If Application.WorksheetFunction.CountA(Worksheets("Store").UsedRange) = 0 Then J = 0 
    End If 
    Set xRg = Worksheets("Print").Range("I2:I" & I) 
    On Error Resume Next 
    Application.ScreenUpdating = False 
    For K = 1 To xRg.Count 
     If CStr(xRg(K).Value) = "Print" Then 

      xRg(K).EntireRow.Copy Destination:=Worksheets("Store").Range("A" & J +1) 
      xRg(K).EntireRow.Copy Destination:=Worksheets("Log").Range("A" & J +1) 
      xRg(K).EntireRow.Delete 
      If CStr(xRg(K).Value) = "Print" Then 
       K = K - 1 
      End If 
      J = J + 1 
     End If 
    Next 
    Application.ScreenUpdating = True 
End Sub 

問題は、シート1は、データがテーブルにある印刷と呼ばれてから、私はコピーしていたときですが、私は「ストア」と呼ばれる次のシートにコピーする場合(またはログ) - データはテーブルには格納されませんが、テーブルの下の1行目に表示され、データのソートが不可能になります。

これを修正する方法についてのご意見はありますか?私は、それが目的地の範囲と関係があるかもしれないと思うが、私は確信していない。 「:H」ではなく「EntireRow」を「ストア」は、私が唯一のセルをコピーしたいし、「印刷」からのコピー - また、私はコピーしていたデータの量に苦しんだ



私はかなりExcelに新しいです!私は助けていただきありがとうございます!

ありがとうございました!


私はマクロを実行した後の "Store"の外観を示すスクリーンショットをアップロードしました。

enter image description here

http://imageshack.com/a/img922/9446/gpL9Ov.png

+0

Menuは、範囲Aをコピーするには:Hは、あなたが '交差(XRG(K).EntireRow、レンジを使用することができます(」 A:H "))。コピー... ' – Rosetta

+0

ごめんなさい、「店」/「ログ」シートにリストテーブルがあり、データがテーブルに入りません?リストテーブル私はINSERTメニューから挿入したものと、テーブルグループの下にあるテーブルを意味します。 – Rosetta

+0

返信いただきありがとうございます! "プリント"シートはテーブルで、 "日付"を並べ替えることができます。 - 次のシート(ストア)に行をコピーするとき、日付を並べ替えることができます。次の期限日が上になる行。 私はこれがより明確になることを願っています – Straarup

答えて

0

あなたがリストオブジェクトのテーブルを持っているので、それははるかに容易になるだろう。

行のA:H列からのみコピーするには、A:H列に対してクロッピングするにはIntersect()を使用します。

Intersect(xRg(K).EntireRow, Range("A:H")).Copy _ 
    Destination:=range("Table1").ListObject.ListRows.Add.Range 

テーブル名が以下に見出されることができ、テーブル#にデフォルト設定されている:

そして新しいリスト行に目的地を設定し、リストオブジェクトテーブルにコピーします

table name

+1

ありがとうございます!それは完璧に働いた! – Straarup

関連する問題