Điền giá trị thỏa điều kiện trong 1 range

Liên hệ QC

leminhbb

Thành viên mới
Tham gia
31/1/09
Bài viết
13
Được thích
1
Các bạn giúp mình cách tìm như trong file mình đính kèm. Mình muốn dùng VBA để điền vào cột con và cột quan hệ với điều kiện như sau:
Cột CON: là 1 nếu máy cùng hàng với nó có nằm trong cột CHA (tức là nó có ít nhất 1 thằng con mà phải khác chính nó nữa. Vì có khi KH để CHA và MAY giống nhau tức là cha nó là chính nó)
Cột QUAN HE: là máy cùng hàng có ít nhất 1 thằng con và nó là cấp cao nhất không có cha nữa hoặc cha nó là chính nó)

Các bạn nhớ dùng code chỉ mình nhưng đừng chạy vòng for khi check điều kiện nha vì nếu cứ 1 máy mà chạy for 10-20 ngàn dòng là die.

Thường danh sách này trên dưới 10 ngàn dòng lận mà mình không rành Excel lắm nên không biết hàm nào viết ngoài for !$@!!

Xin cảm ơn!
 

File đính kèm

Ngôn ngữ bất đồng!

Mình hỏi thật, bạn người Việt hay người 'Lào'?

Hay thế này đi: Bạn tương vô hai cột [Con] & [QuanHe] vài số không & vài số 1 theo điều kiện của bạn thì sẽ trực quan hơn!

Chờ tin bạn!
 
Upvote 0
Hix người Việt hay người Lào là sao bạn?
Mình hiểu ý bạn rồi để mình ghi VD: tại cái fíle1 mình trích từ bản KH gửi mình cũng chưa có cách làm ra mà sao có mấy cột kia.
Mình VD trong fìle2 này và ý nghĩa mình có comment trước rồi.

Xin giúp và cảm ơn!
 

File đính kèm

Upvote 0
Mới hiểu hơn nữa thôi!

|A|B|C|D| Yes/No
1| MAY | CHA | CON | QUANHE |
2|C-01||1|C-01| OK
3|C-02|C-01|0|| OK
4|C-03|C-03|1|C-03|OK
5|C-04|C-03|1|| ?
6|C-05|C-04|0|| ??
Bạn hãy cho biết tại sao dòng 3 & 5 có kết luận trái chiều nhau
Chuyện này có dính gì đến thứ tự trong cột 'A' hay không vậy?
 
Lần chỉnh sửa cuối:
Upvote 0
|A|B|C|D| Yes/No
1| MAY | CHA | CON | QUANHE |
2|C-01||1|C-01| OK
3|C-02|C-01|0|| OK
4|C-03|C-03|1|C-03|OK
5|C-04|C-03|1|| ?
6|C-05|C-04|0|| ??
Bạn hãy cho biết tại sao dòng 3 & 5 có kết luận trái chiều nhau
Chuyện này có dính gì đến thứ tự trong cột 'A' hay không vậy?
Mình xin giải thích thêm là như thế này:
Khi KH đưa cho mình dữ liệu họ chuẩn bị sẽ có 2 cột là cột MAY và cột CHA (tức là mã số của máy đó và cha của máy đó là cái máy nào)
Sau đây mình xin mô tả từng dòng và ý nghĩa giá trị mình điền vào 2 cột CON và QUANHE (2 cột này không có đưa cho khách hàng)
- Dòng 1: mình điền 1 vào cột CON vì nó có 1 thằng con là C-02, điền C-01 vào cột QUANHE vì nó có thằng con là C-02 và nó không có thằng nào là cha nó (tức là cột CHA trống hoặc là chính nó)
- Dòng 2: cột CON là 0 vì nó không là cha máy nào, cột QUANHE null vì không thỏa dk có con và không có cha
- Dòng 3: cột CON là 1 vì nó có thằng con la C-04, cột QUANHE là C-03 vì nó không có cha hay cha nó là chính nó
- Dòng 4: cột CON là 1 vì nó có con là C-05, cột QUANHE null vì tuy nó có con nhưng nó có cha là C-03 (ko thỏa dk có con và không có cha)
- Dòng 5: giống dk của dòng 2.

Giải thuật ở đây được mô tả là:
Khi điền giá trị vào C2 thì mình phải lấy giá trị của A2 search trong cột B (range(B2:Bn) loại trừ B2) nếu có trả về 1, không có trả về 0.
Điền giá trị vào D2 nếu lấy giá trị của A2 search trong range(B2:Bn) (loại trừ B2) có dữ liệu và B2 là null hoặc = A2 thì trả về giá trị của A2 còn không thỏa thì = null

Xin cảm ơn bạn giúp mình -0-/.
 
Upvote 0
Bạn chép macro này vô & xài thử

Đọc kỹ hướng dẫn trước khi dùng:
* Macro có tô màu cột 'B' những dữ liệu thỏa từng điều kiện.
* Mất khoảng 20" cho mỗi lần chạy nó.

PHP:
Option Explicit

Sub QuanHe()
 Dim Rng As Range, sRng As Range, Clls As Range
 Dim lRw As Long
 
 lRw = [A65500].End(xlUp).Row:              [f1] = Time()
 Set Rng = Range("B2:B" & lRw):             Application.ScreenUpdating = False
 For Each Clls In Range("A2:A" & lRw)
    With Clls
        Set sRng = Rng.Find(.Value, .Offset(, 1), xlFormulas, xlWhole)
        If Not sRng Is Nothing Then
            .Offset(, 2) = 1:               sRng.Interior.ColorIndex = 39
            If .Offset(, 1) = "" Or .Offset(, 1) = .Value Then
                .Offset(, 3) = .Value:      sRng.Interior.ColorIndex = 35
            End If
        Else
            .Offset(, 2) = 0
        End If
    End With
 Next Clls:                                 [f3] = Time()
End Sub
--=0 &&&%$R !$@!!
 
Upvote 0
Thật cám ơn bạn lắm lắm. Code chạy nhanh và chính xác nữa! Tuy nhiên do mình hơi dốt nên không hiểu mấy cái lệnh kia lắm. Để mình cố tìm hiểu và biến hóa nó chút.
Mình còn vài cái giải thuật mà khó giải quyết cực kỳ sao cho nhanh gọn. Mình chỉ biết giải quyết thôi nhưng không biết code bằng Excel. Nếu được bạn cho mình thông tin cá nhân rùi bữa nào mình mời cafe chẳng hạn. -=.,,
 
Upvote 0
Code chạy nhanh và chính xác nữa! Tuy nhiên do mình hơi dốt nên không hiểu mấy cái lệnh kia lắm. Để mình cố tìm hiểu và biến hóa nó chút.

Mình còn vài cái giải thuật mà khó giải quyết cực kỳ sao cho nhanh gọn. Mình chỉ biết giải quyết thôi nhưng không biết code bằng Excel. Nếu được bạn cho mình thông tin cá nhân rùi bữa nào mình mời cafe chẳng hạn. -=.,,
Mình bắt đầu thú vị với những giải thuật sắp tới của bạn rồi đó!
Bạn lần lượt đưa từng cái một lên đi; Sẽ có người giúp bạn đạt đỉnh cao của sự tối ưu hóa!

Sớm mong gặp lại bạn trên diễn đàn & . . . !

Chúc vui!!
(Nếu sau tuần này mà chưa nghĩ ra các dòng lệnh trên, thì la lên; Sẽ có người giải bày cùng bạn! Thân ái)
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom