Hỏi về cách lập hàm để sắp xếp tự động (1 người xem)

  • Thread starter Thread starter ssnova
  • Ngày gửi Ngày gửi

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

ssnova

Thành viên mới
Tham gia
7/9/08
Bài viết
12
Được thích
2
Chào mọi người mình đang gặp khó khăn lập hàm sắp xếp tự động, Bạn nào biết chỉ giúp mình với. Cảm ơn nhiều
Nội dung là:
Cột A có 6 dòng từ 1..6
Cột B có 6 dòng từ 3..8
Cột C có 6 dòng từ 4..10

Điều kiện ghép được bộ số giống cột G,H,I (file đính kèm) G<H<I
Bắt đầu bằn số 1 2 4. Kết thúc bằng 6 8 10

Xin cảm ơn
 

File đính kèm

Có bạn nào siêu Excel không giúp mình vơi
Cảm ơn nhiều
 
Có ghé xem thử nhưng chưa hiểu ý bạn muốn gì? Nói rõ thêm một chút.
 
Chào mọi người mình đang gặp khó khăn lập hàm sắp xếp tự động, Bạn nào biết chỉ giúp mình với. Cảm ơn nhiều
Nội dung là:
Cột A có 6 dòng từ 1..6
Cột B có 6 dòng từ 3..8
Cột C có 6 dòng từ 4..10

Điều kiện ghép được bộ số giống cột G,H,I (file đính kèm) G<H<I
Bắt đầu bằn số 1 2 4. Kết thúc bằng 6 8 10

Xin cảm ơn
Bạn tham khảo Code tại đây:
http://www.giaiphapexcel.com/diendan/threads/giúp-vba-nối-lần-lượt-các-range.125307/#post-785680

Bài viết số 11 nhé. Khi nào bạn thử mà chưa ra kết quả, tôi sẽ gửi File để bạn tham khảo.
 
Có ghé xem thử nhưng chưa hiểu ý bạn muốn gì? Nói rõ thêm một chút.
Cảm ơn các bạn đã qua tâm. mình xin giải thích thêm 1 chút là:
các bộ số cho sẵn cột A1, A2, A3. Mình cần ghép lần lượt theo thứ tự số thứ 1 cột A1 với lần lượt các số cột A2 rồi lần lượt ghép với các số cột A3. Kết quả trả về nằm riêng từng cột G1 (tương ứng cột A), H1 (tương ứng cột B), I (tuong ứng cột C)
VD số ghép được lần lượt là A1 (nằm ô G1), B1 (nằm ô H1), C1 (nằm ô I1). tiếp tục cột I cho kết quả C2, C3, C4, C5, C6. Kết thúc 1 chu kỳ
Chu kỳ mới là A1, B2, C2 (yêu cầu là số ô G<H<I)
Bắt đầu là 1 3 4 Kết thúc là 6 8 10 (các số không dính liền với nhau mà nằm ở các ô riêng biệt Như file đính kèm ạ
 

File đính kèm

Cảm ơn các bạn đã qua tâm. mình xin giải thích thêm 1 chút là:
các bộ số cho sẵn cột A1, A2, A3. Mình cần ghép lần lượt theo thứ tự số thứ 1 cột A1 với lần lượt các số cột A2 rồi lần lượt ghép với các số cột A3. Kết quả trả về nằm riêng từng cột G1 (tương ứng cột A), H1 (tương ứng cột B), I (tuong ứng cột C)
VD số ghép được lần lượt là A1 (nằm ô G1), B1 (nằm ô H1), C1 (nằm ô I1). tiếp tục cột I cho kết quả C2, C3, C4, C5, C6. Kết thúc 1 chu kỳ
Chu kỳ mới là A1, B2, C2 (yêu cầu là số ô G<H<I)
Bắt đầu là 1 3 4 Kết thúc là 6 8 10 (các số không dính liền với nhau mà nằm ở các ô riêng biệt Như file đính kèm ạ
Bạn xem File
Lưu ý: Trong File tôi có sử dụng Code của thầy Ba tê
 

File đính kèm

Chào mọi người mình đang gặp khó khăn lập hàm sắp xếp tự động, Bạn nào biết chỉ giúp mình với. Cảm ơn nhiều
Nội dung là:
Cột A có 6 dòng từ 1..6
Cột B có 6 dòng từ 3..8
Cột C có 6 dòng từ 4..10

Điều kiện ghép được bộ số giống cột G,H,I (file đính kèm) G<H<I
Bắt đầu bằn số 1 2 4. Kết thúc bằng 6 8 10

Xin cảm ơn
thích thì dùng công thức, nếu không thì bấm ngôi sao
 

File đính kèm

Cảm ơn mọi người. Mình nhìn hàm nghien cứu mà hoa cả mắt.
 
Cảm ơn các bạn đã qua tâm. mình xin giải thích thêm 1 chút là:
các bộ số cho sẵn cột A1, A2, A3. Mình cần ghép lần lượt theo thứ tự số thứ 1 cột A1 với lần lượt các số cột A2 rồi lần lượt ghép với các số cột A3. Kết quả trả về nằm riêng từng cột G1 (tương ứng cột A), H1 (tương ứng cột B), I (tuong ứng cột C)
VD số ghép được lần lượt là A1 (nằm ô G1), B1 (nằm ô H1), C1 (nằm ô I1). tiếp tục cột I cho kết quả C2, C3, C4, C5, C6. Kết thúc 1 chu kỳ
Chu kỳ mới là A1, B2, C2 (yêu cầu là số ô G<H<I)
Bắt đầu là 1 3 4 Kết thúc là 6 8 10 (các số không dính liền với nhau mà nằm ở các ô riêng biệt Như file đính kèm ạ
Tham gia với nhưng mà bằng công thức nha bạn.
Tôi làm theo kiểu hiểu như ví dụ mẫu bạn đưa ra, nhưng kết quả hơi khác với hai bạn Phulien1902, và HieuCD.
PHP:
K1=OFFSET($A$1,INT((ROW()-1)/21),)
L1=OFFSET($B$1,MATCH(MOD(ROW()-1,21)+1,{1;7;12;16;19;21})-1,)*(K1>0)
M1=OFFSET(OFFSET($C$1,MATCH(MOD(ROW()-1,21)+1,{1;7;12;16;19;21})-1,),(MOD(ROW()-1,21)+1)-LOOKUP(MOD(ROW()-1,21)+1,{1;7;12;16;19;21}),)*(K1>0)

Nếu sai, thì bạn coi như là một tham khảo cho vui.

Chúc bạn và anh em ngày vui.
/-*+//-*+//-*+/
 

File đính kèm

Lần chỉnh sửa cuối:
Chào các bạn mình đã thử thì thấy bị báo #N/A khi số không còn liên tiếp như 2,3,4,5 thay bàng 4,7,11,21 chẳng hạn. Minh post lại file lên để mọi người tham khảo xem có cách sửa không? Cám ơn a
 

File đính kèm

Chào các bạn mình đã thử thì thấy bị báo #N/A khi số không còn liên tiếp như 2,3,4,5 thay bàng 4,7,11,21 chẳng hạn. Minh post lại file lên để mọi người tham khảo xem có cách sửa không? Cám ơn a
xem thử file
 

File đính kèm

Cám ơn bạn HieuCD nhưng có một phát sinh nhỏ là Số phải là số tiến (số đứng sau phải lớn hơn số đứng trước mới được)
VD 17 18 20 29 45 là số tiến OK
xuất hiện giá trị
VD 17 18 20 17 45 là bị loai
Vậy mong bạn HieuCD giúp mình với
Thanks
 
Cám ơn bạn HieuCD nhưng có một phát sinh nhỏ là Số phải là số tiến (số đứng sau phải lớn hơn số đứng trước mới được)
VD 17 18 20 29 45 là số tiến OK
xuất hiện giá trị
VD 17 18 20 17 45 là bị loai
Vậy mong bạn HieuCD giúp mình với
Thanks
lâu quá nên quên yêu cầu, bạn chỉnh lại code
Mã:
Sub GPE()
Dim Darr(), Arr(), Srow As Byte, k As Long, r1 As Byte, r2 As Byte, r3 As Byte
Darr = Range("A1:F12").Value
Srow = UBound(Darr)
ReDim Arr(1 To Srow ^ 6, 1 To 6)
For r1 = 1 To Srow
  If Darr(r1, 1) = "" Then Exit For
  For r2 = 1 To Srow
    If Darr(r2, 2) > Darr(r1, 1) Then
    For r3 = 1 To Srow
      If Darr(r3, 3) > Darr(r2, 2) Then
      For r4 = 1 To Srow
        If Darr(r4, 4) > Darr(r3, 3) Then
        For r5 = 1 To Srow
          If Darr(r5, 5) > Darr(r4, 4) Then
          For r6 = 1 To Srow
            If Darr(r6, 6) > Darr(r5, 5) Then
              k = k + 1
              Arr(k, 1) = Darr(r1, 1): Arr(k, 2) = Darr(r2, 2): Arr(k, 3) = Darr(r3, 3)
              Arr(k, 4) = Darr(r4, 4): Arr(k, 5) = Darr(r5, 5): Arr(k, 6) = Darr(r6, 6)
              If k = 1048000 Then GoTo Thoat
            End If
           Next r6
           End If
        Next r5
        End If
      Next r4
      End If
    Next r3
    End If
  Next r2
Next r1
Thoat:
Range("Q1").Resize(k, 6) = Arr
End Sub
 
Chào các bạn mình đã thử thì thấy bị báo #N/A khi số không còn liên tiếp như 2,3,4,5 thay bàng 4,7,11,21 chẳng hạn. Minh post lại file lên để mọi người tham khảo xem có cách sửa không? Cám ơn a
Cho bạn thêm 1 cách dùng công thức ,bài dạng tổ hợp này thì dùng mod, int xác định vì trí là được:
Công thức tại I1:
PHP:
=IF(ROW(A1)-1>=PRODUCT($A$19:$F$19),"",INDEX(A$1:A$12,MOD(INT((ROW(A1)-1)/PRODUCT(B$19:$F$19)),A$19)+1))
Fill sang phải tới M1, sau đó fill xuống khoảng vài trăm ngàn dòng (để dùng cho nhiều số cần tổ hợp)
Công thức tại M1:
PHP:
=IF(ROW(F1)-1>=PRODUCT($A$19:$F$19),"",INDEX(F$1:F$12,MOD(ROW(F1)-1,F$19)+1))
Fill xuống tương tự
P/s: có sử dụng thêm cột phụ để xác định số phần tử của mỗi range (A19:F19), vì dùng công thức thường nên chạy rất nhanh, với n cột thì áp dụng tương tự.
 

File đính kèm

Cho bạn thêm 1 cách dùng công thức ,bài dạng tổ hợp này thì dùng mod, int xác định vì trí là được:
Công thức tại I1:
PHP:
=IF(ROW(A1)-1>=PRODUCT($A$19:$F$19),"",INDEX(A$1:A$12,MOD(INT((ROW(A1)-1)/PRODUCT(B$19:$F$19)),A$19)+1))
Fill sang phải tới M1, sau đó fill xuống khoảng vài trăm ngàn dòng (để dùng cho nhiều số cần tổ hợp)
Công thức tại M1:
PHP:
=IF(ROW(F1)-1>=PRODUCT($A$19:$F$19),"",INDEX(F$1:F$12,MOD(ROW(F1)-1,F$19)+1))
Fill xuống tương tự
P/s: có sử dụng thêm cột phụ để xác định số phần tử của mỗi range (A19:F19), vì dùng công thức thường nên chạy rất nhanh, với n cột thì áp dụng tương tự.
Chủ thớt có yêu cầu mới
nhưng có một phát sinh nhỏ là Số phải là số tiến (số đứng sau phải lớn hơn số đứng trước mới được)
VD 17 18 20 29 45 là số tiến OK
xuất hiện giá trị
VD 17 18 20 17 45 là bị loai
 
Cám ơn các bạn đã giúp đỡ.
Mình nghien cứu file cua ban HieuCD khi mình tăng dữ liệu mảng tới ("a1:f14") thì chạy bình thường nhưng khi tăng lên từ ("a1:f15") thì bị báo lỗi run out memory 7.
ReDim Are (1 to Srow ^6, 1 to 6)

Ko biết có phải do xung đột j ko.
Máy mình cài Win 8 64bit ram 8GB office 2010.
 
Cám ơn các bạn đã giúp đỡ.
Mình nghien cứu file cua ban HieuCD khi mình tăng dữ liệu mảng tới ("a1:f14") thì chạy bình thường nhưng khi tăng lên từ ("a1:f15") thì bị báo lỗi run out memory 7.
ReDim Are (1 to Srow ^6, 1 to 6)
Ko biết có phải do xung đột j ko.
Máy mình cài Win 8 64bit ram 8GB office 2010.
mảng quá lớn vượt quá khả năng bộ nhớ của biến, chỉnh lại code chia nhỏ mảng kết quả Arr và gán kết quả vào từng nhóm 6 cột
Mã:
Sub GPE()
Dim Darr(), Arr(), Srow As Byte, k As Long, r1 As Byte, r2 As Byte, r3 As Byte, col As Byte
Darr = Range("A1:F15").Value
Srow = UBound(Darr)
ReDim Arr(1 To 1048570, 1 To 6)
For r1 = 1 To Srow
  If Darr(r1, 1) = "" Then Exit For
  For r2 = 1 To Srow
    If Darr(r2, 2) > Darr(r1, 1) Then
    For r3 = 1 To Srow
      If Darr(r3, 3) > Darr(r2, 2) Then
      For r4 = 1 To Srow
        If Darr(r4, 4) > Darr(r3, 3) Then
        For r5 = 1 To Srow
          If Darr(r5, 5) > Darr(r4, 4) Then
          For r6 = 1 To Srow
            If Darr(r6, 6) > Darr(r5, 5) Then
              k = k + 1
              Arr(k, 1) = Darr(r1, 1): Arr(k, 2) = Darr(r2, 2): Arr(k, 3) = Darr(r3, 3)
              Arr(k, 4) = Darr(r4, 4): Arr(k, 5) = Darr(r5, 5): Arr(k, 6) = Darr(r6, 6)
              If k = 1048570 Then
                Cells(1, 8 + col * 7).Resize(k, 6) = Arr
                col = col + 1
                k = 0
                ReDim Arr(1 To 1048570, 1 To 6)
              End If
            End If
           Next r6
           End If
        Next r5
        End If
      Next r4
      End If
    Next r3
    End If
  Next r2
Next r1
If k Then Cells(1, 8 + col * 7).Resize(k, 6) = Arr
End Sub
 

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

Back
Top Bottom