Option Explicit
Sub AddRowsAndCopyData()
Dim lRow As Long, Zw As Long
Const iTem5 As String = "ITEM5", iTem2 = "ITEM2"
Dim Rng As Range
lRow = Sheets("Sheet3").Range("B65432").End(xlUp).Row
For Zw = lRow To 1 Step -1
If UCase$(Cells(Zw, 2)) = iTem5 Then
If Rng Is Nothing Then
Set Rng = Cells(Zw, 2).Offset(1).Resize(3, 1)
Else
Set Rng = Union(Rng, Cells(Zw, 2).Offset(1).Resize(3, 1))
End If
ElseIf UCase$(Cells(Zw, 2)) = iTem2 Then
If Rng Is Nothing Then
Set Rng = Cells(Zw, 2).Offset(1).Resize(2, 1)
Else
Set Rng = Union(Rng, Cells(Zw, 2).Offset(1).Resize(2, 1))
End If
End If
Next Zw
Rng.EntireRow.Insert Shift:=xlDown
lRow = Sheets("Sheet3").Range("B65432").End(xlUp).Row
For Zw = 2 To lRow
If UCase$(Cells(Zw, 2)) = iTem5 Then
With Cells(Zw, 2)
.Offset(1) = "iTem51": .Offset(2) = "iTem52"
.Offset(1, 1).Resize(3, 1) = .Offset(, 1)
.Offset(3) = "iTem53": .Offset(2, 1) = 2 * .Offset(2, 1)
.Offset(2, 2).Resize(2, 1) = 0.1: .Offset(1, 2) = .Offset(, 2) - 0.2
End With
ElseIf UCase$(Cells(Zw, 2)) = iTem2 Then
With Cells(Zw, 2)
.Offset(1) = "iTem21": .Offset(2) = "iTem22"
.Offset(1, 1).Resize(2, 1) = .Offset(, 1)
.Offset(2, 2) = 0.1: .Offset(1, 2) = .Offset(, 2) - 0.1
End With
End If
Next Zw
Exit Sub: End Sub
Chưa rõ chổ này ra răng? Bạn nói 'giữ' là nghĩa làm sao?Cám ơn SA_DQ nhưng cho mình hỏi là bạn có thể giữ công thức item21, item22, item51, item52, item53 không
Lười quá nha! Một khi bạn chiêm nghiệm mình thực thi dưới đây; bạn sẽ thấy, đáng ra tự thực hiện lấy thì vui hơn!!!& hình như bên sheet1 và sheet2 không tự động thêm dòng vào vị trì tương ứng. Mong bạn giúp mình
Option Explicit
Sub AddRowsIn3Sheet()
Dim StrC As String, jZ As Byte
For jZ = 1 To 3
StrC = "Sheet" & jZ
AddRowsAndCopyData StrC
Next jZ
End Sub
Sub AddRowsAndCopyData(ShName As String)
Dim lRow As Long, Zw As Long
Const iTem5 As String = "ITEM5", iTem2 = "ITEM2"
Dim Rng As Range
Sheets(ShName).Select '<<='
lRow = Range("B65432").End(xlUp).Row '<<='
For Zw = lRow To 1 Step -1
If UCase$(Cells(Zw, 2)) = iTem5 Then
If Rng Is Nothing Then
Set Rng = Cells(Zw, 2).Offset(1).Resize(3, 1)
Else
Set Rng = Union(Rng, Cells(Zw, 2).Offset(1).Resize(3, 1))
End If
ElseIf UCase$(Cells(Zw, 2)) = iTem2 Then
If Rng Is Nothing Then
Set Rng = Cells(Zw, 2).Offset(1).Resize(2, 1)
Else
Set Rng = Union(Rng, Cells(Zw, 2).Offset(1).Resize(2, 1))
End If
End If
Next Zw
Rng.EntireRow.Insert Shift:=xlDown
lRow = Range("B65432").End(xlUp).Row '<<='
For Zw = 2 To lRow
If UCase$(Cells(Zw, 2)) = iTem5 Then
With Cells(Zw, 2)
.Offset(1) = "iTem51": .Offset(2) = "iTem52"
.Offset(1, 1).Resize(3, 1) = .Offset(, 1)
.Offset(3) = "iTem53": .Offset(2, 1) = 2 * .Offset(2, 1)
If ShName = "Sheet3" Then '<<='
.Offset(2, 2).Resize(2, 1) = 0.1:
.Offset(1, 2) = .Offset(, 2) - 0.2
End If
End With
ElseIf UCase$(Cells(Zw, 2)) = iTem2 Then
With Cells(Zw, 2)
.Offset(1) = "iTem21": .Offset(2) = "iTem22"
.Offset(1, 1).Resize(2, 1) = .Offset(, 1)
If ShName = "Sheet3" Then '<<='
.Offset(2, 2) = 0.1:
.Offset(1, 2) = .Offset(, 2) - 0.1
End If
End With
End If
Next Zw
End Sub
Mình sẽ chỉ hướng dẫn thôi nha;À, ý mình nói là công thức tính cột thành tiền sheet3 ở 5 cell tương ứng của item21, item22, item51, item52,item53 đó mà
Sub GanCT()
Range("E4") = "=C4*D4": Range("e5") = "=C5*D5"
End Sub
Sub FillHand()
Range("E2").Select
Selection.AutoFill Destination:=Range("E2:E21"), Type:=xlFillDefault
Range("E2:E21").Select
End Sub
Range("E2").Select
Selection.AutoFill Destination:=Range("E2:E" & lRow), Type:=xlFillDefault
Range("E2").Select
If ShName = "Sheet3" Then '<<='
.Offset(2, 2) = 0.1:
.Offset(1, 2) = .Offset(, 2) - 0.1
'<<='
End If
Mình nhờ sư phụ chỉ giáo thôi
Option Explicit
Sub AddRowsIn3Sheet()
Dim StrC As String, jZ As Byte
For jZ = 1 To 3
StrC = "Sheet" & jZ
AddRowsAndCopyData StrC
Next jZ
End Sub
Sub AddRowsAndCopyData(ShName As String)
Dim lRow As Long, Zw As Long
Const iTem5 As String = "ITEM5", iTem2 = "ITEM2"
Dim Rng As Range
Sheets(ShName).Select '<<='
lRow = Range("B65432").End(xlUp).Row '<<='
For Zw = lRow To 1 Step -1
If UCase$(Cells(Zw, 2)) = iTem5 Then
If Rng Is Nothing Then
Set Rng = Cells(Zw, 2).Offset(1).Resize(3, 1)
Else
Set Rng = Union(Rng, Cells(Zw, 2).Offset(1).Resize(3, 1))
End If
ElseIf UCase$(Cells(Zw, 2)) = iTem2 Then
If Rng Is Nothing Then
Set Rng = Cells(Zw, 2).Offset(1).Resize(2, 1)
Else
Set Rng = Union(Rng, Cells(Zw, 2).Offset(1).Resize(2, 1))
End If
End If
Next Zw
Rng.EntireRow.Insert Shift:=xlDown
lRow = Range("B65432").End(xlUp).Row '<<='
For Zw = 2 To lRow
If UCase$(Cells(Zw, 2)) = iTem5 Then
With Cells(Zw, 2)
.Offset(1) = "iTem51": .Offset(2) = "iTem52"
.Offset(1, 1).Resize(3, 1) = .Offset(, 1)
.Offset(3) = "iTem53": .Offset(2, 1) = 2 * .Offset(2, 1)
If ShName = "Sheet3" Then '<<='
.Offset(2, 2).Resize(2, 1) = 0.1:
.Offset(1, 2) = .Offset(, 2) - 0.2
End If
End With
ElseIf UCase$(Cells(Zw, 2)) = iTem2 Then
With Cells(Zw, 2)
.Offset(1) = "iTem21": .Offset(2) = "iTem22"
.Offset(1, 1).Resize(2, 1) = .Offset(, 1)
If ShName = "Sheet3" Then '<<='
.Offset(2, 2) = 0.1:
.Offset(1, 2) = .Offset(, 2) - 0.1
Range("E2").Select
Selection.AutoFill Destination:=Range("E2:E" & lRow), _
Type:=xlFillDefault
End If
End With
End If
Next Zw
End Sub