2017-07-26 18 views
0

列ヘッダー(たとえば、日付、名前、ID、金額など)に基づいてsheet1からsheet2に複数の列をコピーする場合、列ヘッダーはシート3、A1:A10.eg。日付、名前、ID、金額など。Excelのセル範囲で列ヘッダーに基づいて複数の列をコピー

数時間のグーグルでコードを取得したが、1つのカラムだけをコピーするだけで、複数のカラムをコピーすることはできますか?コードのどの部分を変更する必要がありますか?あなたの時間と助けに感謝します。

ありがとうございます。

Sub CopySpecifcColumn() 

    Set MR = Range("A1:e1") 

    For Each cell In MR 

     If cell.Value = "Date" Then cell.EntireColumn.Copy 

    Next 

End Sub 

答えて

0

未テスト:

Sub CopyCols() 

    Dim h As Range, f As Range, sht1, rngDest As Range 

    Set sht1 = ThisWorkbook.Sheets("Sheet1") 
    Set rngDest = ThisWorkbook.Sheets("Sheet2").Range("a1") 'start pasting here 

    'loop through the headers to copy 
    For Each h In ThisWorkbook.Sheets("Sheet3").Range("A1:A10").Cells 
     'find the header on sheet1 
     Set f = sht1.Rows(1).Find(h.Value, , xlValues, xlWhole) 
     If Not f Is Nothing Then 
      'found the header: copy the column 
      f.EntireColumn.Copy rngDest 
      Set rngDest = rngDest.Offset(0, 1) ' move destination 
     End If 
     Set f = Nothing 
    Next h 

End Sub 
+0

こんにちは、これはこれを行う別の方法です、素晴らしい!ありがとう、あなたたちは素晴らしいです! – robin

0

あなた if文のみコピーコラムので、あなただけの、一つの列(「日付」欄)をコピーしています。各列のタイトルを格納することにより、これを行うための別の方法があります

Set MR = Range("A1:e1") 

For Each cell In MR 

If cell.Value = "Date" Then 
    cell.EntireColumn.Copy 
End If 

If cell.Value = "Name" Then '<- Add these for each column title 
    cell.EntireColumn.Copy 
End If 

If cell.Value = "ID" Then 
    cell.EntireColumn.Copy 
End If 

If cell.Value = "Amount" Then 
    cell.EntireColumn.Copy 
End If 


Next cell 

:あなたの現在の方法を継続することで、あなたはそうのようなそれらの列のための文を書くことでRange("A1:e1")内のデータの残りの列をコピーすることができます配列をループして各列をコピーすることにより、コードを短くし、より柔軟に書くことができます。配列内の列タイトルのみをループすることは、列範囲の各セルを検索するよりもはるかに高速です。カラムタイトルでループ

が動作するように詳細で、このような何かを行くだろう:

Dim Sh2Cell As Range 
Dim Sh3Cell As Range 
Dim Sh2Title As Range 
Dim Sh3Title As Range 

Set Sh2Title = Sheet2.Range("Title Range") 
Set Sh3Title = Sheet3.Range("Title Range") 

For Each Sh2Cell In Sh2Title 
    For Each Sh3Cell In Sh3Title 
     If Sh2Cell = Sh3Cell Then 
      'Copy column' 
     End If 
    Next 
Next 
+0

こんにちはアンソニー、共有していただきありがとうございます。私はあなたのコードを試してみましたが、最後のヘッダだけをコピーします。金額、日付の選択なし、名前とID、コードにないものは何ですか? – robin

+0

@Robinコードに調整を加えました。最後のヘッダーをコピーするだけの問題は、IfステートメントにEndがないためです。各If文にEndを追加すると、各If文が確実に実行されます。 配列を使ってこれを書くという点で、コードの記述が終了したら私の答えを更新します。 – AnthonyT

+0

お時間をいただきありがとうございました! – robin

0

あなたがここに二つの可能性があります。

  1. これはあなたのコードでより多くの方法です。 If cell.Value = "Date"をチェックする代わりに、cell.ValueがSheet3、A1:A10に存在するかどうかを確認する必要があります。 Findメソッドはここで問題ないはずですが、値が見つからない場合はエラーを返します。これに注意してください。
  2. これは逆の動作をします。 Sheet3、A1:A10のすべてのセルについて、sheet1の列ヘッダーを見つけてその列をコピーします。 Findメソッドはここでもうまくいきますが、Sheet3にタイプミスなく名前を保持する限り、より安全です。

もちろん、次の列をコピーする前にコピーしたデータを貼り付ける必要があります。これを行うには3番目の方法があります。すべての列を選択してそれらのすべてをコピーしますが、もっと複雑になり、貼り付けられたデータには空の列が含まれる可能性があります。

+0

こんにちは、あなたの助けをありがとう – robin

関連する問題