Tính sở hữu chéo công ty

Liên hệ QC

maiphuonggif

Thành viên mới
Tham gia
21/12/20
Bài viết
4
Được thích
0
Kính gửi anh chị,

Em đang bế tắc về 1 vấn đề tính sở hữu chéo ( cụ thể em có ví dụ trong file đính kèm hoặc anh chị có thể xem hình dưới)
E ko dùng hàm thông thường được vì logic nó hơi rối , nên nhờ anh chị xem thử sử dụng VBA cho việc tính sở hữu chéo gián tiếp và trực tiếp .
Bảng dữ liệu gốc của em là bảng ( 80 * 80 ) ,nên em chỉ ví dụ trong file đơn giản cho đỡ rối ạ

Cảm ơn anh chị.

1608546626411.png
 
Theo bài 1 dữ liệu gốc là bảng 80x80 dòng, thì phải có bảng danh mục 80 dòng và cấu trúc bảng 80x80 phải như hình sau, các ô bị gạch chéo là các ô không có số liệu, nếu có tức là đang bị sở hữu vòng tròn. Ràng buộc thứ 2 của bảng này là tổng từng cột không vượt quá 100%, nên tôi sửa J5 từ 60% còn 50%

View attachment 251643

Sử dụng power query sẽ ra bảng data theo dòng để chạy code, và chỉ chạy trường hợp không sở hữu vòng tròn.

View attachment 251644

Code cũ nhưng có thể tính cùng lúc cho nhiều công ty.

View attachment 251645
Dùng PQ sử dụng các chức năng merge Inner và Left Anti, tôi lấy data của bạn nhưng kết quả một số không khớp ví dụ như A sở hữu E chỉ có 10%, file bạn tính ra 13.5%, tôi tính tay cũng chỉ có 10%
 

File đính kèm

  • ex.xlsx
    20 KB · Đọc: 5
Upvote 0
Dùng PQ sử dụng các chức năng merge Inner và Left Anti, tôi lấy data của bạn nhưng kết quả một số không khớp ví dụ như A sở hữu E chỉ có 10%, file bạn tính ra 13.5%, tôi tính tay cũng chỉ có 10%
Minh hoạ A sở hữu E 13.5%: E chỉ có 2 cha là C và D, A chỉ sở hữu B và C, B lại sở hữu D. Thông qua B và C tính ra 3 con số cộng lại: ABCE, ABDE và ACE

1608709818351.png
 
Upvote 0

File đính kèm

  • ex.xlsx
    19.8 KB · Đọc: 13
Upvote 0
Theo mình code chạy trực tiếp trên dữ liệu gốc sẽ dể dùng hơn
Chạy trên bảng 80x80
- Thêm 2 mảng 1 ngang 1 dọc: mảng dọc chứa công ty cha và mảng ngang chứa công ty con
- Thêm 1 cột dọc hoặc mảng dọc để biết công ty trong mảng dọc có con hay không (nhằm mục đích gán vào Dict). Công thức là Sum hàng ngang điều kiện >0 tức là có con
Thấy file và code anh @HieuCD mà ngợp quá, cố viết theo mà không được, thôi thì viết đơn giản như trên: Không thêm 2 mảng 1 ngang 1 dọc chứa công ty cha và công ty con, nhưng có thêm 1 cột phụ cho biết 1 công ty có là công ty cha hay không (có sở hữu công ty con nào hay không). Đồng thời tăng dữ liệu lên 42 x 42 công ty. Ma trận dữ liệu không cần đầy đủ dòng cột và không cần thứ tự.

1608913826884.png

Code anh @HieuCD có bao nhiêu chạy hết, nhưng code này muốn chạy bao nhiêu cũng được, chạy hết cũng được, muốn chạy công ty nào thì điền vào cột A không cần theo thứ tự

1608914053939.png

1608943082643.png
 

File đính kèm

  • Possession-Calculate-v4.xlsm
    85 KB · Đọc: 7
Lần chỉnh sửa cuối:
Upvote 0
Bổ sung: có thể bỏ cột phụ D, thay đoạn code
PHP:
    For i = 2 To UBound(SArr, 1)
        If IsParent(i, 1) Then
            ikey = SArr(i, 1)
            Dict1.Item(ikey) = i
        End If
    Next
Bằng
PHP:
    For i = 2 To UBound(SArr, 1)
        For j = 2 To UBound(SArr, 2)
            If SArr(i, j) > 0 Then
                ikey = SArr(i, 1)
                Dict1.Item(ikey) = i
                Exit For
            End If
        Next
    Next
 
Upvote 0
Web KT

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

Back
Top Bottom