Мне трудно точно понять, что вы пытаетесь сделать здесь без реальной рабочей тетради.Так что я сделал все возможное, надеюсь, ошибок нет.Если бы у меня была настоящая рабочая тетрадь или пример, я мог бы получить действительно хороший оптимизированный код.Вот мой первый проход:
Dim InitRange As Range, Counter As Range, Filler As Range, ParaSelect As Range, Paraloc As Range
Dim Paravalloc As Range, Unitloc As Range, methodloc As Range, eCell As Range
Dim paracount As Long, CurNum As Long, MaxNum As Long, checkRow As Long, InsertRow As Long
Dim x As Long, y As Long, vRow As Long
CurNum = 0
x = 1
Set ParaSelect = Range("K1", Range("K1").End(xlToRight))
InsertRow = ParaSelect.Count - 1
Set InitRange = Range("A4", "F4")
Set Counter = InitRange
MaxNum = InitRange.Resize(1, 1).End(xlDown).row - 4
Set eCell = InitRange
'Not sure what you are trying to accomplish here so I'll the original code (except for non essential code.
Do
Rows(eCell.Offset(x, 0).row & ":" & eCell.Offset(x, 0).row + InsertRow - 1).Insert
x = x + InsertRow + 1
If x > MaxNum * (InsertRow + 1) Then Exit Do
Loop
Set Filler = InitRange
Set Paraloc = Range("G4")
Set Paravalloc = Range("H4")
Set Unitloc = Range("I4")
Set methodloc = Range("J4")
vRow = 0
y = 0
Do
ParaSelect.Copy
Paraloc.Offset(y, 0).PasteSpecial xlPasteValues, Transpose:=True
ParaSelect.Offset(1, 0).Copy
methodloc.Offset(y, 0).PasteSpecial xlPasteValues, Transpose:=True
ParaSelect.Offset(2, 0).Copy
Unitloc.Offset(y, 0).PasteSpecial xlPasteValues, Transpose:=True
ParaSelect.Offset(CurNum * (InsertRow + 1) + 3, 0).Copy
Paravalloc.Offset(y, 0).PasteSpecial xlPasteValues, Transpose:=True
Filler.Offset(y, 0).Copy
CurNum = CurNum + 1
y = y + 1
checkRow = 1
Do
Filler.Offset(y, 0).PasteSpecial xlPasteValues
y = y + 1
checkRow = checkRow + 1
Loop Until checkRow > InsertRow
Loop Until CurNum >= MaxNum
ОК, это должно быть довольно эффективно.Сначала убедитесь, что вы это проверили, даже не знаю, снял ли я какое-либо из моих смещений.
Sub TransposeIt()
Dim i As Long, j As Long, k As Long
Dim rData As Range
Dim sData() As String, sName As String
Dim wks As Worksheet
Dim vData As Variant
Application.ScreenUpdating = False
Application.EnableEvents = False
'Initialize worksheets
Set wks = ActiveSheet
'Get data
Set rData = wks.UsedRange
vData = rData
ReDim sData(1 To 10, 1 To rData.Columns.Count - 10)
rData.Offset(1).Clear
rData.Offset(10).Resize(1).Clear
For i = 1 To UBound(vData)
For j = 1 To UBound(sData)
For k = 1 To 6
sData(j, k) = vData(i, k)
Next k
sData(j, 7) = vData(1, j + 10)
sData(j, 8) = vData(i, j + 10)
sData(j, 9) = vData(3, j + 10)
sData(j, 10) = vData(2, j + 10)
Next j
'Print transposed data
wks.Range("A" & Application.Rows.Count).End(xlUp) _
.Offset(1).Resize(UBound(sData), UBound(sData, 2)) = sData
Next i
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub