Code insert them 3 dong (1 người xem)

Liên hệ QC

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

jindodiep

Thành viên mới
Tham gia
10/8/14
Bài viết
18
Được thích
1
Hi ACE GPE
Jindo có 1 file cần chèn thêm 3 dòng sau mỗi Inv-No. Nhưng trong file đó 1 Inv-No có thể có 1 Lot-No or Nhiều Lot-No. ACE giúp dùm với vì dữ liệu rất lớn nên không thể ngồi insert nhiều lần và động tác này lập đi lập lại. ACE giúp với.
 

File đính kèm

Code:
Sub test()
lr = Range("A" & Rows.Count).End(xlUp).Row - 1
For i = 2 To lr * 4 Step 4
Rows(i + 1).Insert
Rows(i + 2).Insert
Rows(i + 2).Insert
Next i
End Sub
 
Upvote 0
bạn hiểu sai ý mình rồi và code của bạn mình không thể áp dụng được. Cám ơn bạn đã giúp đỡ
 
Upvote 0
Lí ra sau câu này:
[thongbao] Nhưng trong file đó 1 Inv-No có thể có 1 Lot-No or Nhiều Lot-No.[/thongbao]
Nên có 1 hay vài câu nữa giải thích thêm chổ này
Tốt nhất thì lấy 1 trang tính trống làm ví dụ kết quả mong muốn!

Chúc vui!
 
Upvote 0
Hi ACE GPE
Jindo có 1 file cần chèn thêm 3 dòng sau mỗi Inv-No. Nhưng trong file đó 1 Inv-No có thể có 1 Lot-No or Nhiều Lot-No. ACE giúp dùm với vì dữ liệu rất lớn nên không thể ngồi insert nhiều lần và động tác này lập đi lập lại. ACE giúp với.

Bạn làm bằng tay, kết quả thế nào cứ đưa lên đây, người ta tham khảo kết quả đúng ấy mới có thể viết code được
(vì đọc mô tả của bạn cũng chẳng hiểu phải làm gì)
 
Upvote 0
Hi ACE GPE
Xem tập tin đính kèm dùm Jindo nhé. Tập tin đã sữa lại. Có 2 sheet. Sheet thứ 2 là sau khi Jindo insert bằng tay. Vui lòng giúp dùm với
 

File đính kèm

Upvote 0
Hi ACE GPE
Xem tập tin đính kèm dùm Jindo nhé. Tập tin đã sữa lại. Có 2 sheet. Sheet thứ 2 là sau khi Jindo insert bằng tay. Vui lòng giúp dùm với
Của Jindo nè @$@!^%
Mã:
Sub Test5() Dim Dic As Object, Arr(), CSDL(), w As Long, k As Integer
 Dim head(), iStr As String, Cls As Range
 
 Application.ScreenUpdating = False
    Set Dic = CreateObject("Scripting.Dictionary")
    CSDL() = Sheets("Original").Range(Sheet1.[A2], Sheet1.[A2].End(xlDown)).Resize(, 7).Value
    ReDim Arr(1 To 10000, 1 To UBound(CSDL, 2))
    
    head = Sheets("Original").Range("A1:G1").Value
    For i = 1 To UBound(CSDL(), 1)
    iStr = CStr(CSDL(i, 1))
        If Not Dic.exists(iStr) Then
            
            Dic.Add iStr, w
            w = w + 5
            For k = 1 To UBound(CSDL(), 2)
                Arr(w, k) = CSDL(i, k)
                Arr(w - 1, k) = head(1, k)
            Next k
        Else
            w = w + 1
            For k = 1 To UBound(CSDL(), 2)
                Arr(w, k) = CSDL(i, k)
            Next k
        End If
    Next i
    With Sheets("KetQua").Range("A1:G1")
        .Resize(10000).Clear
        .Resize(w + 9).Value = Arr()
        .Resize(w + 3).Borders.LineStyle = 1
        .Resize(3).Delete
    End With
    For Each Cls In Sheets("KetQua").Range("A1").Resize(w)
        If Left(Cls, 6) = "INV-NO" Then
            With Cls.Resize(, 7)
                .Interior.ThemeColor = xlThemeColorAccent3
                .Interior.TintAndShade = 0.799981688894314
                .Font.Bold = True
                .HorizontalAlignment = xlCenter
            End With
        End If
    Next Cls
 Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
Thêm 1 tham khảo nữa cho bạn:
PHP:
Option Explicit
 Dim Ar0(), Arr(), dArr()
Sub Them3Dong()
 Dim Rws As Long, J As Long, W As Long
 
 ReDim Ar0(1 To 1, 1 To 7)
 Rws = [B1].CurrentRegion.Rows.Count
 Ar0() = [A1:G1].Value
 Arr() = [A2].Resize(Rws + 1, 7).Value
 ReDim dArr(1 To 4 * Rws, 1 To 7)
  W = 1:                                TDe W
 For J = 1 To UBound(Arr())
    W = W + 1:                          dArr(W, 3) = Arr(J, 3)
    dArr(W, 1) = Arr(J, 1):             dArr(W, 2) = Arr(J, 2)
    If Arr(J + 1, 1) <> Arr(J, 1) And Arr(J + 1, 1) <> "" Then
        W = W + 4:                      TDe W
    ElseIf Arr(J + 1, 1) = Arr(J, 1) Then
        dArr(W, 1) = Arr(J, 1):         dArr(W, 2) = Arr(J, 2)
        dArr(W, 3) = Arr(J, 3)
    End If
    If Arr(J + 1, 1) = "" Then Exit For
 Next J
 [r1].Resize(W, 7).Value = dArr()
End Sub
Mã:
[B]Sub TDe(Rw As Long)
[/B]Dim J As Byte
 For J = 1 To 7
    dArr(Rw, J) = Ar0(1, J)
 Next J
[B]End Sub
[/B]
 

File đính kèm

  • Them3Dong.jpg
    Them3Dong.jpg
    92 KB · Đọc: 58
Lần chỉnh sửa cuối:
Upvote 0
Hi ChanhTQ@
Sao Jindo không chạy được code. Có lẽ gà quá, Chỉ rỏ dùm với được ko. Cám ơn nhiều Nhiều. Cámm ơn Loinguyen212 đã giúp đỡ nhé
 
Upvote 0
Bạn copy cả phần Sub TDe của bác ấy vào trong code thì mới chạy được.
 
Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thêm 1 tham khảo nữa cho bạn:
PHP:
Option Explicit
 Dim Ar0(), Arr(), dArr()
Sub Them3Dong()
 Dim Rws As Long, J As Long, W As Long
 
 ReDim Ar0(1 To 1, 1 To 7)
 Rws = [B1].CurrentRegion.Rows.Count
 Ar0() = [A1:G1].Value
 Arr() = [A2].Resize(Rws + 1, 7).Value
 ReDim dArr(1 To 4 * Rws, 1 To 7)
  W = 1:                                TDe W
 For J = 1 To UBound(Arr())
    W = W + 1:                          dArr(W, 3) = Arr(J, 3)
    dArr(W, 1) = Arr(J, 1):             dArr(W, 2) = Arr(J, 2)
    If Arr(J + 1, 1) <> Arr(J, 1) And Arr(J + 1, 1) <> "" Then
        W = W + 4:                      TDe W
1. Bác ChanhTQ cho em hỏi, trong trường hợp mà chỉ insert 3 dòng thôi, không insert thêm cả dòng title thì có cách nào để không phải viết thêm một sub phụ cho trường hợp đặc biệt nữa không ạ? Lấy ngay ví dụ ở trên: for j...next, w chạy theo j, nhưng lại có một trường hợp đặc biệt của w là khi w = 1. Vậy làm sao để mình xử lý trường hợp này ạ?
Bài toán của em có vấn đề tương tự, đêm qua giải mãi mà không được, bác chỉ giáo cho em với ạ -+*/
2. Đoạn trên có dArr(W, 1) = Arr(J, 1): dArr(W, 2) = Arr(J, 2), em thắc mắc dấu : có tác dụng như thế nào, mọi người trả lời giúp em. Thân!
 
Lần chỉnh sửa cuối:
Upvote 0
1. Bác ChanhTQ cho em hỏi, trong trường hợp mà chỉ insert 3 dòng thôi, không insert thêm cả dòng title thì có cách nào để không phải viết thêm một sub phụ cho trường hợp đặc biệt nữa không ạ? Lấy ngay ví dụ ở trên: for j...next, w chạy theo j, nhưng lại có một trường hợp đặc biệt của w là khi w = 1. Vậy làm sao để mình xử lý trường hợp này ạ?
Bài toán của em có vấn đề tương tự, đêm qua giải mãi mà không được, bác chỉ giáo cho em với ạ

Khi w=1 thì bạn chép các dòng lệnh macro con vô ngay sau dòng lệnh này & 1 chú í là J có thể dùng, cũng có thể khai báo thêm biến đếm mới để khỏi tẩu hỏa nhập ma.

Còn câu lệnh sau dùng để gọi macro con thì có thể vô hiệu hóa nó đi

2. Đoạn trên có dArr(W, 1) = Arr(J, 1): dArr(W, 2) = Arr(J, 2), em thắc mắc dấu : có tác dụng như thế nào, mọi người trả lời giúp em. Thân!

Đây là trường hợp người ta muốn viết 2 dòng lệnh ngắn trên cùng 1 dòng; Khi đó người ta ngăn cách 2 dòng lệnh này bỡi dấu ":"
Dấu ngăn cách này ta còn có thể thấy khi trong macro có lệnh Goto hay lệnh Resume . . .

Viết như vậy cũng là thói quen thôi; Muốn bao quát toàn bộ macro trên cửa sổ màn hình;
& điều này ngược với chuyện ngắt 1 dòng lệnh quá dài để thành 1 dòng lệnh nằm trên 2 dòng.
 
Upvote 0
Khi w=1 thì bạn chép các dòng lệnh macro con vô ngay sau dòng lệnh này & 1 chú í là J có thể dùng, cũng có thể khai báo thêm biến đếm mới để khỏi tẩu hỏa nhập ma.
Còn câu lệnh sau dùng để gọi macro con thì có thể vô hiệu hóa nó đi
Em cũng nghĩ kiểu đang "tẩu hỏa" như bác nói, điên cái đầu +-+-+-+
Đây là trường hợp người ta muốn viết 2 dòng lệnh ngắn trên cùng 1 dòng; Khi đó người ta ngăn cách 2 dòng lệnh này bỡi dấu ":"
Dấu ngăn cách này ta còn có thể thấy khi trong macro có lệnh Goto hay lệnh Resume . . .
Viết như vậy cũng là thói quen thôi; Muốn bao quát toàn bộ macro trên cửa sổ màn hình;
& điều này ngược với chuyện ngắt 1 dòng lệnh quá dài để thành 1 dòng lệnh nằm trên 2 dòng.
Cái này thì hôm trước lúc ban đầu em cũng tự mình giải thích như vậy, nhưng rồi đọc tiếp đọc tiếp... lại "tẩu ma", xong quay lại thì lại không nghĩ cái đầu tiên mình nghĩ là đúng (lần này là tẩu của tẩu). <<== chắc bác đọc xong cũng tẩu luôn --=0.

Kết quả: bác giải thích em đã hiểu, bài toán hôm trước em cũng đã giải xong. Cảm ơn những kiến thức bác đã chia sẻ cho em. Chúc bác vui vẻ.
 
Upvote 0
Web KT

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

Back
Top Bottom