Excel VBA에서 맵 편집기 같은 것을 만들어 보았습니다.

5771 단어 VBAExcelExcelVBA
참고:
전략 SLG 만들기: Hex(헥스) 맵의 좌표계 구조

위 페이지에서 Excel 시트로 시뮬레이션 게임의 맵 편집기를 만드는 구상이 공개되었습니다. 그것을 주로 조건부 서식으로 구현해 보았습니다. 결과적으로는 대형의 배경을 사용하면 무겁게 되어 버리는 Excel측의 문제로 채용은 배웅했습니다만, 오리지날 맵을 만드는 것은 좋을지도 모릅니다.

환경:
Excel2016 (RC 참조 사용) windows10

코드



VBA
Sub cells_shaping()

Dim c As Integer
Dim r As Integer

For c = 1 To 140
    Columns(c).ColumnWidth = 7
Next c

For r = 1 To 340
    Rows(r).RowHeight = 20
Next r

End Sub

Sub cells_numbering()

For c = 1 To 140
    For r = 1 To 340
        If c Mod 2 = 1 And r Mod 2 = 1 Then
            cs = Format(c)
            rs = Format(r)
            Cells(r, c).Value = cs + "," + rs
        ElseIf c Mod 2 = 0 And r Mod 2 = 0 Then
            cs = Format(c)
            rs = Format(r)
            Cells(r, c).Value = cs + "," + rs
        ElseIf c Mod 2 = 1 And r Mod 2 = 0 Then
            Cells(r, c).Value = ","
        ElseIf c Mod 2 = 0 And r Mod 2 = 1 And r > 1 Then
            Cells(r, c).Value = ","
        End If
    Next r
Next c

End Sub

Sub cells_color_format()

Dim MyRange As Range

Set MyRange = Range(Cells(1, 1), Cells(340, 130))

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(1,R[1]C)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=1),AND(SEARCH(1,R[1]C)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=0))"
MyRange.FormatConditions(1).Interior.Color = RGB(65, 105, 225) 'ocean 海洋 = 1 royalblue

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(1,RC)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=0),AND(SEARCH(1,RC)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=1))"
MyRange.FormatConditions(2).Interior.Color = RGB(65, 105, 225) 'ocean 海洋 = 1 royalblue

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(2,R[1]C)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=1),AND(SEARCH(2,R[1]C)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=0))"
MyRange.FormatConditions(3).Interior.Color = RGB(222, 184, 135) 'ground 平地 = 2 burlywood

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(2,RC)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=0),AND(SEARCH(2,RC)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=1))"
MyRange.FormatConditions(4).Interior.Color = RGB(222, 184, 135) 'ground 平地 = 2 burlywood

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(3,R[1]C)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=1),AND(SEARCH(3,R[1]C)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=0))"
MyRange.FormatConditions(5).Interior.Color = RGB(34, 139, 34) 'forest 森林 = 3 forestgreen

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(3,RC)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=0),AND(SEARCH(3,RC)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=1))"
MyRange.FormatConditions(6).Interior.Color = RGB(34, 139, 34) 'forest 森林 = 3 forestgreen

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(4,R[1]C)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=1),AND(SEARCH(4,R[1]C)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=0))"
MyRange.FormatConditions(7).Interior.Color = RGB(139, 69, 19) 'mountain 山岳 = 4 saddlebrown

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(4,RC)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=0),AND(SEARCH(4,RC)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=1))"
MyRange.FormatConditions(8).Interior.Color = RGB(139, 69, 19) 'mountain 山岳 = 4 saddlebrown

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(5,R[1]C)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=1),AND(SEARCH(5,R[1]C)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=0))"
MyRange.FormatConditions(9).Interior.Color = RGB(240, 230, 140) 'desert 砂漠 = 5 khaki

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(5,RC)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=0),AND(SEARCH(5,RC)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=1))"
MyRange.FormatConditions(10).Interior.Color = RGB(240, 230, 140) 'desert 砂漠 = 5 khaki

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(6,R[1]C)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=1),AND(SEARCH(6,R[1]C)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=0))"
MyRange.FormatConditions(11).Interior.Color = RGB(60, 179, 113) 'wetland 湿地 = 6 mediumseagreen

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(6,RC)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=0),AND(SEARCH(6,RC)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=1))"
MyRange.FormatConditions(12).Interior.Color = RGB(60, 179, 113) 'wetland 湿地 = 6 mediumseagreen

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(7,R[1]C)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=1),AND(SEARCH(7,R[1]C)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=0))"
MyRange.FormatConditions(13).Interior.Color = RGB(211, 211, 211) 'city 都市 = 7 lightgrey

MyRange.FormatConditions.Add Type:=xlExpression, _
Formula1:="=OR(AND(SEARCH(7,RC)=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=0),AND(SEARCH(7,RC)=1,MOD(ROW(),2)=0,MOD(COLUMN(),2)=1))"
MyRange.FormatConditions(14).Interior.Color = RGB(211, 211, 211) 'city 都市 = 7 lightgrey

End Sub

해설


  • 세 가지 함수로 구성됩니다. 첫 번째는 셀을 정사각형으로 조정하는 함수. 두 번째는 넘버링. 세 번째는 조건부 서식의 입력입니다.
  • 토지의 종류는 7종류 준비되어 있습니다.
  • 소개 셀 표시 방법을 A1 B1 C1과 같은 표시 형식이 아닌 R1C1 참조로 변경합니다. 파일 → 옵션 → 수식 → R1C1 참조 형식 사용을 선택합니다. 이제 RC(R0C0의 의미)로 표기하여 활성 셀을 참조할 수 있습니다.
  • 그릿의 하단에 있는 셀의 맨 오른쪽 숫자로 셀의 색상을 결정합니다.

  • 실행 후 화면

    좋은 웹페이지 즐겨찾기