다른 셀 값을 기반으로하는 형식 범위


0

다음 Excel 스프레드 시트를 고려하십시오.

여기에 이미지 설명을 입력하십시오

셀 A4 : B7의 값에 따라 row1 : 2의 셀을 포맷하고 싶습니다. 값을 변경하면 row1 : 2의 셀이 병합되고 경계가 채워지며 채워지고 텍스트에 따라 색상이 지정되어야합니다.

서식 셀을 다음과 같이 변경하면

여기에 이미지 설명을 입력하십시오


병합 부분 이외의 모든 작업을 수행 할 수 있습니다. 조건부 서식은 채우기 색상과 테두리를 처리 할 수 ​​있습니다. 수식은 텍스트 채우기를 처리 할 수 ​​있습니다. 그러나 병합 및 중심을 얻을 수는 없습니다. 수식을 사용하여 텍스트를 중앙 셀에 넣으면 닫을 수 있지만 그게 전부입니다. 모든 것을 얻는 유일한 방법은 VBA입니다.
엔지니어 토스트 :

의견 주셔서 감사합니다. 나는 누군가가 VBA를 시작할 수 있기를 바랍니다! 나는 그것에 대해 경험이 있지만 어디서부터 시작 해야할지조차 모른다.
Dlockhart104

답변:


0

VBA 솔루션은 다음과 같습니다. Format테이블 의 배경색과 글꼴 색을 복사 하므로 흰색 텍스트를 원하면 해당 테이블에 흰색 텍스트를 사용하십시오. 테두리 설정 (39 및 47 행)과 사용할 형식 조건 (27-30 행)을 조정할 수 있습니다. 예를 들어 실제 데이터와 거의 관계가없는 순수한 모형 인 경우에 특히 그렇습니다.

Option Explicit
Sub MadeFormattedHeadings()

    'Declarations
    Dim ws As Worksheet
    Dim headerRange As Range
    Dim rangeSize As Integer
    Dim rangeStart As Integer
    Dim r As Long
    Dim c As Integer

    'Choose the worksheet to use
    '(Pick one of these two methods)
    Set ws = Worksheets("Sheet1")   'This uses the name on the tab seen in Excel
    Set ws = Sheet1                 'This uses the code name seen in VBA

    With ws

        'Remove previous headers
        If UCase(.Range("A1").Value) = UCase(.Range("A5").Value) Then
            .Rows("1:2").Delete
            .Rows("1:2").Insert
        End If

        'Add new headers
        rangeStart = 1
        For r = 5 To 8  '<<<< There are other methods to iterate. This is just one option.
            'Save the settings
            Set headerRange = .Range("A" & r)
            rangeSize = .Range("B" & r).Value

            'Format the first row
            With .Range(.Cells(1, rangeStart), .Cells(1, rangeStart + rangeSize - 1))
                .Merge
                .Value = headerRange.Value
                .HorizontalAlignment = xlCenter
                .Font.Color = headerRange.Font.Color
                .Interior.Color = headerRange.Interior.Color
                .BorderAround xlSolid, xlThin
            End With

            'Format the second row
            With .Range(.Cells(2, rangeStart), .Cells(2, rangeStart + rangeSize - 1))
                .Merge
                .Value = rangeSize
                .HorizontalAlignment = xlCenter
                .BorderAround xlSolid, xlThin
            End With

            'Iterate to the next section
            rangeStart = rangeStart + rangeSize
        Next

    End With

End Sub

그것은 내가 필요한 것을 완벽하게 시작합니다. 너무 감사합니다! 물론 내가 당신을 위해 이것을 투표 할 수 있기를 바랍니다. 당신은 멋진 엔지니어 토스트입니다!
Dlockhart104

도움이되어서 다행입니다. upvote / downvote 버튼 근처에있는 확인 표시를 클릭하여 답변으로 표시 할 수 있습니다.
엔지니어 토스트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.