Excel VBA - 複数のセルを1つのファイルから別のファイルに効率的にコピーする方法

現在、私は次のように苦労しています: 私は2つのExcelファイルを持っています。 1つのファイルには多くのデータが含まれ、もう1つのファイルにはデータの評価に使用されます。 今では、ソースから目的のワークブックにデータを効率的にコピーする必要があります。ソースデータパターンは次のようになります。

x A   B   C   D   E   F   G   H   I
1 Oct bla bla bla bla bla bla bla bla
2             75              66 
3 Nov bla bla IMT Frm bla bla IMT Frm

blaが関心のないデータを表す場合、列Aは月(重要)を表し、IMTは重要なデータであり、これが原因です。また、Frmはセルが値ではなく数式を含み、保存/復元されなければならないことを意味します。 さらに、ターゲットファイルのセルの書式設定を保持する必要があります(.PasteSpecialで実現できます)。

ターゲットワークブックはまったく同じように見え、半分のemty行 "2"は省略されています。

すべての行に約10の貴重なエントリがあります。最も効率的に、どのようにして2番目のワークブックにデータをコピーできるのでしょうか? 私が提供できる情報があれば教えてください。 あなたの時間をありがとう!

編集:スクリーンショットの例 明確化:スクリーンショットはソースシートを示します。重要な情報は、ssで選択されたものです。シートはこのように右に進みます(BFまで)。私は6番目のエントリごとにコピーする必要があります。ソースでは数式ですが、ターゲット内の値である必要がある情報を除いて、ターゲットシートはまったく同じように見えます(中間の空の行を省略)。 私を助けてくれてありがとう!

1

3 答え

だから、もう少し研究した後、私は答えを見つけたと思う。 私のアプローチが間違っている/間違っている/理想的でないなら、私を修正してください。 私はループを使用しているし、値をassinginしている...これは "最短"の方法は、それを行う場合は、C + +から来て、私は疑問に思っていますか?私のために肥大したループのように見える...

Dim i As Integer
For i = 6 To 55
    targetSheetSal.Cells(ActiveCell.Row, i + 1).Value = sourceSheet.Cells(24, i).Value
    i = i + 5
Next i

あなたの時間、ご意見、アドバイスをありがとうございました!

2
追加された
-1セルでセルをコピーしないでください。他の例を見て、複数のセルの範囲をコピーしてください。それは何倍も高速です。例: Range( "A2")。Resize(300,20).Value セルの 300 x 20 code> "A2" をクリックします。同様の方法で範囲に配列を割り当てることができます。
追加された 著者 ja72,
はい、できます。 1つの選択肢は、 Range( "B4:C9、E4:D9")のようなセルのリストに基づいて範囲を選択することです。あるいは、配列を直接変更してVBAで行うこともできます。これと別の質問を投稿して、完全な回答を得てください。
追加された 著者 ja72,
入力いただきありがとうございます。しかし、個々の列(おそらく100+)を入力せずに「ギャップ」のある範囲を定義することは可能ですか?同様に、6番目のセルごとに?おそらくoffset()を使用するか、それをどのように達成できますか?
追加された 著者 replax,

正しい方向に進むためのコードの例を次に示します。

Public Sub CopyValues()

Dim wb_src As Workbook, wb_dst As Workbook
Dim ws_src As Worksheet, ws_dst As Worksheet

Set wb_src = Workbooks.Open("....")
Set wb_dst = Workbooks.Add()

Set ws_src = wb_src.Sheets(1)
Set ws_dst = wb_dst.Sheets(1)

Dim data() As Variant
Dim r_src As Range
Dim r_dst As Range

Set r_src = ws_src.Range("B4").Resize(1000, 100)
Set r_dst = ws_dst.Range("B4").Resize(1000, 100)

data = r_src.Value2
r_dst.Value2 = data

End Sub
1
追加された

これを試して:

Option Explicit
Sub test()
    Dim wb As Workbook, wb2 As Workbook
    Dim ws As Worksheet
    Dim vFile As Variant

    'Set source workbook
    Set wb = ActiveWorkbook
    'Open the target workbook
    vFile = Application.GetOpenFilename("Excel-files,*.xls", _
        1, "Select One File To Open", , False)
    'if the user didn't select a file, exit sub
    If TypeName(vFile) = "Boolean" Then Exit Sub
    Workbooks.Open vFile
    'Set targetworkbook
    Set wb2 = ActiveWorkbook

    'Copy data from a range in the first workbook to another range in the other workbook
    wb2.Worksheets("Sheet2").Range("C3:D4").Value = wb.Worksheets("Sheet1").Range("A1:B2").Value
End Sub
0
追加された
これはあなたを助けますか? msdn.microsoft.com/en-us/library /aa221353(v=office.11​​).aspx ...月を確認するには条件付きでなければなりません
追加された 著者 MacGyver,
ソースの各行(ステップバイステップ)とその行のターゲットワークブック(ステップバイステップ)で何をしたいのかを詳細に記述できますか?私は目標が何であるか理解していない。あなたがソースのスクリーンショットイメージを撮ってターゲットのクイックハードコピーを作成し、それらのイメージをあなたの質問に挿入すれば、私が助けることができるなら、多くの助けになるかもしれません。
追加された 著者 MacGyver,
ターゲットの行2以外のすべてのデータを移動したいのですが、正しいですか?その場合は、範囲全体をコピーしないでください。データがそこに来たら、ターゲットでのみクリーンアップを実行しますか?私がすばやく簡単なVBAコードを取得するために使用するトリックの1つは、マクロを記録してから録音を停止し、マクロ内のコードがどのように見えているかを確認し、カスタムコードに適用することです。
追加された 著者 MacGyver,
その場合は、マウスで行2を手動で削除し、そのコードが何であるかを記録しながら調べてください。
追加された 著者 MacGyver,
wb2 = Workbooks.Open vFileの設定は短く安全です
追加された 著者 Patrick Honorez,
ご協力ありがとうございました!上記のコードでは、あらかじめ貼り付けられている範囲を知る必要があります。ただし、月によって異なります。私は月を含むCellを見つけることができ、私はオフセットを知っている。しかし、私はどういうわけかそれらを通って私の標的細胞に到達するために繰り返す必要があるでしょうか?
追加された 著者 replax,
もう一度、ありがとう!ありがとう!しかし、私が一般的に必要な細胞をろ過するために適用することができる条件がないので、例えば、各3番目のセル?
追加された 著者 replax,
私はスクリーンショットといくつかの情報を追加しました。実際には、2つの上側の行は、第3行のデータを計算するために必要であり、ソースシート上で必要となる。
追加された 著者 replax,