【ExcelVBA】폭속 컬러링의 전술 메모

소개



엑셀 VBA로 예실 관리표 왠지 만들 때의 대량 셀의 칼라링은 시간 걸립니다. 그것을 폭속화합니다.

출처



SPECIAL THANKS



코멘트에서 제안 사항을 받았습니다.
코멘트가 활발해지는 것이 좋다! 감사합니다.

제안 ① : ForEach가 아니라 중첩이 깊어져도 이중 루프하는 것이 좋다
    'nukie_53 さん
    Dim rcOffset(0 To 1) As Long
    rcOffset(0) = chunk.Row - 1
    rcOffset(1) = chunk.Column - 1

    Dim c As Long, r As Long
    For c = 1 To chunk.Columns.Count
        For r = 1 To chunk.Rows.Count
            '★色を塗る条件
            If InStr(1, CStr(data(r, c)), instrText) > 0 Then 'CStr() = for error value

                y = rcOffset(0) + r
                x = rcOffset(1) + c

                'セルアドレスの位置情報をR1C1参照として組み立て
                addr = "R" & y & "C" & x
                '...

            End If
        Next r
    Next c

제안 ② : 255자를 넘는 판정에서는 Join보다 Len로 숫자에 취해 판정하는 것이 좋다
            'jinoji さん
            Dim addrLen, sumLen
            addrLen = Len(addr)
            'Rangeオブジェクトに指定できるのは255文字まで
            If sumLen + addrLen > 255 Then
                '蓄積した位置情報をA1形式に変換してまとめてエフェクトする
                chunk.Parent.Range(ConvertRC2A(Join(q.ret, ","))).Interior.ColorIndex = color
                '蓄積した位置情報を破棄
                q.Reset
                sumLen = 0
            End If

            'セルアドレスの位置情報を蓄積
            q.Push addr
            sumLen = sumLen + 1 + addrLen

1. 색칠하는 매스에 값이 있는 경우



ChangeColor
어떤 값을 찾아 대량으로 색칠하는 표준적인 경우


2. 색칠할 매스에 값이 없고 다른 시트에 db로 당겨온 색칠 목록만 있는 경우



ChangeColor2
업무 프로그램이라면 의외로 이런 패턴이 있는 거지~

실행 전

색칠하기 목록


실행 후


근원 참조 소스



여기의 Test6입니다만, 속도 검증의 그래프등은 여기를 봐 주세요.

거기의 관리인이, 「가독성은 나쁘다.」라고 하는 것을 리팩토링 했습니다. 독해에 의외로 시간이 걸렸지만 상당히 재미있었다. 스크랩 앤 빌드의 제로베이스 쓰기 때문에 소스는 내 것이라고 생각했습니다


처리 포인트



해당 셀의 주소를 R1C1 참조 형식으로 써 저장해, 그것을 정리해 Application.ConvertFormula 메소드로 A1 형식으로 변환해 셀을 칠한다.


주의점



1. 단일 셀의 경우에는 오류가 있습니다. 그러나, 단일 셀을 지정하는 것은 드물지 않다(직접 칠해 줘!
2. Application.ConvertFormula 메소드로 지정할 수 있는 것은 255문자까지와 같기 때문에, 255문자를 넘는 직전에 변환과 색을 칠하는 처리를 실시한다.
3. ★ 부분은 색을 바르는 트리거이므로 필요에 따라 개조하십시오.

좋은 웹페이지 즐겨찾기