Đếm ô để set màu

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

bobovnu

Thành viên mới
Tham gia
27/3/08
Bài viết
17
Được thích
3
Bác có file nào khác giống như vầy không! Chứ em download về nó báo lỗi rồi không đọc được!
Các anh chị giúp e với, dân ko chuyên nên khổ thế đấy ạ. E xin cảm ơn trước ạ.

Xin các bác tải file về giúp em ạ.
YM của em: Thienvnu -=.,,

Rất mong tin của các bác.
Tạm thời sau 3 bước ta sẽ có các hình như trong file này ạ. (202.xls)
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Có lẽ làm được, nhưng phải hỏi lại xíu:

Hình chữ nhật, mà bạn gọi là lưới đó càng ngày càng phình to ra phải không;
VD góc trái nhất của khung lưới có màu đen, khi đó xung quang nó có 3 ô màu đen; Theo đề bài sau 1 bước nó sẽ màu trắng (?)
Mình xin gợi í cách làm như sau

VD ô đang khảo sát là Clls

Thì các ô xung quanh & cả nó sẽ là Clls.Offset(-1,-1).Resize(3,3)
Dùng vòng lặp để tìm màu trong 8 ô này (không kể chính nó) để tô màu theo quy luật đề ra;
Chỉ phân vân là các ô cận trên cận dưới, cận trái phải bạn cho là không cố định; Vậy thì hình chữ nhật ban đầu chắc phải nằm giữa sheet (?)
Chờ tin của bạn!
 
Upvote 0
Dạ, rất cảm ơn anh đã trả lời em ạ,.. Ở trong file 1 e đã nói là lưới ô vuông màu đen là cố định, ví dụ 1000x1000 ạ. Vì minh họa nên e chỉ vẽ đường viền cho dễ thôi ạ.

Làm thể nào để tìm màu hả anh? Anh có thể gợi ý chi tiết hơn dùm đc ko ạ.
Thank anh nhiều ạ.
 
Upvote 0
Bạn thử kiểm tra xem đúng í bạn chưa nha, cho mình biết

Mình mới viết cho trường hợp ấn 1 lần với vùng ban đầu 7 x 7 ô
Bạn nhấn vô nút lệnh trên 'S3' để chạy thay phiên & kiểm tra dùm theo số liệu màu ghi tại mãng bên trên ( trước khi chạy macro, có thể xóa các số liệu màu nhằm kiểm tra tính đúng đắc của macro!
Mong tin bạn!
Mã:
Option Explicit:            Option Base 1
Dim KhTo As Boolean
Sub ColorS()
 Dim Rng As Range, Clls As Range, RngC As Range
 Dim RngL As Range
 Dim Rng9 As Range, Cll9 As Range
 Dim SoLan As Byte, bJ As Byte, MauDen As Integer 
1 ' Thiet Lap Ban Dau;'
 Sheets("S3").Select:            Set RngC = Cells(40, 27)
 Set Rng = RngC.Resize(7, 7)
 Rng.Interior.ColorIndex = 1
 Set RngL = Cells(42, 29).Resize(3, 3)
 RngL.Interior.ColorIndex = 0
' SoLan = InputBox("HAY NHAP SO LAN:", "GPE.COM -Sa_DQ", 1) '
 SoLan = 1
2 ' Ghi Mau Can To Vo Bien;'
 For bJ = 1 To SoLan
    Dim iCol As Integer, Yy As Integer
    Dim lRow As Long, xX As Long
    Yy = RngC.Column:           xX = RngC.Row
    iCol = 1 + Rng.Columns.Count:  lRow = 1 + Rng.Rows.Count
    
    ReDim MMau(lRow, iCol) As Integer
3 '
    For Each Clls In Rng
        Set Rng9 = Clls.Offset(-1, -1).Resize(3, 3)
        For Each Cll9 In Rng9
            If Cll9.Address <> Clls.Address And Cll9.Interior.ColorIndex = 1 Then _
                MauDen = 1 + MauDen
        Next Cll9
        MMau(Clls.Row - xX + 1, Clls.Column - Yy + 1) = MauDen
        
        MauDen = 0
    Next Clls
    For Each Clls In Rng
        Clls.Offset(-12) = MMau(Clls.Row - xX + 1, Clls.Column - Yy + 1)
        If KhTo Then _
            ColorCells Clls, MMau(Clls.Row - xX + 1, Clls.Column - Yy + 1)
        
    Next Clls
 Next bJ
 KhTo = Not KhTo
End Sub
' * * * * * * * * *
PHP:
Sub ColorCells(Rng1 As Range, Mau As Integer)

 Select Case Mau
 Case 1, 2
    Rng1.Interior.ColorIndex = 1
 Case 6
    Rng1.Interior.ColorIndex = 0
 Case 3, 4, 5, 7
    If Rng1.Interior.ColorIndex = 1 Then
        Rng1.Interior.ColorIndex = 0
    Else
        Rng1.Interior.ColorIndex = 1
    End If
 End Select 
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Trùi em, cảm ơn Bác rất nhiều ạ..
E Lấy Gì Để Đền Đáp??
E đang xem, Gần đúng rồi anh ạ.
Anh ơi anh có thể chú thích cho em thêm một số biến ko ạ, e ko hiểu lắm.. Cảm phiền anh ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng, e sẵn sàng ngay ạ.. -=.,,-=.,,-=.,,-=.,,

anh SA_DQ ơi, các ô ở viền ngoài luôn được set là 8 (tức là lúc nào cũng có viền đen bao quanh anh ạ.) cơ anh ạ. Để chiều em chat với anh 1 lát.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
anhtuan1066 đã viết:
Mời đại ca 1 chầu đi... hi.. hi..
ANH TUẤN
Xin cảm ơn, vì chắc AnhTuấn kiểm dùm macro rồi (!?!)
Vậy mời AnhTuấn có mặt trong buổi gặp luôn, nha!
(Thông báo AnhTuấn chiều nay mình có tiệc nhậu tại BH í nha!)
Bổ sung chú thích 1 số biến:

KhTo khai báo toàn cục, dùng để tiện trong việc kiểm tra cách thức macro trước & sau khi thực hiện công việc chính của mình;
Rng(i) - là các biến để chứa ô hay vùng dữ liệu; Đây là biến đối tượng nên phải dùng lệnh Set chúng mới nghe theo!
SoLan: tương lai sẽ tính chuyện vẽ các bước khác, từ đơn giản đến phức tạp, nên chuẩn bị sẵn; Hiện giờ ta gán nó = 1;
Biến này & biến kế tiếp (bJ) ta áp đặt thuộc loại Byte vì ta chỉ thử (hiện tại) < 255 lần mà!)
MauDen dùng để đếm các ô lân cận với ô khảo sát có bi nhiêu ô màu đen
iCol & Yy dùng chứa tọa độ cột của ô hay vùng ô; Vì số cột của ta chỉ 255 nên nó được ấn định thể loại Integer;
Tw (Tương) tự, các lRow & xX là tw đw với hàng
ReDim MMau(j,Z) là khai báo mảng để chứa số ô kề nó có màu đen.
Sau khi ta có mãng trị số này, ta mới tiến hành thay được; Nếu tính đến đâu thay đến đó thì hình thù mãng kết quả khác nhiều lắm!

Mình đã gởi địa chỉ mail của mình cho bạn rồi!

Sẵn đây, mình sửa xíu trong macro tô màu từng ô, như sau:
PHP:
Sub ColorCells(Rng1 As Range, Mau As Integer)
 Select Case Mau
 Case 1, 2
    Rng1.Interior.ColorIndex = 1
 Case 6
    Rng1.Interior.ColorIndex = 0
 Case 3, 4, 5, 7
    With Rng1.Interior
        If .ColorIndex = 1 Then
            .ColorIndex = 0
        Else
            .ColorIndex = 1
        End If
    End With
 End Select
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh ơi, sau mỗi một lần(của Solan) anh có thể cho xuất ra thành 1 file ảnh giùm em đc ko ạ. E muốn xem hình ảnh thay đổi của nó anh ạ.
Cảm ơn anh.
Phiền anh quá.
Như trong file mẫu này chẳng hạn ấy ạ;
 

File đính kèm

Upvote 0
Anh ơi, sau mỗi Solan anh cho xuất ra thành 1 file ảnh giùm đc ko ạ. E muốn xem hình ảnh thay đổi của nó anh ạ. Cảm ơn anh. Phiền anh quá.
Xuất trên excel, nha; Và mình hướng dẫn, bạn sẽ làm được; Bằng không thì . . . phải bữa nhậu, nha!
Trên câu lệnh ' Sub Color9 ' bạn khai báo 1 Const toàn cục, như sau:]
Mã:
  Const Lan As Integer = 10  [code]

trước khi hết Sub bạn lại thêm dòng sau:
 [code][COLOR="Blue"]'
. . . . . ' KhTo = Not KhTo[/COLOR]
 Range("B15:n27").Copy Destination:=Range("AA" & Lan * (SoLan - 1) + 1)
[B]End Sub [/B]
 
Upvote 0
Tác phẩm của mình sau cùng trong topic này(?)

Xin các bạn xem trong file đính kèm!
Quynh2.jpg
 

File đính kèm

Upvote 0
Anh Sa_DQ thân mến, (File name: A5.xls)

Anh Sa_DQ thân mến, Lần trước đã nhờ a đếm các ô màu ĐEN xung quanh ô khảo sát để tô màu theo số lượng tương ứng, Chương trình đã chạy tốt như ở dưới, xin 1 lần nữa chân thành cảm ơn anh. Giờ em muốn phát triển hơn, e đã cố gắng thử làm nhưng rối tung rối mù, ko sao xong được, Vậy, lại phiền anh giúp cho e lần này, e rất cảm ơn. E rất muốn cảm ơn a, mời anh đi nhậu, nhưng anh em ở xa nhau quá, e ko biết phải làm cách nào??? A có thể gợi ý để e cảm ơn anh được ko ah? Hậu tạ í mà anh.
 

File đính kèm

Upvote 0
Anh Sa_DQ thân mến, Lần trước đã nhờ a & Chương trình đã chạy tốt như ở dưới, xin 1 lần nữa chân thành cảm ơn anh. Giờ em muốn phát triển hơn, e đã cố gắng thử làm nhưng rối tung rối mù, ko sao xong được, Vậy, lại phiền anh giúp cho e lần này, e rất cảm ơn.

Với loại bàn toán như thế này, hiểu đúng đề bài là điều tiên quyết không thể lơ tơ mơ!
Thứ nhất: Bạn khẳng định giúp lưới hình vuông 50x50 ô, phải không?
(Sao bạn vẽ chưa đủ, làm mình phân vân phải hỏi lại cho rõ! Thông cảm đó là tật cổ hủ í mà!)
Nếu vậy sẽ có 250 ô cần khảo sát?
Trong đó tạo ngẩu nhiên ban đầu 10%=>25 ô màu trắng (Vàng) & số còn lài màu đen (xanh)
Chúng ta tạm dừng tại đây, chờ bạn khẵng định giúp cho!

http://webketoan.vn/forum/showthread.php?t=43941#Scene 1
 
Upvote 0
Với loại bàn toán như thế này, hiểu đúng đề bài là điều tiên quyết không thể lơ tơ mơ!
Thứ nhất: Bạn khẳng định giúp lưới hình vuông 50x50 ô, phải không?
(Sao bạn vẽ chưa đủ, làm mình phân vân phải hỏi lại cho rõ! Thông cảm đó là tật cổ hủ í mà!)
Nếu vậy sẽ có 250 ô cần khảo sát?
Trong đó tạo ngẩu nhiên ban đầu 10%=>25 ô màu trắng (Vàng) & số còn lài màu đen (xanh)
Chúng ta tạm dừng tại đây, chờ bạn khẵng định giúp cho!

http://webketoan.vn/forum/showthread.php?t=43941#Scene 1

Rất cảm ơn a đã hồi âm, e xin khẳng định lại là lưới hình vuông 50x50. Tuy nhien trên hình e vẽ là 55x55. E nghĩ số lẻ thì tốt hơn. Anh xóa bớt bớt đi cho em thành 50x50 nhé.
Còn phần dưới chính xác rồi anh ạ.
Cảm ơn anh nhiều ạ.
Chúc anh vui vẻ.
Mong tin anh.

Ah, nếu anh online YM thì Buzz e phát cho tiện nói chuyện nhá, nick YM e là Thienvnu
Thanks anh.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Đang dỡ dang, nhưng tác gia quá sốt ruột hay sao í!

Mình đành đưa lên phần đã thực thi; Đây là phần nhiều nhất (chiếm hơn 80% số ô) & cũng là phần dễ nhất. Mình đưa lên để tác gia hay ai đó thấy chiều hướng đúng thì tiếp sức. Ngõ hầu quá trình hoàn tất được nhanh chóng hơn!

Riêng tác gia: Rảnh rỗi cho chạy macro vài chục lần xem sao(!?)

To MOD/SMOD: Mình nghĩ: topic này chưa đúng chỗ. Mình đề nghị dời sang BOX khác, như có liên quan đến VBA thì thích hợp hơn! Xin cảm ơn MOD/SMOD

PHP:
Option Explicit:            Option Base 1
Sub ToMau()
 ' Fím Tắt: {CTRL} + {SHIFT} + T'
ReDim MSo(2500) As Byte
Dim Rng As Range, Rng9 As Range, Clls As Range
Dim iJ As Integer, Xx As Integer
Dim yY As Long, bDo As Byte

For Each Rng In Range("B2:AY51")
   iJ = iJ + 1
   yY = Rng.Row:           Xx = Rng.Column
   If (yY = 2 And (Xx = 2 Or Xx = 51)) Or _
      (yY = 51 And (Xx = 2 Or Xx = 51)) Then
      'Chua Viet 4 O Goc'
   ElseIf yY = 2 Then
      'Chua Viet Hang Tren Cung'
   ElseIf Xx = 2 Then
      'Chua Viet Thuoc Cot 'B''
   ElseIf Xx = 51 Then
      'Chua Viet Thuoc Cot Cuoi'
   ElseIf yY = 51 Then
      'Chua Viet Hang Cuoi'
   Else
      Set Rng9 = Rng.Offset(-1, -1).Resize(3, 3)
      For Each Clls In Rng9
         If Clls.Interior.ColorIndex = 3 Then bDo = 1 + bDo
      Next Clls
      MSo(iJ) = bDo Mod 2:             bDo = 0
   End If
      
Next Rng
iJ = 0
For Each Rng In Range("B2:AY51")
   iJ = 1 + iJ
   Rng.Interior.ColorIndex = IIf(MSo(iJ) = 1, 3, 0)
Next Rng
End Sub
 

File đính kèm

Upvote 0
Anh SA_DQ thân,@$@!^%
E xin comment tý chút như sau:

1. Hàm tạo ra 10% ô đỏ ban đầu.
- E đã chạy nhiều lần, nhưng mà có vẻ như đoạn đầu của lưới tạo đc nhiều ô đỏ quá, nên đoạn sau thưa, rất ít ô đỏ đc tạo vì đủ 10% rồi.
- Anh chú thích cho em hiểu hàm này nhé, e ko hiểu lắm.

2. E đưa thêm biến Số Lần vào và tạo nút RUN trên SHEET để chạy cho tiện, nhưng khi đó lại báo lỗi Run-time '9'. Anh sửa giúp cho.

3. Trong lúc viết, anh vui lòng chú thích để em có thể hiểu ý anh làm.

Cảm ơn anh và chúc anh luôn vui vẻ. /-*+/
 

File đính kèm

Upvote 0
Anh SA_DQ thân,@$@!^%
E xin comment tý chút như sau:
1. Hàm tạo ra 10% ô đỏ ban đầu.
- E đã chạy nhiều lần, nhưng mà có vẻ như đoạn đầu của lưới tạo đc nhiều ô đỏ quá, nên đoạn sau thưa, rất ít ô đỏ đc tạo vì đủ 10% rồi.
- Anh chú thích cho em hiểu hàm này nhé, e ko hiểu lắm.
. . .
Cảm ơn anh và chúc anh luôn vui vẻ. /-*+/
Tạo ra 10% ô đỏ ngẫu nhiên là do macro này thực hiện:

PHP:
Sub Auto_Open()
 Dim StrC As String, ChuSo As String
 Dim SoNgau As Byte, bZ As Byte, bW As Byte
 'Tao 10% Cells Ngau Nhien'
3 Sheets("S2").Select
 Range(Cells(2, 2), Cells(51, 51)).Clear
5 For bZ = 1 To 50
   SoNgau = 0
7   For bW = 0 To 4
      Randomize:           SoNgau = 1 + 10 * bW - SoNgau + Int(10 * Rnd)
9      Cells(bZ + 1, SoNgau + 2).Interior.ColorIndex = 3
   Next bW
11 Next bZ
End Sub
1*/ Macro này sẽ thì hành mỗi lần bạn mở workBook
2*/ Đúng là phía trái nhiều ô đỏ được chọn hơn vì tác giả macro thay vì 10 ô liên tục trong 1 hàng thì chọn lấy 1 ô làm ô đỏ; Thì ở đây chỉ 10 ô đầu tiên trong hàng là đúng như vậy;
Ô đỏ thứ 2 trong hàng lại lấy khoảng chọn là từ vị trí ô đỏ thứ nhất +1 cho tới 20;
(VDụ ô đỏ đầu tiên trong hàng ngẫu nhiên được chọn là 3; thì ô đỏ thứ 2 sẽ là ngẫu nhiên trong khoảng 4-20;
Điều này được thể hiện trong câu lệnh thứ hai của dòng lệnh 8;
Bạn thử tạm vô hiệu hóa biến SoNgau ở vế phải xem thừ ra sao (?!)
3*/ Chú thích các dòng lệnh:
D4: Xóa vùng để tạo bãi đáp cho các dòng lệnh dưới;
D7..D11: Vòng lặp tạo số ngẫu cho 50 hàng (Mỗi hàng 5 số)
D8..D10 Vòng lặp tạo 5 số ngẫu trong từng hàng
D8A: Trước khi dùng hàm Rnd() thì phải khởi động bộ tạo số ngẫu
D8B Tạo Số ngẫu trong phạm vi cho phép;
D9: Tô màu đỏ cho ô tương ứng (2 con số 2 là chuyển hệ quy chiếu)

4*/ Cần nói thêm, đây là cách đơn giản để tạo số ngẫu không trùng nhau;
Cũng còn nhiều cách khác với số bậc tự do cao hơn, nhưng phức tạp hơn!
(Được cái này, mật cái kia í mà!)

Chúc vui!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Tạo ra 10% ô đỏ ngẫu nhiên là do macro này thực hiện:

1*/ Macro này sẽ thì hành mỗi lần bạn mở workBook
2*/ Đúng là phía trái nhiều ô đỏ được chọn hơn vì tác giả macro thay vì 10 ô liên tục trong 1 hàng thì chọn lấy 1 ô làm ô đỏ; Thì ở đây chỉ 10 ô đầu tiên trong hàng là đúng như vậy;
Ô đỏ thứ 2 trong hàng lại lấy khoảng chọn là từ vị trí ô đỏ thứ nhất +1 cho tới 20;
(VDụ ô đỏ đầu tiên trong hàng ngẫu nhiên được chọn là 3; thì ô đỏ thứ 2 sẽ là ngẫu nhiên trong khoảng 4-20;
Điều này được thể hiện trong câu lệnh thứ hai của dòng lệnh 8;
Bạn thử tạm vô hiệu hóa biến SoNgau ở vế phải xem thừ ra sao (?!)
3*/ Chú thích các dòng lệnh:
D4: Xóa vùng để tạo bãi đáp cho các dòng lệnh dưới;
D7..D11: Vòng lặp tạo số ngẫu cho 50 hàng (Mỗi hàng 5 số)
D8..D10 Vòng lặp tạo 5 số ngẫu trong từng hàng
D8A: Trước khi dùng hàm Rnd() thì phải khởi động bộ tạo số ngẫu
D8B Tạo Số ngẫu trong phạm vi cho phép;
D9: Tô màu đỏ cho ô tương ứng (2 con số 2 là chuyển hệ quy chiếu)

4*/ Cần nói thêm, đây là cách đơn giản để tạo số ngẫu không trùng nhau;
Cũng còn nhiều cách khác với số bậc tự do cao hơn, nhưng phức tạp hơn!
(Được cái này, mật cái kia í mà!)

Chúc vui!
PHP:
      Randomize:           SoNgau = 1 + 10 * bW - SoNgau + Int(10 * Rnd)
Cảm ơn Bác HYEN17, dưng mà quả thật là iem vữn ko hiểu đoạn này??
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là bài điển hình về Resize(i, j) & Union()

Bạn chép tất thẩy ba macro này thay cho các macro cũ, nha!
PHP:
Option Explicit:                 Option Base 1
Dim Rng9 As Range:               Dim bXh As Byte, bDem As Byte

Sub ToMau()
 ReDim MSo(2500) As Byte:               Dim yY As Long
2 Dim Rng As Range, Clls As Range
 Dim iJ As Integer, Xx As Integer

4 For Each Rng In Range("B2:AY51")
   iJ = iJ + 1
6   yY = Rng.Row:           Xx = Rng.Column
   If yY = 2 And Xx = 2 Then           'O Tren Trai Nhat'
8      Set Rng9 = Union(Rng.Resize(2, 2), Cells(yY, 51).Resize(2, 1), _
         Cells(51, 2).Resize(1, 2), Cells(51, 51))
10      Color9 Rng9:                     Set Rng9 = Nothing
      MSo(iJ) = bXh Mod 2:             bXh = 0
12   ElseIf yY = 2 And Xx = 51 Then      'O Tren Phai Nhat'
      Set Rng9 = Union(Cells(2, 2).Resize(2, 1), Cells(2, 50).Resize(2, 2), _
         Cells(51, 2), Cells(51, 50).Resize(1, 2))
14         Color9 Rng9:                     Set Rng9 = Nothing
         MSo(iJ) = bXh Mod 2:             bXh = 0
16   ElseIf yY = 51 And Xx = 2 Then      'O Duoi Trai Nhat'
      Set Rng9 = Union(Cells(2, 2).Resize(1, 2), Cells(2, 51), _
         Cells(50, 2).Resize(2, 2), Cells(50, 51).Resize(2, 1))
18      Color9 Rng9:                     Set Rng9 = Nothing
      MSo(iJ) = bXh Mod 2:             bXh = 0
20   ElseIf yY = 51 And Xx = 51 Then     'O Duoi Phai Nhat'
      Set Rng9 = Union(Cells(2, 2), Cells(2, 50).Resize(1, 2), _
         Cells(50, 2).Resize(2, 1), Cells(50, 50).Resize(2, 2))
22      Color9 Rng9:                     Set Rng9 = Nothing
      MSo(iJ) = bXh Mod 2:             bXh = 0
24   ElseIf yY = 2 Then                  'Cac O Con Lai Cua Cot 'B''
      Color9 Union(Rng.Offset(, -1).Resize(2, 3), Rng.Offset(49, -1).Resize(1, 3))
26      MSo(iJ) = bXh Mod 2:             bXh = 0
   ElseIf Xx = 2 Then                  'Cac O Con Lai Cua Dong '2''
28      Color9 Union(Rng.Offset(-1).Resize(3, 2), Rng.Offset(-1, 49).Resize(3, 1))
      MSo(iJ) = bXh Mod 2:             bXh = 0
30   ElseIf Xx = 51 Then                 'Cac O Con Lai Cua Cot Cuoi'
      Color9 Union(Rng.Offset(-1, -49).Resize(3, 1), Rng.Offset(-1, -1).Resize(3, 2))
32      MSo(iJ) = bXh Mod 2:             bXh = 0
   ElseIf yY = 51 Then                 'Cac O Con Lai Cua Hang Cuoi'
34      Color9 Union(Rng.Offset(-49, -1).Resize(1, 3), Rng.Offset(-1, -1).Resize(2, 3))
      MSo(iJ) = bXh Mod 2:             bXh = 0
36   Else                                '2.500-198 O Con Lai'
      Color9 Rng.Offset(-1, -1).Resize(3, 3)
38      MSo(iJ) = bXh Mod 2:             bXh = 0
   End If
40 Next Rng

 iJ = 0
42 For Each Rng In Range("B2:AY51")
   iJ = 1 + iJ
44   Rng.Interior.ColorIndex = IIf(MSo(iJ) = 1, 5, 0)          '3'
 Next Rng
46 bDem = bDem + 1:                       [A1].Select
 [A1] = bDem
End Sub
Mã:
[B]Sub Color9(Rng9 As Range)[/B]
 Dim Clls As Range
 For Each Clls In Rng9
   If Clls.Interior.ColorIndex = 5 Then bXh = 1 + bXh          '3'
 Next Clls
[B]End Sub[/B]

PHP:
Sub Auto_Open()
 Dim StrC As String, ChuSo As String
 Dim SoNgau As Byte, bZ As Byte, bW As Byte
 'Tao 10% Cells Ngau Nhien'
 Sheets("S2").Select: [A1] = 0
 Range(Cells(2, 2), Cells(51, 51)).Clear
 For bZ = 1 To 50
   SoNgau = 0:                      bDem = 0
   For bW = 0 To 4
      Randomize:           SoNgau = 10 * bW + Int(10 * Rnd)   '1- SoNgau'
      Cells(bZ + 1, SoNgau + 2).Interior.ColorIndex = 5        '3'
   Next bW
 Next bZ
End Sub

Nếu cần giải thích dòng lệnh nào thì cứ réo, nha!

Chúc Vui Vẽ!!!
 
Upvote 0
Bạn chép tất thẩy ba macro này thay cho các macro cũ, nha!
PHP:
Option Explicit:                 Option Base 1
Dim Rng9 As Range:               Dim bXh As Byte, bDem As Byte

Sub ToMau()
 ReDim MSo(2500) As Byte:               Dim yY As Long
2 Dim Rng As Range, Clls As Range
 Dim iJ As Integer, Xx As Integer

4 For Each Rng In Range("B2:AY51")
   iJ = iJ + 1
6   yY = Rng.Row:           Xx = Rng.Column
   If yY = 2 And Xx = 2 Then           'O Tren Trai Nhat'
8      Set Rng9 = Union(Rng.Resize(2, 2), Cells(yY, 51).Resize(2, 1), _
         Cells(51, 2).Resize(1, 2), Cells(51, 51))
10      Color9 Rng9:                     Set Rng9 = Nothing
      MSo(iJ) = bXh Mod 2:             bXh = 0
12   ElseIf yY = 2 And Xx = 51 Then      'O Tren Phai Nhat'
      Set Rng9 = Union(Cells(2, 2).Resize(2, 1), Cells(2, 50).Resize(2, 2), _
         Cells(51, 2), Cells(51, 50).Resize(1, 2))
14         Color9 Rng9:                     Set Rng9 = Nothing
         MSo(iJ) = bXh Mod 2:             bXh = 0
16   ElseIf yY = 51 And Xx = 2 Then      'O Duoi Trai Nhat'
      Set Rng9 = Union(Cells(2, 2).Resize(1, 2), Cells(2, 51), _
         Cells(50, 2).Resize(2, 2), Cells(50, 51).Resize(2, 1))
18      Color9 Rng9:                     Set Rng9 = Nothing
      MSo(iJ) = bXh Mod 2:             bXh = 0
20   ElseIf yY = 51 And Xx = 51 Then     'O Duoi Phai Nhat'
      Set Rng9 = Union(Cells(2, 2), Cells(2, 50).Resize(1, 2), _
         Cells(50, 2).Resize(2, 1), Cells(50, 50).Resize(2, 2))
22      Color9 Rng9:                     Set Rng9 = Nothing
      MSo(iJ) = bXh Mod 2:             bXh = 0
24   ElseIf yY = 2 Then                  'Cac O Con Lai Cua Cot 'B''
      Color9 Union(Rng.Offset(, -1).Resize(2, 3), Rng.Offset(49, -1).Resize(1, 3))
26      MSo(iJ) = bXh Mod 2:             bXh = 0
   ElseIf Xx = 2 Then                  'Cac O Con Lai Cua Dong '2''
28      Color9 Union(Rng.Offset(-1).Resize(3, 2), Rng.Offset(-1, 49).Resize(3, 1))
      MSo(iJ) = bXh Mod 2:             bXh = 0
30   ElseIf Xx = 51 Then                 'Cac O Con Lai Cua Cot Cuoi'
      Color9 Union(Rng.Offset(-1, -49).Resize(3, 1), Rng.Offset(-1, -1).Resize(3, 2))
32      MSo(iJ) = bXh Mod 2:             bXh = 0
   ElseIf yY = 51 Then                 'Cac O Con Lai Cua Hang Cuoi'
34      Color9 Union(Rng.Offset(-49, -1).Resize(1, 3), Rng.Offset(-1, -1).Resize(2, 3))
      MSo(iJ) = bXh Mod 2:             bXh = 0
36   Else                                '2.500-198 O Con Lai'
      Color9 Rng.Offset(-1, -1).Resize(3, 3)
38      MSo(iJ) = bXh Mod 2:             bXh = 0
   End If
40 Next Rng

 iJ = 0
42 For Each Rng In Range("B2:AY51")
   iJ = 1 + iJ
44   Rng.Interior.ColorIndex = IIf(MSo(iJ) = 1, 5, 0)          '3'
 Next Rng
46 bDem = bDem + 1:                       [A1].Select
 [A1] = bDem
End Sub
Mã:
[B]Sub Color9(Rng9 As Range)[/B]
 Dim Clls As Range
 For Each Clls In Rng9
   If Clls.Interior.ColorIndex = 5 Then bXh = 1 + bXh          '3'
 Next Clls
[B]End Sub[/B]
PHP:
Sub Auto_Open()
 Dim StrC As String, ChuSo As String
 Dim SoNgau As Byte, bZ As Byte, bW As Byte
 'Tao 10% Cells Ngau Nhien'
 Sheets("S2").Select: [A1] = 0
 Range(Cells(2, 2), Cells(51, 51)).Clear
 For bZ = 1 To 50
   SoNgau = 0:                      bDem = 0
   For bW = 0 To 4
      Randomize:           SoNgau = 10 * bW + Int(10 * Rnd)   '1- SoNgau'
      Cells(bZ + 1, SoNgau + 2).Interior.ColorIndex = 5        '3'
   Next bW
 Next bZ
End Sub

Nếu cần giải thích dòng lệnh nào thì cứ réo, nha!

Chúc Vui Vẽ!!!

UI UI, E CHECK RỒI. NGON QUÁ RÙI ANH ƠI..ĐÚNG LÀ CAO THỦ. THANKSSSS ANH NHIỀU LẮM. LẤY GÌ ĐỂ CẢM TẠ ANH BI GIỜ.. E RẤT MUỐN MỜI ANH 1 BỮA RA TRÒ ĐẤY, VÌ KHẢ NĂNG CÒN NHỜ VẢ ANH NỮA MÀ, HIHI.. HAY LÀ, CHO E ... SỐ TÀI KHOẢN CỦA ANH? (A ĐỪNG GIẬN NHA)

E MUỐN THAY HÀM UNION BẰNG CÁC HÀM LOGIC CƠ BẢN KHÁC NHƯ AND, OR, NAND(NOT AND), NOR (NOT OR)... THÌ LÀM SAO HẢ ANH?
 
Lần chỉnh sửa cuối:
Upvote 0
UI UI, E CHECK RỒI. NGON QUÁ RÙI ANH ƠI..ĐÚNG LÀ CAO THỦ. THANKSSSS ANH NHIỀU LẮM. LẤY GÌ ĐỂ CẢM TẠ ANH BI GIỜ.. E RẤT MUỐN MỜI ANH 1 BỮA RA TRÒ ĐẤY, VÌ KHẢ NĂNG CÒN NHỜ VẢ ANH NỮA MÀ, HIHI.. HAY LÀ, CHO E ... SỐ TÀI KHOẢN CỦA ANH? (A ĐỪNG GIẬN NHA)

E MUỐN THAY HÀM UNION BẰNG CÁC HÀM LOGIC CƠ BẢN KHÁC NHƯ AND, OR, NAND(NOT AND), NOR (NOT OR)... THÌ LÀM SAO HẢ ANH?

UNION() ở trong excel là 1 phương thức dùng để nối kết các ô hay vùng ô trên 1 sheet;
(Returns the union of two or more ranges.)
Ngược lại, là người tự học nên các toán tử NOR & NAND mình hiếm & chưa xài bao giớ;
Có lẻ chúng giành cho những chuyên tin học hay sao í chứ!
 
Upvote 0
Web KT

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

Back
Top Bottom