Юрий, большущее вам спасибо за столь оперативный ответ. Ваш код работает на приведенном мною примере, однако, когда я пытаюсь применить его в своем файле, все равно возникает ошибка.
В связи с этим я решил прикрепить файл с которым я работаю. По сути дела мне надо преобразовать данные, содержащиеся на Листе 1 согласно примеру на Листе 2. Проблема у меня возникает, когда я пытаюсь перенести информацию из 3ий строки (Period X) на Лист 2 в Столбец J. Я попробовал конструкцию With – End With, предложенную Юрием, но она не сработала.
Sub Reformatin_Fcst_with_Jugmt()
Dim i As Integer, rgX As Range, rgX2 As Range, DetFields As Range
Dim intNumRow As Integer, intNumRow2 As Integer, intNumCol As Integer
Worksheets("Sheet2").Cells.Clear
Worksheets("Sheet2").Range("B1").Value = "Project + Period"
Worksheets("Sheet2").Range("C1").Value = "WBS Org Level 2"
Worksheets("Sheet2").Range("D1").Value = "Project"
Worksheets("Sheet2").Range("E1").Value = "Project2"
Worksheets("Sheet2").Range("F1").Value = "PRJ Customer2"
Worksheets("Sheet2").Range("G1").Value = "PRJ Resp Person2"
Worksheets("Sheet2").Range("H1").Value = "PRJ Admin2"
Worksheets("Sheet2").Range("I1").Value = "Fiscal Quarter"
Worksheets("Sheet2").Range("J1").Value = "Fiscal year/period"
Worksheets("Sheet2").Range("K1").Value = "Plan Revenue"
Worksheets("Sheet2").Range("L1").Value = "Plan Total Incurred Cost"
Worksheets("Sheet2").Range("M1").Value = "EGM%"
Set rgX = Range("a1").End(xlDown).Offset(-1)
Set rgX2 = Worksheets("Sheet2").Range("a2")
intNumRow = Range("a1").End(xlDown).CurrentRegion.Rows.Count
Set DetFields = Range(Cells(Range("a1").End(xlDown).Row + 1, 1), Cells(intNumRow, 5))
For i = 1 To Application.WorksheetFunction.CountIf(Rows("3:3"), "Period*")
Set rgX = Rows("3:3").Find(What:="Period", After:=rgX)
DetFields.Copy Worksheets("Sheet2").Cells(rgX2.Row, rgX2.Column + 2)
Range(Cells(rgX.Row + 2, rgX.Column), Cells(intNumRow, rgX.Column + 1)).Copy _
Worksheets("Sheet2").Cells(rgX2.Row, rgX2.Column + 10)
intNumRow2 = rgX2.Offset(0, 2).End(xlDown).CurrentRegion.Rows.Count
With Sheets("Sheet2")
rgX.Copy .Range(Cells(rgX2.Row, rgX2.Column + 9), Cells(intNumRow2, rgX2.Column + 9))
End With
Set rgX2 = Worksheets("Sheet2").Cells(intNumRow2 + 1, 1)
Next i
End Sub
Может у меня руки кривые, помогите, пожалуйста. Мне принципиально скопировать без переключения листов, поскольку у меня достаточно много листов, и поэтому с переключением, даже с выключенным ScrenUpdate это займет много времени. Спасибо.