Lọc theo điều kiện, lấy ngẫu nhiên (1 người xem)

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

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

topgun

Thành viên mới
Tham gia
5/11/09
Bài viết
35
Được thích
4
Nhờ các huynh giúp mình xử lý file này với. Mình cần tìm dữ liệu ngẫu nhiên ở phần bôi vàng theo các điều kiện. Khi put giá trị source_cell vào phần màu vàng sẽ lấy ra giá trị index nằm trong dải 0-31 nhưng chưa xuất hiện trong phần màu xanh. Cám ơn các huynh nhiều!
 

File đính kèm

Nhờ các huynh giúp mình xử lý file này với. Mình cần tìm dữ liệu ngẫu nhiên ở phần bôi vàng theo các điều kiện. Khi put giá trị source_cell vào phần màu vàng sẽ lấy ra giá trị index nằm trong dải 0-31 nhưng chưa xuất hiện trong phần màu xanh. Cám ơn các huynh nhiều!
Chưa hiểu chổ tô màu đỏ ---> Vui lòng giải thích lại
 
vd: trong cột source_cell, mình muốn tìm VIC0372 có index nào nằm trong dải 0-31 mà chưa xuất hiện bên phần màu xanh ấy. Cảm ơn bác!
 
vd: trong cột source_cell, mình muốn tìm VIC0372 có index nào nằm trong dải 0-31 mà chưa xuất hiện bên phần màu xanh ấy. Cảm ơn bác!
Nếu cột A được sort trước (tức những mã giống nhau nằm gần nhau thì bài này có thể dùng công thức như sau
1> Đặt 2 name
PHP:
SrcCell =OFFSET(Sheet1!$A$2:$A$1000,MATCH(Sheet1!$E$2,Sheet1!$A$2:$A$1000,0)-1,,COUNTIF(Sheet1!$A$2:$A$1000,Sheet1!$E$2),)
PHP:
Pos =IF(COUNTIF(OFFSET(SrcCell,,1),ROW(Sheet1!$1:$32)-1)=0,ROW(Sheet1!$1:$32)-1,"")
2> Công thức cho cell F2
PHP:
=SMALL(Pos,INT(RAND()*COUNT(Pos))+1)
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn bác! Nhưng nếu muốn lấy giá trị INDEX duy nhất trong cả 2 phần (INDEX vẫn thuộc dải 0-31), bác giúp mình nhé!
 
Cảm ơn bác! Nhưng nếu muốn lấy giá trị INDEX duy nhất trong cả 2 phần (INDEX vẫn thuộc dải 0-31), bác giúp mình nhé!
Bạn nhắc đến từ "DUY NHẤT" có nghĩa là không muốn TRÙNG, đúng không?
Vậy xin hỏi: Nói theo trong file của bạn thì như thế nào là trùng?
 
Vâng, đúng thế. Ý mình là giá trị trong cột INDEX chỉ xuất hiện 1 lần, nếu dải 0-31 không đủ giá trị, thì cột INDEX sẽ hiện giá trị "none".
 
Vâng, đúng thế. Ý mình là giá trị trong cột INDEX chỉ xuất hiện 1 lần, nếu dải 0-31 không đủ giá trị, thì cột INDEX sẽ hiện giá trị "none".
Chưa hình dung rõ lắm
Không biết ý bạn có phải là muốn chèn nhưng cái còn thiếu vào cột B không nhỉ?
Thôi thì thế này cho dễ: Bạn muốn thế nào cứ hãy làm bằng tay vào trng file của bạn rồi gữi lên đây đi (tôi cứ nghĩ cái bạn cần tìm nằm tại cell F2)
 
Gửi các huynh file mình làm bằng tay "Lọc theo điều kiện, lấy ngẫu nhiên"

Nhờ các huynh nhiều.
 

File đính kèm

Dù có xem file nhưng cũng chưa hình dung phải làm thế nào ... Vì theo như trong file thì tôi chẳng cần làm gì cả, cứ gõ số 1 vào F2, gõ số 2 vào F3, xong kéo fill đến số 31 thì ngưng
Hic...
Có ai hiểu bài này không nhỉ? Và trong bài này thì cái nào là NGẪU NHIÊN? Đàng nào thì cũng sẽ điền số từ 1 đến 31, vậy cần gì công thức?
 
Không phải là tất cả trong dải 0-31 mà có điều kiện:
- các số trong cột F phải chưa xuất hiện trong cột B.
- dải 0-31 đều đã có trong cột F và cột thì các giá trị cột F tiếp theo sẽ là trắng.
Nếu vầy thì tại cell F2 bạn gõ công thức:
PHP:
=IF(ROWS($1:1)>COUNT(Pos),"",SMALL(Pos,ROWS($1:1)))
Kéo fill đến 31 dòng
Xem file
Hic... Mô ta khó hiểu quá!
Nếu file này đúng ý bạn thì lý ra bạn phải mô tả thế này
Với mỗi SOURCE_CELL cho trước, liệt kê ra toàn bộ những INDEX nào chưa xuất hiện (tại cột B) ---> Phần liệt kê đặt tại cột F (INDEX đầy đủ trải dài từ 0 đến 31)
Và nếu file này đúng ý thì tôi chẳng thấy có chổ nào gọi là NGẪU NHIÊN như tiêu đề bạn ghi cả
 

File đính kèm

Bạn xem trong file & iêu cầu tiếp xem nha

Cách xài:

Tại [E2] bạn nhập 1 mã SOURCE_CELL & bấm tổ hợp fím mà mình đã gán cho macro để nó cho bạn kết quả ban đầu;

Ta sẽ tiếp sau khi có í kiến của bạn bổ sung iêu cầu!
 

File đính kèm

Thêm iêu cầu "Lọc theo điều kiện, lấy ngẫu nhiên"

Giúp mình sửa lại để lấy giá trị cột F theo như cột E. Mình chạy file của bác SA_QD thì chỉ chạy được những giá trị còn thiếu của một điều kiện trong cột E thui.
 

File đính kèm

Giúp mình sửa lại để lấy giá trị cột F theo như cột E. Mình chạy file của bác SA_QD thì chỉ chạy được những giá trị còn thiếu của một điều kiện trong cột E thui.
Chứ ý bạn muốn sao? Đã qua 14 bài rồi mà 2 bên vẫn chẳng hiểu nhau... chỉ có thể trách bạn mô tả vấn đề quá kém... Hic...
(cũng may là người Việt nói chuyện với người Việt... Nếu nói với người nước ngoài chắc là thua luôn)
 
Không phải là tất cả trong dải 0-31 mà có điều kiện:
- các số trong cột F phải chưa xuất hiện trong cột B.
- dải 0-31 đều đã có trong cột F và cột thì các giá trị cột F tiếp theo sẽ là trắng.
http://www.giaiphapexcel.com/forum/member.php?61139-ndu96081631
Nói chưa rõ ràng thì bạn nên đưa kết quả cụ thể (minh họa bằng hình ảnh mà bạn cần làm trong file excel) đôi khi diễn tả bằng chữ viết còn chưa đủ cộng thêm hình ảnh luôn nếu được có video clip càng tốt!...đôi lời cùng You.
 
Chứ ý bạn muốn sao? Đã qua 14 bài rồi mà 2 bên vẫn chẳng hiểu nhau... chỉ có thể trách bạn mô tả vấn đề quá kém... Hic...
(cũng may là người Việt nói chuyện với người Việt... Nếu nói với người nước ngoài chắc là thua luôn)

Cảm ơn các bác đã góp ý. vd: như trong file mình gửi, mình nghĩ nó rõ đấy chứ. như trong giải pháp các huynh giúp thì chỉ tìm dc 31 giá trị ở cột E mà thôi,mình muốn tìm các giá trị như file mình điền ấy. Huynh nào cho mình số fone, mình alo hỏi cho rõ luôn. nick của mình tuanvtbk41.
 
như trong file mình gửi, mình nghĩ nó rõ đấy chứ. như trong giải pháp các huynh giúp thì chỉ tìm dc 31 giá trị ở cột E mà thôi,mình muốn tìm các giá trị như file mình điền ấy. Huynh nào cho mình số fone, mình alo hỏi cho rõ luôn. nick của mình tuanvtbk41.

Không fải viết những gì mình hiểu, mà fải viết những gì để người khác hiểu đó bạn.

Tạm biệt bạn luôn nha!
 

Không fải viết những gì mình hiểu, mà fải viết những gì để người khác hiểu đó bạn.

Tạm biệt bạn luôn nha!
Tôi nghĩ Bạn ấy muốn thế này: +Cột H và cột I chỉ là cột phụ cho dễ hiểu theo suy nghĩ của tôi. Cột E là dữ liệu có sẵn (của tác giả)
Tìm một số ngẫu nhiên từ 0-31 cho cột F sao cho khi kết hợp với cột E (thành Cột I) sẽ không trùng với dữ liệu trong cột H và dữ liệu trong cột I này cũng là duy nhất. Nếu cả 2 cột đã có đủ các số từ 0-31 thì sẽ chọn "gì gì đó" cho cột F
-Tôi đã nhập ngẫu nhiên bằng tay 18 dòng cho cột F. Cần tìm công thức chung cho cột này
-Chẳng hiểu sao tác giả không muốn chọn các số từ nhỏ đến lớn cho dễ nhìn mà lại là ngẫu nhiên cho rắc rối nhỉ?

Lại trời tôi không viết những gì chỉ có tôi mới hiểu!?!
 

File đính kèm

Các huynh thông cảm nhé, mình gửi file này lần cuối (có giải thích lại theo mình thì khá rõ).Mong các huynh cố gắng giúp mình.
Lần sau vào diễn đàn chắc sẽ k bị ăn mắng nhiều thế này nữa, hi vọng thế!
 

File đính kèm

Lần chỉnh sửa cuối:
Mình ngẫm câu nói đó trước khi viết hỏi các bác rùi, hi vọng bác giúp mình file lần cuối mình vừa gửi. Cảm ơn!
 
Lần chỉnh sửa cuối:
Các huynh thông cảm nhé, mình gửi file này lần cuối (có giải thích lại theo mình thì khá rõ).Mong các huynh cố gắng giúp mình.
Lần sau vào diễn đàn chắc sẽ k bị ăn mắng nhiều thế này nữa, hi vọng thế!
Đây file của bạn đây! Bạn xem đúng chưa?
(Mượn mấy cái name của anh Ndu)
 

File đính kèm

/-(ãy xem VBA làm điều đó như thế nào!

Trước hết, khâu chuẩn bị cần fải điền số dòng vào các ô của cột 'D' ứng với cột 'E' có số liệu;

Bấm tổ hợp fím tắt mình đã gán để chạy macro

Khà, khà,. . . Ưu điểm hơn cách trên lền kề là nạp vô 'E' những trị ngẫu nhiên (Hình như điều này chủ topic đang mong!?!)

PHP:
Option Explicit
 Dim StrC As String:                         Dim rBD As Long
 Const Chu As String = _
   "0001020304050607080910111213141516171819202122232425262728293031.."
 Const DD As Byte = 70

Sub TimKiem()
 Dim sCll As String:                         Dim jJ As Byte, rKT As Long
 Dim Cls As Range, Rg0 As Range, Clls As Range
  
 [d1].Value = "STT":                         Columns("D:F").Select
 Selection.Sort Key1:=[E2], Order1:=xlAscending, Key2:=[D2], _
   Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1
 [e9].End(xlDown).Offset(1).Value = "@GPE@"
 [F1].CurrentRegion.Offset(1, 2).Resize(, 3).ClearContents
 For Each Cls In Range([E2], [E65500].End(xlUp))
   If sCll <> Cls.Value Then
      sCll = Cls.Value
      If Cls.Row = 2 Then
         rBD = Cls.Row
      Else
         rKT = Cls.Row:                      DinhChuoi Cls.Offset(-1).Value
         Set Rg0 = Cells(rBD, "E").Resize(rKT - rBD)
         jJ = 0
         For Each Clls In Rg0.Offset(, 1)
            jJ = jJ + 1:
            If jJ < Len(StrC) / 2 Then
               Clls.Value = Mid(StrC, 2 * jJ - 1, 2)
            Else
               Clls.Value = "Nothing"
            End If
         Next Clls
         rBD = rKT:                          rKT = 0
      End If
   End If
 Next Cls
 Columns("E:E").Find("@GPE@").Value = ""
End Sub

Mã:
[B]Sub DinhChuoi(SCell As String)[/B]
 Dim Rng As Range, sRng As Range, jJ As Byte, MyAdd As String
 Const Hh As String = "@@"
 
 Set Rng = Range([A1], [A65500].End(xlUp)):  StrC = Chu
 Set sRng = Rng.Find(SCell, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
   MyAdd = sRng.Address
   Do
      jJ = 2 * sRng.Offset(, 1).Value + 1
      If jJ = 1 Then
         StrC = Hh & Mid(StrC, 3, DD)
      Else
         StrC = Left(StrC, jJ - 1) & Hh & Mid(StrC, jJ + 2, DD)
      End If
      Set sRng = Rng.FindNext(sRng)
   Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
 End If
 StrC = Replace(StrC, Hh, ""):               Cells(rBD, "h").Value = StrC
 DaoChuoi StrC:                              Cells(rBD + 2, "h").Value = StrC
[B]End Sub[/B]


Mã:
[B]Sub DaoChuoi(StrC As String)[/B]
 Dim jJ As Byte, Vtr As Byte, Num As Byte
 
 Num = Len(StrC) - 2
 For jJ = 1 To 99
   Randomize:                                Vtr = 1 + 2 * Int(Num * Rnd)
   If Vtr > 9 Then
      StrC = Mid(StrC, Vtr, DD) & Mid(StrC, 3, Vtr - 3) & Left(StrC, 2)
   Else
      StrC = Mid(StrC, Vtr, DD) & Left(StrC, Vtr - 1)
   End If
 Next jJ
 StrC = Replace(StrC, "..", "") & ".."
[B]End Sub[/B]

Nhân tiên đây, khi đã có kết quả, mình dự định tổ chức cuộc thi viết câu hỏi cho topic này;

Giải thưởng sẽ là xị 'Bàu đá' chính hiệu con nai vàng!
(Nhận giải tại TP HCM)
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn các bác đã góp ý. vd: như trong file mình gửi, mình nghĩ nó rõ đấy chứ. như trong giải pháp các huynh giúp thì chỉ tìm dc 31 giá trị ở cột E mà thôi,mình muốn tìm các giá trị như file mình điền ấy. Huynh nào cho mình số fone, mình alo hỏi cho rõ luôn. nick của mình tuanvtbk41.

Phải công nhận các mem của GPE cực kỳ nhiệt tình và thông minh; Thế nhưng những người rất thông minh của diễn đàn đàn đã phải vắt óc ra mà vẫn không hiểu được ý và mục tiêu vấn đề cần đạt được của bạn topgun mong muốn.

Quả thực, cách diễn giải vấn đề của bạn này là quá... kém...

Bạn topgun nên nhớ: Viết cho người khác đọc (và hiểu), chứ không phải viết cho mình đọc!
 
Lần chỉnh sửa cuối:
Chào các bác, nhờ các bác sửa giúp em thêm 1 chút nữa. Nếu giá trị cần tìm ở cột E mà không có trong cột A thì nó sẽ tự động lấy giá trị bất kỳ trong dải 0-31. Em ví dụ 2 thằng SAV0123, KHA0112 bôi vàng ở dưới. Cám ơn các bác nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Chào các bác, nhờ các bác sửa giúp em thêm 1 chút nữa. Nếu giá trị cần tìm ở cột E mà không có trong cột A thì nó sẽ tự động lấy giá trị bất kỳ trong dải 0-31. Em ví dụ 2 thằng SAV0123, KHA0112 bôi vàng ở dưới. Cám ơn các bác nhiều!
Nếu muốn vậy thì bạn chỉ thay công thức là: F2=IF(E2="","",IF(ISNA(Pos),RANDBETWEEN(0,31),IF(COUNT(Pos)>=COUNTIF($E$2:$E2,$E2),SMALL(Pos,COUNTIF($E$2:$E2,$E2)),"hết giá trị trong giải 0-31")))
là được thôi
 
Lần chỉnh sửa cuối:
Nếu muốn vậy thì bạn chỉ thay công thức là: F2=IF(E2="","",IF(ISNA(Pos),RANDBETWEEN(0,31),IF(COUNT(Pos)>=COUNTIF($E$2:$E2,$E2),SMALL(Pos,COUNTIF($E$2:$E2,$E2)),"hết giá trị trong giải 0-31")))
là được thôi

Bác ơi, ví dụ này thì thấy hàm đó vẫn chưa đúng, nhờ bác giúp sửa lại (giá trị phải duy nhất trong dải 0-31)
 

File đính kèm

Lần chỉnh sửa cuối:
Bác ơi, ví dụ này thì thấy hàm đó vẫn chưa đúng, nhờ bác giúp sửa lại (giá trị phải duy nhất trong dải 0-31)
Nếu vậy thì lấy lần lượt từ 0~31 nhé!
E2=IF(E2="","",IF(AND(ISNA(Pos),COUNTIF($E$2:E2,E2)<=32),COUNTIF($E$2:E2,E2)-1,IF(COUNT(Pos)>=COUNTIF($E2:$E$99,$E2),SMALL(Pos,COUNTIF($E2:$E$99,$E2)),"hết giá trị trong giải 0-31")))
 

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

Back
Top Bottom