VBA chạy column liên tục

Liên hệ QC

sangista192

Thành viên mới
Tham gia
3/12/18
Bài viết
10
Được thích
0
Chào các bạn,

Mình có code VBA như bên dưới. Mình muốn chay column thành 2 phần, 1 phần từ 9 đến 12, 1 phần từ 13 đên 24 thì code như thế nào ạ. mọi thứ khác không đổi ạ.

Mã:
Sub Nhap()
Call of_Filter
Dim Dongcuoi As Long, Row As Long, K As Long
Dim cOLUMN As Long, Dulieu(), KQ(), T As Long, ET As Long
Dim i As Long, N As Long, SL As Long, VT As Long
Dongcuoi = Sheet1.Range("C" & Rows.Count).End(xlUp).Row
Dulieu = Sheet1.Range("A1:X" & Dongcuoi).Value
ReDim KQ(1 To Dongcuoi, 1 To 12)
For Row = 6 To Dongcuoi
For cOLUMN = 9 To 24
        
        If Dulieu(Row, cOLUMN) > 0 Then
        K = K + 1
        KQ(K, 1) = Dulieu(Row, 2): KQ(K, 2) = Now: KQ(K, 3) = Now
        KQ(K, 4) = Dulieu(Row, 3): KQ(K, 5) = Dulieu(Row, 6): KQ(K, 7) = Dulieu(Row, 5)
        KQ(K, 6) = Dulieu(Row, 4): KQ(K, 8) = "PCS": KQ(K, 9) = Dulieu(Row, SL)
        KQ(K, 10) = WorksheetFunction.Max(Sheet11.Range("J:J")) + 1: KQ(K, 11) = Cells(2, 40)
        KQ(K, 12) = Dulieu(Row, VT)
        End If
    Next Row
    Next cOLUMN


End sub
 
Chào các bạn,

Mình có code VBA như bên dưới. Mình muốn chay column thành 2 phần, 1 phần từ 9 đến 12, 1 phần từ 13 đên 24 thì code như thế nào ạ. mọi thứ khác không đổi ạ.

Mã:
Sub Nhap()
Call of_Filter
Dim Dongcuoi As Long, Row As Long, K As Long
Dim cOLUMN As Long, Dulieu(), KQ(), T As Long, ET As Long
Dim i As Long, N As Long, SL As Long, VT As Long
Dongcuoi = Sheet1.Range("C" & Rows.Count).End(xlUp).Row
Dulieu = Sheet1.Range("A1:X" & Dongcuoi).Value
ReDim KQ(1 To Dongcuoi, 1 To 12)
For Row = 6 To Dongcuoi
For cOLUMN = 9 To 24
       
        If Dulieu(Row, cOLUMN) > 0 Then
        K = K + 1
        KQ(K, 1) = Dulieu(Row, 2): KQ(K, 2) = Now: KQ(K, 3) = Now
        KQ(K, 4) = Dulieu(Row, 3): KQ(K, 5) = Dulieu(Row, 6): KQ(K, 7) = Dulieu(Row, 5)
        KQ(K, 6) = Dulieu(Row, 4): KQ(K, 8) = "PCS": KQ(K, 9) = Dulieu(Row, SL)
        KQ(K, 10) = WorksheetFunction.Max(Sheet11.Range("J:J")) + 1: KQ(K, 11) = Cells(2, 40)
        KQ(K, 12) = Dulieu(Row, VT)
        End If
    Next Row
    Next cOLUMN


End sub
Không có cách nào cả. Bởi vì code trên sai rồi, phải sửa cho nó chạy đã rồi hãy hỏi tiếp.
 
Upvote 0
mình biết, ý mình muốn hỏi tách phần column ra, Nếu bạn biết hỗ trợ giúp nhé!
 
Upvote 0
mình biết, ý mình muốn hỏi tách phần column ra, Nếu bạn biết hỗ trợ giúp nhé!
Để nguyên không chạy được đâu.
Mã:
For Row = 6 To Dongcuoi
For cOLUMN = 9 To 24
       ...
    Next Row
    Next cOLUMN
Sai cơ bản.

Không có tập tin nên chỉ đoán mò, chưa suy nghĩ kỹ:
Mã:
ReDim KQ(1 To Dongcuoi, 1 To 12)
...
K = K + 1
KQ(K, 1) = Dulieu(Row, 2)
Mảng KQ chỉ có Dongcuoi dòng. Khi K tăng tới mức k > Dongcuoi thì truy cập tới KQ(K, 1) sẽ có lỗi.

Không thấy chỗ nào tính / thiết lập SL và VT nên chúng = 0. Lúc này Dulieu(Row, SL) và Dulieu(Row, VT) có nghĩa là Dulieu(Row, 0) - lỗi.

Nên nó rõ tại sao lại phải tách ra từ 9 đến 12 và từ 13 tới 24.
 
Upvote 0
Để nguyên không chạy được đâu.
Mã:
For Row = 6 To Dongcuoi
For cOLUMN = 9 To 24
       ...
    Next Row
    Next cOLUMN
Sai cơ bản.

Không có tập tin nên chỉ đoán mò, chưa suy nghĩ kỹ:
Mã:
ReDim KQ(1 To Dongcuoi, 1 To 12)
...
K = K + 1
KQ(K, 1) = Dulieu(Row, 2)
Mảng KQ chỉ có Dongcuoi dòng. Khi K tăng tới mức k > Dongcuoi thì truy cập tới KQ(K, 1) sẽ có lỗi.

Không thấy chỗ nào tính / thiết lập SL và VT nên chúng = 0. Lúc này Dulieu(Row, SL) và Dulieu(Row, VT) có nghĩa là Dulieu(Row, 0) - lỗi.

Nên nó rõ tại sao lại phải tách ra từ 9 đến 12 và từ 13 tới 24.

Mình gửi đính kèm file, bạn xem giúp mình nhé. Tks!
 

File đính kèm

Upvote 0
Đúng như tôi dự đoán khi K > dongcuoi thì có lỗi.

1. Nhìn 2 vòng FOR thì K lớn nhất là K = (dongcuoi-5)*8 (8 cột từ 9 đến 16). Nhưng đằng nào cũng khai báo thừa nên ta không tính chi li. Tôi khai báo mảng KQ có dongcuoi*8 dòng. Nếu bạn thích thì khai báo số dòng như trên.
2. Bạn khai báo ReDim KQ có 15 cột nhưng trong vòng For lại chỉ dùng tới cột 11, và khi nhập xuống sheet lại đập 13 cột (.Cells(T, 1).Resize(K, 13) = KQ). Tại sao?

Tôi chỉ sửa để code chạy được, các vấn đề khác bạn tự kiểm tra.

Sửa thành
Mã:
ReDim KQ(1 To Dongcuoi * 8, 1 To 11)
...
.Cells(T, 1).Resize(K, 11) = KQ
[code]
 
Upvote 0
Web KT

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

Back
Top Bottom