【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. ★ 부분은 색을 바르는 트리거이므로 필요에 따라 개조하십시오.
Reference
이 문제에 관하여(【ExcelVBA】폭속 컬러링의 전술 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YoshitakaOkada/items/25c73d1eb1a87abfa25c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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. ★ 부분은 색을 바르는 트리거이므로 필요에 따라 개조하십시오.
Reference
이 문제에 관하여(【ExcelVBA】폭속 컬러링의 전술 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YoshitakaOkada/items/25c73d1eb1a87abfa25c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
'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
'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
여기의 Test6입니다만, 속도 검증의 그래프등은 여기를 봐 주세요.
거기의 관리인이, 「가독성은 나쁘다.」라고 하는 것을 리팩토링 했습니다. 독해에 의외로 시간이 걸렸지만 상당히 재미있었다. 스크랩 앤 빌드의 제로베이스 쓰기 때문에 소스는 내 것이라고 생각했습니다
처리 포인트
해당 셀의 주소를 R1C1 참조 형식으로 써 저장해, 그것을 정리해 Application.ConvertFormula 메소드로 A1 형식으로 변환해 셀을 칠한다.
주의점
1. 단일 셀의 경우에는 오류가 있습니다. 그러나, 단일 셀을 지정하는 것은 드물지 않다(직접 칠해 줘!
2. Application.ConvertFormula 메소드로 지정할 수 있는 것은 255문자까지와 같기 때문에, 255문자를 넘는 직전에 변환과 색을 칠하는 처리를 실시한다.
3. ★ 부분은 색을 바르는 트리거이므로 필요에 따라 개조하십시오.
Reference
이 문제에 관하여(【ExcelVBA】폭속 컬러링의 전술 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YoshitakaOkada/items/25c73d1eb1a87abfa25c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1. 단일 셀의 경우에는 오류가 있습니다. 그러나, 단일 셀을 지정하는 것은 드물지 않다(직접 칠해 줘!
2. Application.ConvertFormula 메소드로 지정할 수 있는 것은 255문자까지와 같기 때문에, 255문자를 넘는 직전에 변환과 색을 칠하는 처리를 실시한다.
3. ★ 부분은 색을 바르는 트리거이므로 필요에 따라 개조하십시오.
Reference
이 문제에 관하여(【ExcelVBA】폭속 컬러링의 전술 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YoshitakaOkada/items/25c73d1eb1a87abfa25c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)