Tính tổng 2 cột tương ứng của 2 hàng bất kỳ trong 11449 hàng và tìm hàng dài nhất... (1 người xem)

  • Thread starter Thread starter samsung
  • Ngày gửi Ngày gửi
Liên hệ QC

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

samsung

Thành viên mới
Tham gia
14/8/11
Bài viết
11
Được thích
2
Em kính chào các anh chị, em có bài toán khó kính mong anh chị giúp đỡ !

Em có file dữ liệu 11449 hàng, em muốn tìm trong số các hàng này 2 hàng thỏa mãn đk sau. Tổng các cột tương ứng của 2 hàng này >0, và duy trì điều kiện này dài nhất (coi cột 100 làm điểm xuất phát)

Vì không biết VBA nên em đã làm thế này, tạo sheet tính tổng của hàng 1 với 11449 hàng, hàng 2 với 11449 hàng, hàng 3 với ....rồi dùng filter các giá trị >0 để tìm hàng tổng dài nhất. em mới làm đc 3 sheet thì dừng lại vì nhận ra thật là ngu ngốc.

Em kính mong các anh chị giải giúp em bài toán này. Em trân thành cảm ơn và hậu tạ

P/s
-file em đã xóa bớt dữ liệu cho nhẹ (các dữ liệu chỉ là 0,1)
-em đã email nhờ anh ndu96081631 giúp đỡ rồi nhưng không biết anh có nhận đc không
 

File đính kèm

Em kính chào các anh chị, em có bài toán khó kính mong anh chị giúp đỡ !

Em có file dữ liệu 11449 hàng, em muốn tìm trong số các hàng này 2 hàng thỏa mãn đk sau. Tổng các cột tương ứng của 2 hàng này >0, và duy trì điều kiện này dài nhất (coi cột 100 làm điểm xuất phát)

Vì không biết VBA nên em đã làm thế này, tạo sheet tính tổng của hàng 1 với 11449 hàng, hàng 2 với 11449 hàng, hàng 3 với ....rồi dùng filter các giá trị >0 để tìm hàng tổng dài nhất. em mới làm đc 3 sheet thì dừng lại vì nhận ra thật là ngu ngốc.

Em kính mong các anh chị giải giúp em bài toán này. Em trân thành cảm ơn và hậu tạ

P/s
-file em đã xóa bớt dữ liệu cho nhẹ (các dữ liệu chỉ là 0,1)
-em đã email nhờ anh ndu96081631 giúp đỡ rồi nhưng không biết anh có nhận đc không
Diễn giải lòng vòng chẳng hiểu là gì, hoán vị với tổng hoán vị là sao?
Tính tất cả tổng 2 hàng tạo bởi hoán vị 2/11449 hàng (không cần xuất ra kết quả vì quá nhiều) (Hàng 1 ghép với hàng 1-11449, Hàng 2 ghép với hàng 1-11449, hàng 3….Hàng 11449 ghép với hàng 1-11449) Tổng cộng có 11449x11449 hàng kết quả
Tìm trong tất cả các tổng hoán vị trên, tổng có các cột giá trị >0 dài nhất, (tính từ cột 100 ngược lại)) Ví dụ như ở sheet Data này là hàng có STT 687.
Làm thí thí, nếu thấy kết quả xài được thì xài, hổng đúng thì "thua".
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em mở báo lỗi anh ạ, em mở bằng Excel 2007
Hổng biết à nghe. Thôi thì chép code này vào Module trong file 2007 của bạn xem.
PHP:
Public Sub HongBiet()
Dim dArr(), Arr(), I As Long, J As Long, Tem As Long, K As Long, KQ(), MaxX As Long, N As Long
Arr = Range([A11], [A65000].End(xlUp)).Resize(, 104).Value
ReDim KQ(1 To UBound(Arr, 1), 1 To 1)
ReDim dArr(1 To UBound(Arr, 1), 1 To 1)
For I = 1 To UBound(Arr, 1)
    K = 0: Tem = 0
    For J = 5 To 104
        If Arr(I, J) = 1 Then
            Tem = Tem + 1
            If Tem > K Then K = Tem
        Else
            Tem = 0
        End If
    Next J
    KQ(I, 1) = K
Next I
MaxX = Application.WorksheetFunction.Max(KQ)
For I = 1 To UBound(KQ)
    If KQ(I, 1) = MaxX Then
        N = N + 1
        dArr(N, 1) = I
    End If
Next I
    [B2].Resize(N).Value = dArr
    [C2].Value = MaxX
End Sub
 
Upvote 0
Em chạy được rồi nhưng kết quả không đúng với y/c của bài. code của anh là tìm hàng dài nhất trong 11449 hàng nhưng ý của em là tìm 2 hàng mà cộng chúng lại thì có giá trị >0 dài nhất tính từ cột 100 (điểm xuất phát là cột 100 tính ngược lại). Nếu không dùng code thì em sẽ làm thế này. lấy hàng 1 cộng với 11449 hàng rồi dùng filter giá trị >0 để tìm hàng dài nhất từ cột 100. Tiếp tục lấy hàng 2 cộng với 11449 hàng rồi dùng filter giá trị >0 để tìm hàng dài nhất từ cột 100. Cứ như vậy cho đến hàng 11449 công với 11449 hàng. Như vậy sẽ tìm được hàng dài nhất. Chỉ có điều làm thế này thì phải 5 năm mới xong được. Rất mong mọi người giúp đỡ em.
 
Upvote 0
Cái vụ này em nghĩ là không ổn rồi, Có bác nào cứu em với không? Nếu bác nào cứu được em thì báo giá cho em vào mail
embevinhphuc@cscvn.com (Giao dịch ở Hà Nội) Em chân thành cảm ơn.
 
Upvote 0
Cái vụ này em nghĩ là không ổn rồi, Có bác nào cứu em với không? Nếu bác nào cứu được em thì báo giá cho em vào mail
embevinhphuc@cscvn.com (Giao dịch ở Hà Nội) Em chân thành cảm ơn.
Hổng có hiểu cái "dzụ"này
samsungEm chạy được rồi nhưng kết quả không đúng với y/c của bài. code của anh là tìm hàng dài nhất trong 11449 hàng nhưng ý của em là tìm 2 hàng mà cộng chúng lại thì có giá trị >0 dài nhất tính từ cột 100 (điểm xuất phát là cột 100 tính ngược lại). Nếu không dùng code thì em sẽ làm thế này. lấy hàng 1 cộng với 11449 hàng rồi dùng filter giá trị >0 để tìm hàng dài nhất từ cột 100. Tiếp tục lấy hàng 2 cộng với 11449 hàng rồi dùng filter giá trị >0 để tìm hàng dài nhất từ cột 100. Cứ như vậy cho đến hàng 11449 công với 11449 hàng. Như vậy sẽ tìm được hàng dài nhất. Chỉ có điều làm thế này thì phải 5 năm mới xong được. Rất mong mọi người giúp đỡ em.
Theo mình, bạn thử giải thích lại một lần nữa xem sao
Làm vài hàng thôi:
- Lấy hàng 1 cộng ( có lúc bạn dùng từ "ghép") với hàng 11449 ==> kết quả ra sao, hàng dài nhất là hàng nào ? Đơn vị tính ? Dài bao nhiêu ? v..v.
-Tiếp, lấy hàng 2, 3 & 4 cộng với 11447 ==> so sánh kết quả 4 hàng đó, hàng nào dài nhất ??? lý do ???
Hiểu được thì code sẽ chạy đúng. Híc
Thân
 
Upvote 0
Tôi cũng "liều" viết code thử xem có trúng ý bạn không?
Mã:
Sub Gpe()
    Dim Arr, sArr
    Dim iR As Long
    Dim jR As Long
    Dim kC As Long
    Dim k As Long
    Dim LegC As Long


    Arr = [E11:CZ11449]
    LegC = UBound(Arr, 2)
    ReDim sArr(1 To UBound(Arr, 1), 1 To 2)
    For iR = 1 To UBound(Arr, 1)
        For jR = iR + 1 To UBound(Arr, 1)
            For kC = UBound(Arr, 2) To 1 Step -1
                If Arr(iR, kC) + Arr(jR, kC) = 0 Then
                    If LegC > kC + 1 Then
                        ReDim sArr(1 To UBound(Arr, 1), 1 To 2)
                        LegC = kC + 1: k = 1
                        sArr(k, 1) = iR: sArr(k, 2) = jR
                    ElseIf LegC = kC - 1 Then
                        k = k + 1
                        sArr(k, 1) = iR: sArr(k, 2) = jR
                    End If
                    Exit For
                End If
            Next
        Next
    Next
    [DB11].Resize(UBound(sArr, 1), 2) = sArr
    [DC8] = LegC
End Sub

Bấm nút GPE, xem kết quả cột DB nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em hiểu là nhờ vả một việc khó như thế này (đối với em) là hơi vô lý nhưng mà chẳng có nhẽ lại bó tay. Em đành vác cái mặt dày đi nhờ các anh chị. Về lý thuyết thì cv này không dùng VBA cũng đc nhưng mà excel không có 11449x11449 dòng, vả lại file cũng rất nặng, khả năng phải lên đến nhiều G. Nếu không dùng vba thì em làm như sau:

Em tạo sheet, ở đó em lấy hàng 1 đem cộng với từng hàng trong 11449 hàng, tiếp hàng 2 cộng với từng hàng trong 11449 hàng... cuối cùng là hàng 11449 cộng với từng hàng trong 11449 hàng. Sau đó dùng filter giá trị >0, hoặc dùng hàm đếm Match cũng tìm đc hàng tổng >0 dài nhất (Tính từ ô 1 hoặc ô 100). Em nghĩ nếu viết Code thì ta viết code để tính tổng 2 hàng bất kỳ trong 11449 hàng, rồi so sánh lần lượt giá trị ở các cột 100,99,98,97,96... xem giá trị nào >0 dài nhất. Cuối cùng là xuất ra vị trí hàng thỏa mãn đk.
 
Upvote 0
Cái vụ này em nghĩ là không ổn rồi, Có bác nào cứu em với không? Nếu bác nào cứu được em thì báo giá cho em vào mail
embevinhphuc@cscvn.com (Giao dịch ở Hà Nội) Em chân thành cảm ơn.
Nói rõ thì miễn phí, không rõ thì 1.000.000.000.000.000.000.000.000... USD cũng chẳng "ma" nào thèm.
Cái mail của bạn chẳng có "hứng thú" gì đâu.
Nếu vào GPE thì "quên" chuyện này đi, bạn tưởng rằng bi nhiêu là GPE sẽ "tích cực giúp" sao?
Híc! Tui ngủ còn "sướng" hơn.
 
Upvote 0
Nói rõ thì miễn phí, không rõ thì 1.000.000.000.000.000.000.000.000... USD cũng chẳng "ma" nào thèm.
Cái mail của bạn chẳng có "hứng thú" gì đâu.
Nếu vào GPE thì "quên" chuyện này đi, bạn tưởng rằng bi nhiêu là GPE sẽ "tích cực giúp" sao?
Híc! Tui ngủ còn "sướng" hơn.
- Gửi thầy Ba Tê, bác Cò: Thầy và bác bớt giận, bạn ấy mới viết được 9 bài nên chưa hiểu GPE là như thế nào. Thành viên mới cũng có khi mắc sai lầm thầy à.
- Gửi bạn Samsung: GPE là nơi mà mọi người gắn bó giúp đỡ nhau "phi lợi nhuận". Nếu mà nghĩ kinh doanh chắc lượng chất xám GPE bỏ ra không tiền nào mua được đâu. Bạn muốn được giúp đỡ thì phải giải thích rõ yêu cầu, người hỏi luôn biết muốn gì chứ người giúp chỉ biết qua mô tả, qua dữ liệu mẫu. Bạn chú ý

Theo dhn46 nghĩ ý hỏi bài này là: Tìm 2 dòng (hoặc nhiều hơn) trong bảng số liệu thỏa mãn
1/ Cộng từng phần tử tương ứng của 2 dòng đó => kết quả ra 1 dòng
2/ Đếm ngược dòng kết quả từ phần tử thứ 100 về 1 xem cặp dòng kết quả nào có kết quả >0 dài nhất
3/ Chỉ ra 2 dòng đó
 
Upvote 0
Em xin lỗi thầy Ba Tê, bác Cò, bác dhn46
Em sẽ chú ý và rút kinh nghiệm. Em trân thành cảm ơn mọi người đã giúp đỡ em !
 
Upvote 0
- Gửi thầy Ba Tê, bác Cò: Thầy và bác bớt giận, bạn ấy mới viết được 9 bài nên chưa hiểu GPE là như thế nào. Thành viên mới cũng có khi mắc sai lầm thầy à.
- Gửi bạn Samsung: GPE là nơi mà mọi người gắn bó giúp đỡ nhau "phi lợi nhuận". Nếu mà nghĩ kinh doanh chắc lượng chất xám GPE bỏ ra không tiền nào mua được đâu. Bạn muốn được giúp đỡ thì phải giải thích rõ yêu cầu, người hỏi luôn biết muốn gì chứ người giúp chỉ biết qua mô tả, qua dữ liệu mẫu. Bạn chú ý

Theo dhn46 nghĩ ý hỏi bài này là: Tìm 2 dòng (hoặc nhiều hơn) trong bảng số liệu thỏa mãn
1/ Cộng từng phần tử tương ứng của 2 dòng đó => kết quả ra 1 dòng
2/ Đếm ngược dòng kết quả từ phần tử thứ 100 về 1 xem cặp dòng kết quả nào có kết quả >0 dài nhất
3/ Chỉ ra 2 dòng đó
- có nhiều việc, nhiều người cho là kho, nhưng ở GPE nhà ta thì nó chỉ là chuyển rất nhỏ phải ko quý sư huynh, nhưng quan trọng cái màu đỏ đỏ đó như thế nào .
- còn khi phát ngôn ở đây cũng nên suy ngẫm thật kỹ trước khi "Gửi bài viết"
Cái vụ này em nghĩ là không ổn rồi, Có bác nào cứu em với không? Nếu bác nào cứu được em thì báo giá cho em vào mail
embevinhphuc@cscvn.com (Giao dịch ở Hà Nội) Em chân thành cảm ơn.
2 chữ đó còn phóng to nữa là cự kỳ nguy hiểm
 
Upvote 0

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

Back
Top Bottom