Vòng lặp tìm tổng số lần xuất hiện trong các cột là đều bằng 6

Liên hệ QC

tvlinh470

Thành viên mới
Tham gia
24/9/10
Bài viết
2
Được thích
0
Mọi người ơi giúp mình với, Mình có một cột giá trị, và một cột số liệu số lần lặp trong hàng ngang, bây giờ viết vòng lặp và lập trình như thế nào để bảng kẻ ô bên có các giá trị của cột :"giá trị" và tổng số lần xuất hiện trong các cột là đều bằng 6. Mình xin cảm ơn.
 

File đính kèm

Lần chỉnh sửa cuối:
Gọi tới số trên thấy cứ kêu "heo mi.. heo mi.. heo mi..", đúng là "năm con heo" có khác. :)
Thớt cho số điện bán heo mĩ.
Đầu năm, nấu món thịt kho tàu, ăn với dưa giá bắt lắm.
Nhưng mà bạn ở ngoài ấy thì đầu năm ăn thịt đông dưa cải. Heo dót xia mĩ (Yorkshire) da bở, tuy nhiều keo nhưng nấu đông vẫn bị bở. Nếu có gọi thì hỏi xem có giống hem xia (Hampshire) da mỏng, ít mỡ hơn, nấu đông là lý tưởng.
 
Upvote 0
Mọi người ơi giúp mình với, Mình có một cột giá trị, và một cột số liệu số lần lặp trong hàng ngang, bây giờ viết vòng lặp và lập trình như thế nào để bảng kẻ ô bên có các giá trị của cột :"giá trị" và tổng số lần xuất hiện trong các cột là đều bằng 6. Mình xin cảm ơn.
Khi đăng bài lần sau, nên đọc nội quy của diễn đàn
Bấm mặt cười tạo kết quả ngẫu nhiên
Mã:
Sub GPE()
  Dim sarr(), Res(), tmp As Variant
  Dim i As Long, j As Long, sRow As Long
  Dim iMax As Long, ik As Long, jMin As Long, jk As Long, jCol As Long
  Const S = 6 'So lan 1 Cot
  Const sCol = 20 'So cot
  sarr = Range("A3:B22").Value
  sRow = UBound(sarr)
  For i = 1 To sRow
    If sarr(i, 2) > sCol Then MsgBox ("So lan Lap sai"): Exit Sub
    ik = ik + sarr(i, 2)
  Next i
  If ik <> S * sCol Then MsgBox ("So lan Lap sai"): Exit Sub
  ReDim Res(1 To sRow + 1, 1 To sCol)
 
  For i = 1 To sRow
    iMax = 0
    For k = 1 To sRow
      If iMax < sarr(k, 2) Then iMax = sarr(k, 2): ik = k
    Next k
    If iMax > 0 Then
      sarr(ik, 2) = 0
      For j = 1 To iMax
        tmp = UniqueRand(sCol)
        jMin = 100
        For k = 1 To sCol
          jk = tmp(k)
          If jMin > Res(sRow + 1, jk) Then jMin = Res(sRow + 1, jk): jCol = jk
        Next k
        Res(sRow + 1, jCol) = Res(sRow + 1, jCol) + 1
        Res(ik, jCol) = sarr(ik, 1)
      Next j
    End If
  Next i
  Range("D3").Resize(sRow, sCol) = Res
End Sub

Private Function UniqueRand(ByVal N As Long) As Variant
  Dim Arr() As Long, i As Long, RndNum As Long, tmp As Long
  ReDim Arr(1 To N)
  Randomize
  For i = 1 To N
    RndNum = Int(N * Rnd() + 1)
    If Arr(RndNum) = 0 Then tmp = RndNum Else tmp = Arr(RndNum)
    If Arr(N) = 0 Then Arr(RndNum) = N Else Arr(RndNum) = Arr(N)
    Arr(N) = tmp
    N = N - 1
  Next i
  UniqueRand = Arr
End Function
 

File đính kèm

Upvote 0
Cách thể hiện "vòng lặp"
Phiên bản 1.00:
GoTo #2
Phiên bản 1.01:
GoTo #7
Phiên bản 2.00:
Xoá GoTo; Đặt Do While "tiêu Đề" = "???" ở #8; và Loop ở #10
Phiên bản 3:00:
Sửa Do While "tiêu Đề" = "???" thành Do While "Nằm Trật Box" = True; và dời Loop xuống #14 (tức là bài này)

(*) đính chính thêm: lúc tôi viết bài #2 (lúc đó có bài #2 khác, bài tôi là #3) thì tiêu đề bài là "help me". Và bài #3 (formerly #2) của tôi cốt giải thích câu hỏi trong bài #2 cũ.
Lúc tôi viết bài #5 (trước đây là #14) này thì thớt nằm ở hộp Add-ins, tiêu đề bài là vỏn vẹn "vòng lặp", và lúc đó nó là bài #14. Nó mục đích trả lời cho hai bài #12 và #13
Vì mấy Cụ Ắc Mình xoá bớt mấy bài mà các cụ cho rằng không liên hệ bài và rốt cuộc số bài trở nên lủng củng và hai bài của tôi bị trớt quớt.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom