Excel: tự động tạo phạm vi dựa trên nội dung ô riêng lẻ


0

Tôi chưa nhận được macro, đó là lý do tại sao tôi hỏi ở đây. Tôi có một bảng tính mà tôi muốn đặt độ dốc thành một tập hợp các ô chéo, nhưng sẽ rất tốn thời gian khi bạn có hơn 60 cột. Tôi có một mẫu có các ô được đánh số theo đường chéo. Đây là một ví dụ nhỏ về mẫu:

thí dụ

Điều này hiện đang diễn ra đến 60 cả phải và xuống. Tôi có thể điền các số dễ dàng nhưng điều kiện định dạng chúng theo đường chéo sẽ mất nhiều thời gian. Tôi muốn biết liệu có cách nào để chỉ chọn một khu vực và nói chọn tất cả các ô trong khu vực này có cùng số đó và tạo một phạm vi được xác định có tên là số đó không và nếu phạm vi đó đã tồn tại thì hãy thêm ô đó vào đó. phạm vi.

Ví dụ sẽ lấy tất cả các ô có chứa "1" trong phạm vi "chính", sau đó tạo phạm vi "_1" và thêm các ô vào đó. sau đó lặp lại cho đến khi tất cả 60 phạm vi hoàn thành.

Sau đó, tôi cũng sẽ cần một cách để đưa các phạm vi "_1" đến "_60" và dễ dàng thêm định dạng có điều kiện cho chúng cho 3 gradient màu để làm nổi bật các số lớn hơn trong mỗi phạm vi khi tôi xóa các số và thay thế bằng một công thức. Tôi có thể phải thực hiện phần này một cách thủ công, nhưng sẽ dễ dàng hơn rất nhiều nếu đã có phạm vi được xác định cho mỗi đường chéo, vì vậy tôi không phải đi và chọn khu vực tìm ô chứa "5", xác định phạm vi "_5", sau đó định dạng có điều kiện cho mỗi số 1-60 (hiện chỉ có 60 nhưng cuối cùng có thể lớn hơn).

Đây là một ví dụ về một dòng với độ dốc trông như thế nào. Sẽ có độ dốc trên mỗi đường chéo. Cuối cùng có thể là 3 màu khác nhau để dễ dàng phân biệt giữa mỗi đường chéo để bạn có thể biết trong nháy mắt những gì bạn đang tìm kiếm. Ví dụ về Gradient:

Ví dụ về độ dốc

Tôi có thể thực hiện chuyển màu bằng tay sau khi phạm vi được thực hiện.

Tôi biết điều này rất có thể là không thể nhưng tôi muốn thấy vì tôi có khá nhiều việc phải làm và không thích dành hàng giờ chỉ để định dạng hàng trăm ô theo cách thủ công.

Một tổng quan đơn giản về những gì tôi cần là:

for all cells inside range "Main"
[  
    read cell

    if range "-[cell]" exists  
    [  
        add cell to range  
    ]  
    else  
    [  
        define range named "-[cell]"  
        add cell to range  
    ]  
]

Khi tất cả các ô nằm trong một phạm vi, tôi muốn một cái gì đó làm gradient cho tôi. Một cái gì đó như "cho mỗi phạm vi -1 đến -60, làm 3 định dạng có điều kiện màu".

Tôi biết sẽ có nhiều thứ hơn thế nhưng đó là tất cả những gì tôi cần.

Hãy cho tôi biết nếu điều này là không thể. Có lẽ là vậy nhưng không có hại gì khi hỏi.

Câu trả lời:


0

Điều đó mất một lúc, nhưng tôi nghĩ tôi có thể giúp bạn. Tôi đã viết ba chương trình con có thể đặt tên cho các đường chéo phụ. Đầu tiên là select_diagonalphụ

Sub select_diagonal(matriz As Range, m As Integer, name As String)

Dim n As Integer, i As Integer, first As Boolean
Dim diag As Range

n = matriz.Rows.Count
'm must be at most 2n-1 (number of diagonals)
first = True

If m <= n Then
    For i = 0 To m - 1 Step 1
        If first Then
            Set diag = matriz.Item(1).Offset(i, m - i - 1)
            first = False
        Else
            Set diag = Union(diag, matriz.Item(1).Offset(i, m - i - 1))
        End If
    Next i

Else
    For i = (m Mod n) To m - (m Mod n) - 1 Step 1
        If first Then
            Set diag = matriz.Item(1).Offset(i, m - i - 1)
            first = False
        Else
            Set diag = Union(diag, matriz.Item(1).Offset(i, m - i - 1))
        End If
    Next i
End If

ActiveWorkbook.Names.Add name:=name, RefersTo:=diag

End Sub

Nó nhận dưới dạng tham số một ma trận vuông dưới dạng một phạm vi (phạm vi 60x60 của bạn), một số nguyên m (phải có nhiều nhất là 2 * n-1, số lượng đường chéo của ma trận) và một chuỗi nameđể đặt tên cho đường chéo phụ m-th của ma trận.

Ngoài ra còn có một name_rangephụ, nhận một ma trận vuông dưới dạng một phạm vi và lặp lại mọi đường chéo thứ cấp của ma trận và cung cấp cho nó một phạm vi được đặt tên (theo hướng dẫn của bạn, đường chéo phụ thứ k được đặt tên là "_k")

Sub name_range(matriz As Range)

    Dim n As Integer, ii As Integer
    n = matriz.Rows.Count

    For ii = 1 To 2 * n - 1
        Call select_diagonal(matriz, ii, "_" & CStr(ii))
    Next ii

End Sub

Cuối cùng, chương trình con bạn phải chạy chỉ đơn giản là phụ chính. Chỉ cần chọn toàn bộ phạm vi của bạn và chạy chương trình con này, để gọi hai chương trình khác sẽ thực hiện công việc cho bạn.

Sub main()

    Dim matriz As Range

    Set matriz = Selection

    Call name_range(matriz)

End Sub

Sau đó, chỉ cần áp dụng định dạng có điều kiện cho mọi phạm vi. Như bạn vừa nói, bạn có thể áp dụng độ dốc theo cách thủ công sau khi phạm vi được thực hiện. Tuy nhiên, đề nghị của tôi là áp dụng nó thông qua thủ tục VBA. Chỉ cần xác định giới hạn màu và, với các phạm vi được đặt tên đã được xác định, áp dụng nó cho mọi phạm vi được đặt tên.

Tái bút: Tôi không thể tìm ra cách để làm điều đó mà không có VBA. Vấn đề lớn nhất ở đây là xác định các phạm vi được đặt tên cho đường chéo thứ cấp và sử dụng tỷ lệ màu với phạm vi động hoặc với một số tiêu chí. Hi vọng điêu nay co ich.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.