Hoàng Nhật Phương
Thành viên gắn bó



- Tham gia
- 5/11/15
- Bài viết
- 1,895
- Được thích
- 1,219
Option Explicit
Sub DienSoTuDong()
Dim Tmp As Double, Rw As Long, Col As Byte
Randomize
For Rw = 14 To 19 Step 2 'Chay Theo Ḍòng'
For Col = 4 To 13 'Chay Theo Cot'
Tmp = Rnd() / 10
Cells(Rw, Col).Value = Tmp * (-1) ^ (1 + 9 * Rnd() \ 1) + Choose(Rw - 13, 10, 13, 15, 17, 18)
Next Col
Next Rw
End Sub
Macro của bạn đây & mình tin là bạn biết cho nó chạy:
PHP:Option Explicit Sub DienSoTuDong() Dim Tmp As Double, Rw As Long, Col As Byte Randomize For Rw = 14 To 19 Step 2 'Chay Theo Ḍòng' For Col = 4 To 13 'Chay Theo Cot' Tmp = Rnd() / 10 Cells(Rw, Col).Value = Tmp * (-1) ^ (1 + 9 * Rnd() \ 1) + Choose(Rw - 13, 10, 13, 15, 17, 18) Next Col Next Rw End Sub
Macro của bạn đây & mình tin là bạn biết cho nó chạy:
PHP:Option Explicit Sub DienSoTuDong() Dim Tmp As Double, Rw As Long, Col As Byte Randomize For Rw = 14 To 19 Step 2 'Chay Theo Ḍòng' For Col = 4 To 13 'Chay Theo Cot' Tmp = Rnd() / 10 Cells(Rw, Col).Value = Tmp * (-1) ^ (1 + 9 * Rnd() \ 1) + Choose(Rw - 13, 10, 13, 15, 17, 18) Next Col Next Rw End Sub
Code đó chưa lấy dữ liệu vùng màu vàng. Thử code này xem sao.Ah bạn cho hỏi vùng màu vàng trong file đính kèm liên quan đến các chỉ số nào trong đoạn code vậy ạ.
Giả sử trong trường hợp tôi muốn sửa đổi dữ liệu vùng màu vàng di chuyển xa hơn cái bảng dữ liệu thêm vài cột nữa chẳng hạn thì tôi dựa vào đâu để xử lý ạ.
Phiền bạn code thể giải thích kỹ hơn 1 chút các dòng code còn lại như 2 dòng bạn đã chú thích được không ạ.
Cảm ơn bạn thật nhiều.
Sub DienSo()
Dim i As Long, j As Long, Min As Double, Tmp As Double
Randomize
For i = 14 To 19 Step 2
Min = Cells(i, 15).Value + Cells(i + 1, 16).Value
Tmp = Cells(i, 16).Value - Cells(i + 1, 16).Value
For j = 4 To 13
Cells(i, j).Value = Min + Tmp * Rnd()
Next
Next
End Sub
Code đó chưa lấy dữ liệu vùng màu vàng. Thử code này xem sao.
PHP:Sub DienSo() Dim i As Long, j As Long, Min As Double, Tmp As Double Randomize For i = 14 To 19 Step 2 Min = Cells(i, 15).Value + Cells(i + 1, 16).Value Tmp = Cells(i, 16).Value - Cells(i + 1, 16).Value For j = 4 To 13 Cells(i, j).Value = Min + Tmp * Rnd() Next Next End Sub
Ah! Tôi hiểu rồi, tôi xin lỗi có thể ví dụ minh họa tối gửi kèm hơi sơ sài và đơn giản nên khiến bạn hiểu nhầm
Dữ liệu thực tế của tôi nhiều hơn vi dụ minh họa và vùng màu vàng các dung sai cũng không hoàn toàn giống nhau bạn ah.
Ý tôi là làm sao có thê dựa vào vùng màu vàng trong file đính kèm để dữ liệu tự động cập nhật vào bảng bên đó bạn ah.
Bạn xem lại file kèm bạn nhé.
Hix, phiền các bạn thêm một lần nữa ạ.
Xin cảm ơn các bạn rất nhiều
Ủa. Code bài #5 không xài được sao bạn?
các sự huynh cho em hỏi. em ở cột A1 của em là phép tính, bây giờ em muốn ô B1 là kết quả của phép tính của ô A1. các huynh cho em xin code với ạ. em cảm ơn nhiều
Tmp = Rnd() / 10
Cells(Rw, Col).Value = Tmp * (-1) ^ (1 + 9 * Rnd() \ 1) + Choose(Rw - 13, 10, 13, 15, 17, 18)
Lấy giá trị từ hàm ngẫu cho (từ 0.00000001 - 0.99999999999) đem chia cho 10; Lúc đó số nhận được trong khoảng (0.010000001- 0.099999999999)PHP:Tmp = Rnd() / 10
Biểu thức: (-1) ^ (1 + 9 * Rnd() \ 1) sẽ cho ta trị -1 hay 1 một cách ngẫu nhiênPHP:Cells(Rw, Col).Value = Tmp * (-1) ^ (1 + 9 * Rnd() \ 1) + Choose(Rw - 13, 10, 13, 15, 17, 18)
Biểu thức này được đem nhân với trị trong biến Tmp (như trên ta đã xét)
Hàm Choose(Rw - 13, 10, 13, 15, 17, 18) này cũng giống như trong Excel thôi;
Nhưng ở đây các trị 13 & 17 chen vô để lắp chổ trống mà thôi; Còn tại sao fải làm vậy thì ta fải xét đến vòng lặp theo bước nhãy cùa Rw
mình xin lỗi. các huynh biết giúp đệ vớiBạn bị lỗi xen ngang bài vì đề tài của bạn không trùng với đề tài mọi người đang thảo luận!
,,,,
Lấy giá trị từ hàm ngẫu cho (từ 0.00000001 - 0.99999999999) đem chia cho 10; Lúc đó số nhận được trong khoảng (0.010000001- 0.099999999999)PHP:Tmp = Rnd() / 10
Biểu thức: (-1) ^ (1 + 9 * Rnd() \ 1) sẽ cho ta trị -1 hay 1 một cách ngẫu nhiênPHP:Cells(Rw, Col).Value = Tmp * (-1) ^ (1 + 9 * Rnd() \ 1) + Choose(Rw - 13, 10, 13, 15, 17, 18)
Biểu thức này được đem nhân với trị trong biến Tmp (như trên ta đã xét)
Hàm Choose(Rw - 13, 10, 13, 15, 17, 18) này cũng giống như trong Excel thôi;
Nhưng ở đây các trị 13 & 17 chen vô để lắp chổ trống mà thôi; Còn tại sao fải làm vậy thì ta fải xét đến vòng lặp theo bước nhãy cùa Rw
Xin chào tất cả các bạn,
Các bạn sửa giúp tôi đoạn code của bài #5 cho phù hợp với dữ liệu trong file đính kèm này với ạ
Xin cảm ơn các bạn rất nhiều
Xin lỗi các bạn ạ.
Tôi có đặt câu hỏi trong file kèm nói đến vùng màu vàng nhưng trong file không có vùng nào màu vàng cả. hix thành thật xin lỗi tôi lấy file ở bài 1 mà quên không để ý nội dung câu hỏi.
Tôi xin phép up file mới lên ạ, phiền các bạn xem giúp ạ.
Xin cảm ơn
Sub DienSo() Dim i As Long, j As Long, Min, Max As Double, Tmp As Double
Randomize
For i = 14 To 16
Min = Cells(i, 16).Value
Max = Cells(i, 15).Value
For j = 4 To 13
Cells(i, j).Value = Application.RandBetween(Min * 100# - 10, Max * 100#) / 100#
Next
Next
End Sub
Xin lỗi các bạn ạ.
Tôi có đặt câu hỏi trong file kèm nói đến vùng màu vàng nhưng trong file không có vùng nào màu vàng cả. hix thành thật xin lỗi tôi lấy file ở bài 1 mà quên không để ý nội dung câu hỏi.
Tôi xin phép up file mới lên ạ, phiền các bạn xem giúp ạ.
Xin cảm ơn
Sub DienSo()
Dim sArr(), dArr(), i As Long, j As Long
Dim Mn As Double, Mx As Double, Tmp As Double
sArr = Range("O14", Range("P14").End(xlDown)).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 10)
Randomize
For i = 1 To UBound(sArr)
Mx = sArr(i, 1): Mn = sArr(i, 2)
For j = 1 To 10
Do
Tmp = Mn + Rnd
dArr(i, j) = Tmp
If Tmp < Mx Then Exit Do
Loop
Next j
Next i
Range("D14:M14").Resize(i - 1) = dArr
End Sub
Bạn thử code này xemXin lỗi các bạn ạ.
Tôi có đặt câu hỏi trong file kèm nói đến vùng màu vàng nhưng trong file không có vùng nào màu vàng cả. hix thành thật xin lỗi tôi lấy file ở bài 1 mà quên không để ý nội dung câu hỏi.
Tôi xin phép up file mới lên ạ, phiền các bạn xem giúp ạ.
Xin cảm ơn
Sub DienSo()
Dim VungKetQua, KetQua, KhoangGiaTri
Set VungKetQua = Range("D14:M16") 'Sua lai theo du lieu thuc te
KhoangGiaTri = Range("O14:P16").Value 'Sua lai theo du lieu thuc te
VungKetQua.ClearContents
ReDim KetQua(1 To VungKetQua.Rows.Count, 1 To VungKetQua.Columns.Count)
Randomize
For i = 1 To UBound(KetQua, 1)
For j = 1 To UBound(KetQua, 2)
KetQua(i, j) = KhoangGiaTri(i, 2) + Rnd * (KhoangGiaTri(i, 1) - KhoangGiaTri(i, 2))
Next
Next
VungKetQua.Value = KetQua
End Sub
Nếu đã đúng ý bạn thì chắc là tôi hiểu sai ý bạn rồi.Hihi,Xin cảm ơn hai bạn patygate591 và Ba Tê rất nhiều ạ.
Tuy 2 bài trả lời có khác nhau nhưng kết quả đều ra đúng ý tôi muốn rồi.
Code bài 17 thật là khủng khiếp: bài 16 tôi cũng không hiểu gì luôn rồi sang đến bài 17 thì vấn đề không hiểu lại tăng thêm rất nhiều lần không biết nếu tôi mà học thì đến bao giờ tôi mới có thể hiểu được các đoạn code này ^^ ..
Một lần nữa xin cảm ơn các bạn rất nhiều.