[Help] Giúp tạo Macro Insert cột và coppy có điều kiện (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

robinhsoon

Thành viên hoạt động
Tham gia
19/1/16
Bài viết
153
Được thích
11
Chào các Thầy Cộng Động mạng GPEX!

Hiện tại công việc em đang cần một vài cái Macro nên nhờ các Thầy giúp đỡ em nhé...
trong File em có diễn giải các công việc của em làm..

Mong các Thầy giúp đỡ!
Em cảm ơn ạ!
 

File đính kèm

Chào các Thầy Cộng Động mạng GPEX!

Hiện tại công việc em đang cần một vài cái Macro nên nhờ các Thầy giúp đỡ em nhé...
trong File em có diễn giải các công việc của em làm..

Mong các Thầy giúp đỡ!
Em cảm ơn ạ!
Bạn thử ý thứ nhất:
PHP:
Sub abc()
    Dim dk, LR, Arr1, Arr2
    Arr1 = Array("Week1", "Week2", "Week3", "Week4", "Total", "Gap")
    Arr2 = Array("Week1", "Week2", "Week3", "Week4", "Week5", "Total", "Gap")
    LR = Cells(Rows.Count, "L").End(xlUp).row
    On Error Resume Next
    dk = InputBox("Xin moi nhap vao so cot( 4 hoac 5)", "Thong bao")
    If dk = Empty Then
    MsgBox " Ban da khong chon...!"
    End If
    [O1].Resize(, dk + 2).EntireColumn.Insert
    If dk = 4 Then
        [O1].Resize(, dk + 2).Value = Arr1
        Range("O2:O" & LR).Resize(, 4).FormulaR1C1 = "=ROUND(RC10/5,0)"
        Range("S2:S" & LR).FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
        Range("T2:T" & LR).FormulaR1C1 = "=RC[-1]-RC[-10])"
    End If
    If dk = 5 Then
        [O1].Resize(, dk + 2).Value = Arr2
        Range("O2:O" & LR).Resize(, 5).FormulaR1C1 = "=ROUND(RC10/5,0)"
        Range("T2:T" & LR).FormulaR1C1 = "=SUM(RC[-5]:RC[-2])"
        Range("U2:U" & LR).FormulaR1C1 = "=RC[-1]-RC[-11])"
    End If
End Sub
 
Upvote 0
Bạn thử ý thứ nhất:
PHP:
Sub abc()
    Dim dk, LR, Arr1, Arr2
    Arr1 = Array("Week1", "Week2", "Week3", "Week4", "Total", "Gap")
    Arr2 = Array("Week1", "Week2", "Week3", "Week4", "Week5", "Total", "Gap")
    LR = Cells(Rows.Count, "L").End(xlUp).row
    On Error Resume Next
    dk = InputBox("Xin moi nhap vao so cot( 4 hoac 5)", "Thong bao")
    If dk = Empty Then
    MsgBox " Ban da khong chon...!"
    End If
    [O1].Resize(, dk + 2).EntireColumn.Insert
    If dk = 4 Then
        [O1].Resize(, dk + 2).Value = Arr1
        Range("O2:O" & LR).Resize(, 4).FormulaR1C1 = "=ROUND(RC10/5,0)"
        Range("S2:S" & LR).FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
        Range("T2:T" & LR).FormulaR1C1 = "=RC[-1]-RC[-10])"
    End If
    If dk = 5 Then
        [O1].Resize(, dk + 2).Value = Arr2
        Range("O2:O" & LR).Resize(, 5).FormulaR1C1 = "=ROUND(RC10/5,0)"
        Range("T2:T" & LR).FormulaR1C1 = "=SUM(RC[-5]:RC[-2])"
        Range("U2:U" & LR).FormulaR1C1 = "=RC[-1]-RC[-11])"
    End If
End Sub
Chào Thầy!
Ý thứ nhất code chạy ok ạ..
cảm ơn Thầy ạ.. nhờ Thầy giúp e luôn ý kia ạ
 
Upvote 0
Bạn thử ý thứ nhất:
PHP:
Sub abc()
    Dim dk, LR, Arr1, Arr2
    Arr1 = Array("Week1", "Week2", "Week3", "Week4", "Total", "Gap")
    Arr2 = Array("Week1", "Week2", "Week3", "Week4", "Week5", "Total", "Gap")
    LR = Cells(Rows.Count, "L").End(xlUp).row
    On Error Resume Next
    dk = InputBox("Xin moi nhap vao so cot( 4 hoac 5)", "Thong bao")
    If dk = Empty Then
    MsgBox " Ban da khong chon...!"
    End If
    [O1].Resize(, dk + 2).EntireColumn.Insert
    If dk = 4 Then
        [O1].Resize(, dk + 2).Value = Arr1
        Range("O2:O" & LR).Resize(, 4).FormulaR1C1 = "=ROUND(RC10/5,0)"
        Range("S2:S" & LR).FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
        Range("T2:T" & LR).FormulaR1C1 = "=RC[-1]-RC[-10])"
    End If
    If dk = 5 Then
        [O1].Resize(, dk + 2).Value = Arr2
        Range("O2:O" & LR).Resize(, 5).FormulaR1C1 = "=ROUND(RC10/5,0)"
        Range("T2:T" & LR).FormulaR1C1 = "=SUM(RC[-5]:RC[-2])"
        Range("U2:U" & LR).FormulaR1C1 = "=RC[-1]-RC[-11])"
    End If
End Sub
Giúp e ý thứ 2 với ạ
 
Upvote 0
Giúp e ý thứ 2 với ạ
Chưa rõ lắm ý thứ hai. Làm thí thí vậy thôi.
PHP:
Public Sub GPE()
Dim sRng As Range, Rng As Range, J As Long, R As Long
With Sheets("Data")
    R = .Range("A60000").End(xlUp).Row
    Set sRng = .Range("A1:N" & R)
    Set Rng = .Range("O1", .Range("O1").End(xlToRight))
End With
For J = 1 To Rng.Columns.Count - 2
    With Sheets(Rng(1, J).Value)
        sRng.Copy .Range("A1")
        Rng(1, J).Resize(R).Copy .Range("O1")
    End With
Next J
Set sRng = Nothing: Set Rng = Nothing
End Sub
 
Upvote 0
dùng thử code
Mã:
Sub InputWeeks()
  Dim j As Byte, Col As Byte, LastR As Long
  Col = InputBox("Xin moi nhap vao so cot >0 ", "Thong bao")
  If Col = Empty Or Not IsNumeric(Col) Then
    MsgBox " Ban khong nhap cot, hen gap lai lan sau...!"
    Exit Sub
  End If
With Sheets("Data")
  LastR = .Cells(Rows.Count, "L").End(xlUp).Row
  .Range("O1").Resize(LastR, 100).ClearContents
  For j = 1 To Col
    .Range("N1").Offset(, j).Value = "Week " & j
  Next j
  .Range("N1").Offset(, j).Value = "Total"
  .Range("N1").Offset(, j + 1).Value = "Gap"
  .Range("O2:O" & LastR).Resize(, Col).FormulaR1C1 = "=ROUND(RC10/5,0)"
  .Range("O2:O" & LastR).Offset(, j - 1).FormulaR1C1 = "=SUM(RC[" & -Col & "]:RC[-1])"
  .Range("O2:O" & LastR).Offset(, j).FormulaR1C1 = "=RC[-1]-RC10"
End With
End Sub
Sub CopyWeeks()
  Dim j As Byte, Col As Byte, LastR As Long, Arr As Variant, Warr As Variant
  Col = Sheets("Data").Range("A1").End(xlToRight).Column - 16
  If Col < 1 Then MsgBox " Xem lai du lieu, hen gap lai lan sau...!": Exit Sub
  LastR = Sheets("Data").Cells(Rows.Count, "L").End(xlUp).Row
  Arr = Sheets("Data").Range("A1:N" & LastR).Value
  For j = 1 To Col
    Warr = Sheets("Data").Range("N1:N" & LastR).Offset(, j).Value
    Sheets("Week " & j).UsedRange.ClearContents
    Sheets("Week " & j).Range("A1").Resize(LastR, 14) = Arr
    Sheets("Week " & j).Range("O1").Resize(LastR) = Warr
  Next j
End Sub
 
Upvote 0
dùng thử code
Mã:
Sub InputWeeks()
  Dim j As Byte, Col As Byte, LastR As Long
  Col = InputBox("Xin moi nhap vao so cot >0 ", "Thong bao")
  If Col = Empty Or Not IsNumeric(Col) Then
    MsgBox " Ban khong nhap cot, hen gap lai lan sau...!"
    Exit Sub
  End If
With Sheets("Data")
  LastR = .Cells(Rows.Count, "L").End(xlUp).Row
  .Range("O1").Resize(LastR, 100).ClearContents
  For j = 1 To Col
    .Range("N1").Offset(, j).Value = "Week " & j
  Next j
  .Range("N1").Offset(, j).Value = "Total"
  .Range("N1").Offset(, j + 1).Value = "Gap"
  .Range("O2:O" & LastR).Resize(, Col).FormulaR1C1 = "=ROUND(RC10/5,0)"
  .Range("O2:O" & LastR).Offset(, j - 1).FormulaR1C1 = "=SUM(RC[" & -Col & "]:RC[-1])"
  .Range("O2:O" & LastR).Offset(, j).FormulaR1C1 = "=RC[-1]-RC10"
End With
End Sub
Sub CopyWeeks()
  Dim j As Byte, Col As Byte, LastR As Long, Arr As Variant, Warr As Variant
  Col = Sheets("Data").Range("A1").End(xlToRight).Column - 16
  If Col < 1 Then MsgBox " Xem lai du lieu, hen gap lai lan sau...!": Exit Sub
  LastR = Sheets("Data").Cells(Rows.Count, "L").End(xlUp).Row
  Arr = Sheets("Data").Range("A1:N" & LastR).Value
  For j = 1 To Col
    Warr = Sheets("Data").Range("N1:N" & LastR).Offset(, j).Value
    Sheets("Week " & j).UsedRange.ClearContents
    Sheets("Week " & j).Range("A1").Resize(LastR, 14) = Arr
    Sheets("Week " & j).Range("O1").Resize(LastR) = Warr
  Next j
End Sub
Cảm ơn Thầy ạ! đoạn code rất nhanh và hay

Em muốn coppy thêm cột GAP là cột cuối cùng thì em sửa sao ạ...
Mong Thầy giúp đỡ!
 
Upvote 0
Chưa rõ lắm ý thứ hai. Làm thí thí vậy thôi.
PHP:
Public Sub GPE()
Dim sRng As Range, Rng As Range, J As Long, R As Long
With Sheets("Data")
    R = .Range("A60000").End(xlUp).Row
    Set sRng = .Range("A1:N" & R)
    Set Rng = .Range("O1", .Range("O1").End(xlToRight))
End With
For J = 1 To Rng.Columns.Count - 2
    With Sheets(Rng(1, J).Value)
        sRng.Copy .Range("A1")
        Rng(1, J).Resize(R).Copy .Range("O1")
    End With
Next J
Set sRng = Nothing: Set Rng = Nothing
End Sub
Cảm ơn Thầy đã quan tâm ạ..
 
Upvote 0
Cảm ơn Thầy ạ! đoạn code rất nhanh và hay

Em muốn coppy thêm cột GAP là cột cuối cùng thì em sửa sao ạ...
Mong Thầy giúp đỡ!
Khai báo Garr và thêm 2 dòng lệnh Garr
Mã:
Sub CopyWeeks()
  Dim j As Byte, Col As Byte, LastR As Long, Arr As Variant, Warr As Variant, Garr As Variant
  Col = Sheets("Data").Range("A1").End(xlToRight).Column - 16
  If Col < 1 Then MsgBox " Xem lai du lieu, hen gap lai lan sau...!": Exit Sub
  LastR = Sheets("Data").Cells(Rows.Count, "L").End(xlUp).Row
  Arr = Sheets("Data").Range("A1:N" & LastR).Value
  Garr = Sheets("Data").Range("N1:N" & LastR).Offset(, Col + 2).Value
  For j = 1 To Col
    Warr = Sheets("Data").Range("N1:N" & LastR).Offset(, j).Value
    Sheets("Week " & j).UsedRange.ClearContents
    Sheets("Week " & j).Range("A1").Resize(LastR, 14) = Arr
    Sheets("Week " & j).Range("O1").Resize(LastR) = Warr
    Sheets("Week " & j).Range("P1").Resize(LastR) = Garr
  Next j
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom