Excel VBA - как эффективно скопировать несколько ячеек из одного файла в другой? - PullRequest
0 голосов
/ 19 декабря 2011

В настоящее время я борюсь со следующим: у меня есть два файла Excel.Один файл содержит много данных, другой используется для его оценки.Теперь мне нужно эффективно скопировать данные из источника в целевую книгу.Исходный источник данных выглядит примерно так:

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).

Целевая рабочая книга выглядит точно так же, пропуская половину пустой строки "2".1007 * В каждой строке около 10 ценных записей.Как бы я наиболее эффективно смог скопировать данные во вторую рабочую книгу?Пожалуйста, дайте мне знать, если есть больше информации, которую я мог бы предоставить.Спасибо за потраченное время!

РЕДАКТИРОВАТЬ: пример снимка экрана Пояснение: на снимке экрана показан исходный лист.Важной информацией является та, которая выбрана в сс.Лист идет вправо, как это (до BF).Мне нужно скопировать каждую шестую запись.Целевой лист выглядит точно так же (за исключением полупустой средней строки), за исключением необходимой информации, которая в источнике является формулой, но она должна быть значением в цели.Большое спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

Вот пример кода, который поможет вам двигаться в правильном направлении:

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
0 голосов
/ 20 декабря 2011

так что после еще одного исследования, я думаю, что нашел ответ. Пожалуйста, исправьте или улучшите меня, если мой подход не верен / неправильн / не идеален. Я использую цикл, а затем просто присваиваю значение ... Мне интересно, если исходить из 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

Спасибо всем за ваше время, вклад и советы!

0 голосов
/ 19 декабря 2011

Попробуйте это:

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
...