Hỏi cách tạo marco insert row có điều kiện (1 người xem)

Liên hệ QC

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

sonvanhoa

Thành viên mới
Tham gia
23/5/11
Bài viết
4
Được thích
0
Chào mọi người,
tôi có 1 sheet, trong đó có 1 column chứa danh sách các giá trị, ví dụ:
1 a
2 b,c
3 d,e,f
4 g
Giờ tôi muốn viết marco: quét từng row nếu row nào column 2 mà có 2 giá trị trở lên (ngăn cách bằng dấu phảy) thì insert thêm 1 row, kết quả cuối cùng thế này:
1 a
2 b
2 c
3 d
3 e
3 f
4 g
Tức là nếu row nào thấy có nhiều giá trị trong đó thì chia làm nhiều row khác nhau.
Tôi muốn hỏi thêm là file excel này có rất nhiều row, có thể lên đến 20, 30K dòng, vậy có thể viết marco như thế nào? Tôi đã thử nhiều cách nhưng vẫn chưa thành công.
Cảm ơn mọi người
 
Chào mọi người,
tôi có 1 sheet, trong đó có 1 column chứa danh sách các giá trị, ví dụ:
1 a
2 b,c
3 d,e,f
4 g
Giờ tôi muốn viết marco: quét từng row nếu row nào column 2 mà có 2 giá trị trở lên (ngăn cách bằng dấu phảy) thì insert thêm 1 row, kết quả cuối cùng thế này:
1 a
2 b
2 c
3 d
3 e
3 f
4 g
Tức là nếu row nào thấy có nhiều giá trị trong đó thì chia làm nhiều row khác nhau.
Tôi muốn hỏi thêm là file excel này có rất nhiều row, có thể lên đến 20, 30K dòng, vậy có thể viết marco như thế nào? Tôi đã thử nhiều cách nhưng vẫn chưa thành công.
Cảm ơn mọi người
Có lẽ không khó lắm! Tuy nhiên nếu bạn đưa file lên sẽ thuận tiện hơn (ai biết dữ liệu thật thế nào)
 
Upvote 0
Bác thử làm với File này giúp tôi với nhé. Thanks bác
 

File đính kèm

Upvote 0
Gần đúng rồi bạn, bạn có thể thêm cho tôi cột A cũng được gán giá trị không? kiểu như:
a 1,2,3
-> a 1
a 2
a 3
Tôi vửa thử gán vào 1 biến tạm nhưng cứ đến dòng cuối lại bị trống mất. Thank bạn.

Hỏi 1 người bạn biết VBA, đã giúp thế này

bạn xem file kèm đã bổ sung code như sau?
 

File đính kèm

Upvote 0
Các code của viethoaivodoi2x chỉ tạm xài được với dữ liệu nhỏ
Các bạn cải tiến dùng Array sẽ cho tốc độ nhanh hơn
Tức là dùng vòng lập duyệt qua các giá trị rồi tạo ra 1 mảng mới, cuối cùng gán mảng kết quả vào vùng dữ liệu ---> Nghĩa là không Insert row gì cả
--------------
Khi nào chạy dữ liệu trên 20000 dòng trong vòng dưới 1s là xem như thành công
 
Upvote 0
Các code của viethoaivodoi2x chỉ tạm xài được với dữ liệu nhỏ
Các bạn cải tiến dùng Array sẽ cho tốc độ nhanh hơn
Tức là dùng vòng lập duyệt qua các giá trị rồi tạo ra 1 mảng mới, cuối cùng gán mảng kết quả vào vùng dữ liệu ---> Nghĩa là không Insert row gì cả
--------------
Khi nào chạy dữ liệu trên 20000 dòng trong vòng dưới 1s là xem như thành công
Em cũng đang tập dần làm quen với việc sử dụng mãng nhưng trường hợp này theo ý Sư phụ là nếu không Insert row thì tạo mãng và chèn vào vùng dữ liệu đè lên vùng dữ liệu cũ phải không? Gợi ý cho em cách tính số lượng dấu "," để Redim Array (để biết kích thức của mãng). Em xin cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Em cũng đang tập dần làm quen với việc sử dụng mãng nhưng trường hợp này theo ý Sư phụ là nếu không Insert row thì tạo mãng và chèn vào vùng dữ liệu đè lên vùng dữ liệu cũ phải không? Gợi ý cho em cách tính số lượng dấu "," để Redim Array (để biết kích thức của mãng). Em xin cảm ơn
Chính xác là vậy... Mảng kết quả sẽ đè vào vùng dữ liệu cũ
Về dấu phẩy cũng dễ lắm ---> Dùng hàm Split(Chuổi, ",") nó sẽ cắt chuổi tạo thành 1 mảng dựa vào ký tự "," (Mảng này có LBOUND() = 0 nhé)
 
Upvote 0
Chính xác là vậy... Mảng kết quả sẽ đè vào vùng dữ liệu cũ
Về dấu phẩy cũng dễ lắm ---> Dùng hàm Split(Chuổi, ",") nó sẽ cắt chuổi tạo thành 1 mảng dựa vào ký tự "," (Mảng này có LBOUND() = 0 nhé)

Ơ dùng công thức
=Split(A1,",")

sao không được vậy pác, có sự nhầm lẫn không, hay là phải cộng thêm AddIns gì?
 
Upvote 0
Web KT

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

Back
Top Bottom