Tạo tên và ngày tháng năm ngẫu nhiên

Liên hệ QC

hphuc0210

Thành viên chính thức
Tham gia
30/3/10
Bài viết
77
Được thích
18
Xin chào các anh chi GPE !
Em đã đọc qua rất nhiều bài về tạo số ngẫu nhiên,ghép nhóm học sinh ngẫu nhiên,tách tên... nhưng chưa có bài nào nói về cách ghép tên và ghép ngày tháng năm ngẫu nhiên nên em muốn hỏi làm cách nào để có thể tạo được tên ngẫu nhiên,ngày tháng năm ngẫu nhiên,em có đính kèm file VD và có ghi câu hỏi ở 2 sheet tạo tên và tạo ngày nhờ anh chi GPE giúp.Em xin cảm ơn
 

File đính kèm

Cảm ơn bạn đã trả lời nhưng không được nó bị lỗi #NAME?
 
Bạn thử vào Tools/Add-Ins rồi tích vào mụcAnalysis ToolPak sau đó nhấn OK xem có được không nhé!
 
Thêm 1 cách để bạn tham khảo

Mã:
Option Explicit
[B]Sub NgayThangNamNgauNhien()[/B]
 Dim jJ As Byte, Ngay As Byte, Thang As Byte, Nam As Integer, MyColor As Byte
 
 Range([E2], [E65500].End(xlUp)).ClearContents
 With [E1].Interior
   If .ColorIndex < 34 Then MyColor = 34 Else MyColor = .ColorIndex + 1
 End With
 For jJ = 1 To [I3].Value
   Randomize:                    Thang = Int(12 * Rnd)
   Nam = [d2].Value + Int(([d3].Value - [d2].Value) * Rnd)
   If Thang = 0 Then Thang = IIf(MyColor Mod 2 = 0, 1, 12)
   Ngay = Choose(Thang, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
   If Nam \ 100 Mod 4 = 0 Then Ngay = 29
   Ngay = Int(Ngay * Rnd):       If Ngay = 0 Then Ngay = 1
   With [E65500].End(xlUp).Offset(1)
      .Value = Ngay * 10 ^ 6 + Thang * 10 ^ 4 + Nam
   End With
 Next jJ
 [E1].Interior.ColorIndex = MyColor
[B]End Sub[/B]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Cảm ơn hoangminhtien va HYEN17 đã giúp phần tạo ngày em đã làm được rồi,còn phần tạo tên các anh chị không giúp được em sao?em đã vận dụng công thức gần giống nhưng nó không ra,xin các anh chị giúp em tao phần tên ở sheet "tạo tên" với
 
2uan trọng là tạo danh sách họ, đệm & tên một cách tinh tế, như

| Ho | Dem | Ten |
1|Lê|Văn|Hồng|
2|Nguyễn|Thái|Minh Phúc|
3|Đỗ|Lê|Kim Chi|
4|Trần|Vy|Minh|
5|Huỳnh|Hoàng|Kim|
6|Võ|Mỹ|Vân|
7|Phan|Huỳnh|Chí|
8|Phạm|Ngũ| Phúc|
9|Cao|Mạnh|Ca|
10|Trương|Hồng|Dũng|
11|Bùi|Thị Hồng|Nhung
12|Vương|Ái|Thanh|
13|Dương|Quang|Sa|
14|Thái|Vỹ|Thạnh|
15|Mạc|Ánh|Anh|
16|Đinh|Minh|Thương|
17|Lý|Vân|Thượng|
18|Lại|Văn Hoàng| Phi|
19|Phí|Thị|Hoa|
20|Vũ|Minh|Quang|
21|Mai||Mai|
& đây là macro của bạn:
PHP:
Option Explicit
Sub TaoTenNgauNhien()
 Dim Ho As Integer, Ten As Integer, Dem As Integer, Jj As Byte
 Const KC As String = " "
 [D1].Value = "HoTen":           [D2].Value = "GPE"
 Range([D2], [d65500].End(xlUp)).ClearContents
 For Jj = 1 To [g3].Value
   Randomize:                    Ho = 2 + Int(18 * Rnd)
   Dem = 1 + Int(20 * Rnd):       Ten = 2 + Int(18 * Rnd)
   Cells(Jj + 1, "D").Value = Cells(Ho + 1, "A").Value & KC & _
      Cells(Dem + 1, "B").Value & KC & Cells(Ten + 1, "C").Value
 Next Jj
End Sub
 
Lần chỉnh sửa cuối:
Xin cảm ơn các anh chỉ đã chỉ dạy,qua những công thức và macro trên chỉ có công thức của hoangminhtien la chạy tốt còn lại của HYEN17 và ChanhTQ thì chưa được hoàn chỉnh.code của HYEN thi lỗi kết quả ra toàn dấu ####,còn của ChanhTQ thì chỉ được vài tên đọc được còn vài tên chỉ mang họ hoặc chỉ có họ và tên đêm
 
Hãy vận hành thử file đính kèm & fát biểu lại nha!

. . . còn lại của HYEN17 và ChanhTQ thì chưa được hoàn chỉnh.code của HYEN thi lỗi kết quả ra toàn dấu ####,còn của ChanhTQ thì chỉ được vài tên đọc được còn vài tên chỉ mang họ hoặc chỉ có họ và tên đêm


|==========>>>O<<<==========|
 

File đính kèm

Tạo tên ngẫu nhiên bằng công thức:

=IF(ROWS($1:1)>$G$3;"";INDEX(Ho;RANDBETWEEN(1;ROWS(Ho)))&" "&INDEX(Lot;RANDBETWEEN(1;ROWS(Lot)))&" "& INDEX(Ten;RANDBETWEEN(1;ROWS(Ten))))
 

File đính kèm

Thật là hay,thú thật em la người làm kinh doanh không biết gì về excel ngay cả chỉnh sữa căn bản em cũng k biết,em chỉ biết sử dụng vi tinh nên tìm hiểu và biết dc GPE đây là 1 dd hay,qua từng câu hỏi với những bài ví dụ xấu ồm và vớ vẫn của em,đã dc các anh chị giúp đỡ và em đã học được rất nhiều điều bổ ít,em thật sự cảm kích và cảm ơn GPE rất nhiều,nếu những câu hỏi và những cái ví dụ của em không đúng khuôn khổ,không mang tính chuyên nghiệp trong excel thì mong các anh chi giúp đỡ chỉnh sữa cho hoàn chỉnh đừng chê trách nó quá dỡ,em sẽ cố gắng học dần và hoàn thiện hơn trong từng bài viết và từng câu hỏi.
Em đã sử dụng được file của ChanhTQ và ptm0412,nhưng em khong biết chỉnh làm sao ở phần tạo ngày của ChanhTQ để cho ra kết quả ngày tháng năm có số 0 ở trước xin ChanhTQ chỉnh giúp,kết quả dúng phải có 8 số vd : 01021982 phải có cả số 0 ở phía trước chứ k phải 1021982
Rất cảm ơn GPE

Ghi chú : Tạo ngày bằng công thức của bạn hoangminhtien bị lõi vẫn có ngay 2902,theo lịch ngày này k có,4 năm mói có 1 ngày em muốn bỏ qua ngày này cho tất cả các năm luôn

Untitled..jpg
 
Lần chỉnh sửa cuối:
Theo bạn, năm 1976 là năm nhuận hay không nhuận?
Công thức của HoangMinhTien hoàn toàn chính xác, bạn yên tâm.
 
Thành thật xin lỗi em cũng chưa tìm hiểu lại xem năm 1976 là năm nhuận hay không nhuận,nhưng khi em lấy ngày 29021976 đăng ký thông tin thì hệ thống web đó nó báo là ngày không chính xác em đành sữa lại ngày 28021976 :(,điều đó nói lên rằng hệ thống đó không cập nhật và nó cũng không quan tâm năm đó có nhuận hay không nhuận,hệ thống nó chỉ biết những tháng nào không có ngày 29 30 31 là nó loại.Do vậy em có 2 phương án để giải quyết đó là :

1 là em chỉ lấy 28 ngày cho 1 tháng nhưng khi em sữa công thức thành =IF(ROWS($1:3)>$I$3;"";RANDBETWEEN(DATE($D$2;1;1);DATE($D$3;12;28))) thì kết quả vẫn có ngày 29 30 31 như vạy là sao,em đã sai ở chổ nào?,

2 là có cách nào để công thức không tính năm nhuận hoặc năm không nhuận chỉ biết 1 điều những tháng không có ngày 29 30 31 thì công thức không cho ra kết quả kết quả

Tái bút : xin anh ptm0412 hoặc anh chị nào biết chỉnh,chỉnh lại giùm em ở code của ChanhTQ kết quả không có ngày 29 30 31 cho những tháng không có ngày 29 30 31 của tất cả các năm bất kể nhuận hay không nhuận và kết quả dúng phải có 8 số vd : 01021982 phải có cả số 0 ở phía trước chứ k phải 1021982
Rất cảm ơn các anh chị
 
Lần chỉnh sửa cuối:
Thành thật xin lỗi em cũng chưa tìm hiểu lại xem năm 1976 là năm nhuận hay không nhuận,nhưng khi em lấy ngày 29021976 đăng ký thông tin thì hệ thống web đó nó báo là ngày không chính xác em đành sữa lại ngày 28021976 :(,điều đó nói lên rằng hệ thống đó không cập nhật và nó cũng không quan tâm năm đó có nhuận hay không nhuận,hệ thống nó chỉ biết những tháng nào không có ngày 29 30 31 là nó loại.Do vậy em có 2 phương án để giải quyết đó là : 1 là em chỉ lấy 28 ngày cho 1 tháng,2 là có cách nào để công thức không tính năm nhuận hoặc năm không nhuận chỉ biết 1 điều những tháng không có ngày 29 30 31 thì công thức không cho ra kết quả kết quả
Cái này phải liên hệ với trang web để yêu cầu xem lại nha ---> Chắc họ hỏng biết Excel nên không biết rằng năm 1976 là năm nhuận chăng??? --=0
Vậy lý nào "HỌ" sai mà ta cũng sửa cho sai theo "HỌ"?--=0
-------------------------------------------------------------------
Tặng bạn file này dùng cả 2 cách: Công thức và VBA
- Với công thức, tôi dùng hàm RAND thay cho RANDBETWEEN nên không cần đến AddIn Analysis (máy nào cũng xài được)
- Với VBA: Giải quyết cho bạn vụ format có số 0 đàng trước (theo dạng ddmmyyyyy)
Đây là 2 UDF phục vụ cho công việc
PHP:
Function RandomDate(Y1 As Long, Y2 As Long, Amount)
  Dim k As Long, Dat1 As Long, Dat2 As Long, Arr() As String
  Dat1 = DateSerial(Y1, 1, 1)
  Dat2 = DateSerial(Y2, 12, 31)
  ReDim Arr(Amount - 1)
  For k = 0 To Amount - 1
    Arr(k) = "'" & Format(Int(Rnd() * (1 + Dat2 - Dat1)) + Dat1, "ddmmyyyy")
  Next
  RandomDate = Arr
End Function
PHP:
Function RandomName(FName As Range, MName As Range, LName As Range, Amount)
  Dim k As Long, Name1 As String, Name2 As String, Name3 As String, Arr()
  ReDim Arr(Amount - 1)
  For k = 0 To Amount - 1
    Randomize
    Name1 = FName(Int(Rnd() * FName.Count) + 1)
    Name2 = MName(Int(Rnd() * MName.Count) + 1)
    Name3 = LName(Int(Rnd() * LName.Count) + 1)
    Arr(k) = Name1 & " " & Name2 & " " & Name3
  Next
  RandomName = Arr
End Function
Đây là code cho CommandButton
PHP:
Private Sub CommandButton1_Click()
  Dim Result, FName As Range, MName As Range, LName As Range, Amount As Long
  Set FName = Range([A2], [A65536].End(xlUp))
  Set MName = Range([B2], [B65536].End(xlUp))
  Set LName = Range([C2], [C65536].End(xlUp))
  Amount = Range("G3").Value
  Range("E2:E60000").ClearContents
  Result = RandomName(FName, MName, LName, Amount)
  Range("E2").Resize(Amount).Value = WorksheetFunction.Transpose(Result)
End Sub
PHP:
Private Sub CommandButton1_Click()
  Dim Result, Y1 As Long, Y2 As Long
  Y1 = Range("B2").Value
  Y2 = Range("B3").Value
  Amount = Range("G3").Value
  Result = RandomDate(Y1, Y2, Amount)
  Range("D2:D60000").ClearContents
  Range("D2").Resize(Amount).Value = WorksheetFunction.Transpose(Result)
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Rất cảm ơn ndu96081631 đã cho em 1 file hoàn chỉnh,em đã học được ở anh rất nhiều bài viết hay ở GPE và bài này cũng không ngoại lệ.Anh nói đúng
Cái này phải liên hệ với trang web để yêu cầu xem lại nha ---> Chắc họ hỏng biết Excel nên không biết rằng năm 1976 là năm nhuận chăng??? --=0
Vậy lý nào "HỌ" sai mà ta cũng sửa cho sai theo "HỌ"?--=0
nhưng qui tắc là do người ta đặt ra,em đã từng hỏi họ về việc này nhưng họ nói sẽ báo kỹ thuật xem lại,nhưng qua bao ngày tháng thì sự việc vẫn như cũ k thấy sữa,em không hề nói gian nếu có 1 dịp nào đó anh gặp vấn đề này em nghỉ anh sẽ cười 1 cái cho mà xem hihi :D

File tuy đã hoàn chỉnh nhưng có 1 điểm nhỏ xin anh ndu96081631 lưu ý giúp em,có nhiều tên khi đọc nghe rất hài hước VD : trương trương minh phuc <<<<<< được ghép từ họ trương và họ đệm trương,nếu ghép trương nguyễn minh phúc nghe có vẻ đỡ hơn phải không anh.Vậy vấn đề ở đây là có cần phải đặt thêm 1 điều kiên là họ và tên đệm không được giống nhau không anh?điều này làm như thế nào?

Rất cảm ơn GPE
 
Lần chỉnh sửa cuối:
File tuy đã hoàn chỉnh nhưng có 1 điểm nhỏ xin anh ndu96081631 lưu ý giúp em,có nhiều tên khi đọc nghe rất hài hước VD : trương trương minh phuc <<<<<< được ghép từ họ trương và họ đệm trương,nếu ghép trương nguyễn minh phúc nghe có vẻ đỡ hơn phải không anh.Vậy vấn đề ở đây là có cần phải đặt thêm 1 điều kiên là họ và tên đệm không được giống nhau không anh?điều này làm như thế nào?

Rất cảm ơn GPE
Tất nhiên là được, nhưng TÊN NGƯỜI không thể suy luận theo kiểu đơn giản thế được!
Tôi có 1 người bạn tên Phùng Văn Văn ---> Chữ lót và tên trùng nhau và 1 người nữa tên Hoàng Hoàng Bảo ---> Họ và chữ lót trùng nhau ---> cũng đâu chết "thằng tây" nào (Công An chẳng phàn nàn gì)
Vậy cũng khó có thể xác định được rằng: TÊN THẾ NÀO LÀ KHÔNG HỢP LỆ bạn à!
Nếu bạn có thể liệt kê ra hết những HỌ ở Việt Nam và TÊN mà người ta thường đặt rồi ráp ngẫu nhiên chúng thì cho dù họ tên không trùng cũng sẽ có trường hợp ráp lại rất khó nghe
Ví dụ:
Họ = Ông
Chữ lót = Thiên
Tên = Lôi
Mấy chữ này cũng bình thường, nhưng ráp vào thành Ông Thiên Lôi, nghe chẳng ra cái giống gì! (Dù chúng ta chẳng thể chỉ ra được chổ nào là KHÔNG HỢP LỆ cả)... Ẹc... Ẹc...
Vì vậy: Dể nghe hay khó nghe là do "quan niệm" ---> Mà đã là "quan niệm" thì thật khó mà viết thành code
 
Hihi anh nói vậy thì em nghe vậy,"quan niệm" thì có người vậy người khác nếu quan niệm của anh là như vậy thì em không thể để anh đi ngược lại,thật tình em không biết gì về excel hết chứ đừng nói là viết code,anh đã giúp em như vậy em vô cùng biết ơn,em cảm ơn anh nhiều,em sẽ tự tìm hiểu và mài mò về phần đó biết đâu điều đó giúp em hiểu nhiều về excel hơn :D

Cảm ơn GPE
 
Cái này phải liên hệ với trang web để yêu cầu xem lại nha ---> Chắc họ hỏng biết Excel nên không biết rằng năm 1976 là năm nhuận chăng??? --=0
Vậy lý nào "HỌ" sai mà ta cũng sửa cho sai theo "HỌ"?--=0
-------------------------------------------------------------------
Tặng bạn file này dùng cả 2 cách: Công thức và VBA
- Với công thức, tôi dùng hàm RAND thay cho RANDBETWEEN nên không cần đến AddIn Analysis (máy nào cũng xài được)
- Với VBA: Giải quyết cho bạn vụ format có số 0 đàng trước (theo dạng ddmmyyyyy)
Đây là 2 UDF phục vụ cho công việc
PHP:
Function RandomDate(Y1 As Long, Y2 As Long, Amount)
  Dim k As Long, Dat1 As Long, Dat2 As Long, Arr() As String
  Dat1 = DateSerial(Y1, 1, 1)
  Dat2 = DateSerial(Y2, 12, 31)
  ReDim Arr(Amount - 1)
  For k = 0 To Amount - 1
    Arr(k) = "'" & Format(Int(Rnd() * (1 + Dat2 - Dat1)) + Dat1, "ddmmyyyy")
  Next
  RandomDate = Arr
End Function
PHP:
Function RandomName(FName As Range, MName As Range, LName As Range, Amount)
  Dim k As Long, Name1 As String, Name2 As String, Name3 As String, Arr()
  ReDim Arr(Amount - 1)
  For k = 0 To Amount - 1
    Randomize
    Name1 = FName(Int(Rnd() * FName.Count) + 1)
    Name2 = MName(Int(Rnd() * MName.Count) + 1)
    Name3 = LName(Int(Rnd() * LName.Count) + 1)
    Arr(k) = Name1 & " " & Name2 & " " & Name3
  Next
  RandomName = Arr
End Function
Đây là code cho CommandButton
PHP:
Private Sub CommandButton1_Click()
  Dim Result, FName As Range, MName As Range, LName As Range, Amount As Long
  Set FName = Range([A2], [A65536].End(xlUp))
  Set MName = Range([B2], [B65536].End(xlUp))
  Set LName = Range([C2], [C65536].End(xlUp))
  Amount = Range("G3").Value
  Range("E2:E60000").ClearContents
  Result = RandomName(FName, MName, LName, Amount)
  Range("E2").Resize(Amount).Value = WorksheetFunction.Transpose(Result)
End Sub
PHP:
Private Sub CommandButton1_Click()
  Dim Result, Y1 As Long, Y2 As Long
  Y1 = Range("B2").Value
  Y2 = Range("B3").Value
  Amount = Range("G3").Value
  Result = RandomDate(Y1, Y2, Amount)
  Range("D2:D60000").ClearContents
  Range("D2").Resize(Amount).Value = WorksheetFunction.Transpose(Result)
End Sub
Vẫn như cách của bạn ndu96081 nhưng giờ mình muốn thế này thì có thể làm được ko các bạn. Mình muốn:
1. Nếu Họ, Tên Đệm, Tên đều có Một chữ cái thì vẫn như cách bạn ndu96081 làm ở file randommize.xls
2. Nếu ở phần Họ hoặc tên (hoặc cả 2) có từ 2 chữ trở lên thì bỏ qua ô tên đệm. VD:
- Họ: Lê
- Tên Đệm: Văn
- Tên: Tiến Quân
Kết quả sẽ là: Lê Tiến Quân mà không phải là Lê Văn Tiến Quân
Mong mọi người giúp mình chỉ cách làm và làm cho mình một file như của bác ndu96081. Xin chân thành cảm ơn mọi người!
 
Web KT

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

Back
Top Bottom