나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 네옹이 (bluehua)

추천:  2
파일:     test(573).xls (68.5KB) 조회:  3990
제목:   매크로 열 삽입시 왼쪽으로 삽입됩니다.
     
  엑셀 : 2013버젼

F열 앞에 매크로 이용해서 열을 삽입하려고 하는데, 왼쪽으로 엉뚱한곳에 삽입이 됩니다.


이러한 파일이 많은데 제발 도와 주세요.
F열 바로 앞에 매크로 이용해서 열을 추가 해야 합니다.




Sub 매크로1()
'
' 매크로1 매크로
'

'
    Columns("F:F").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.ColumnWidth = 9.22
    Columns("H:H").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.ColumnWidth = 6.89
    Range("F11:H11").Select
    Range("H11").Activate
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 5296274
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub
 
[불량 게시물 신고]  
조삿갓정확히 어떤 결과를 원하시는 건지 잘 이해가 안됩니다.
"앞에"라는 의미가 F열을 기준으로 보면 "왼쪽"이라는 것과 같은 의미 아닌가요?
3행의 "앞에"라고 하면 3행의 "위쪽" 즉, 2행과 3행 사이에 새로운 행이 삽입될 거고요.
혹시 행과 열의 개념을 혼동하신 것은 아닌지요?

Row(행)은 가로로 주욱 늘어선 것을 말합니다. 즉, A1:XFD1까지 범위가 1행(row)에 해당합니다.
Column은 세로로 늘어선 것을 말합니다. 즉, B1:B1048576까지 범위를 제2열 또는 B열이라고 합니다.
11-14 (21:45)
삭제 ■신고
조삿갓행이나 열의 삽입은 선택한 영역(Selection)의 바로 앞 쪽에서 일어납니다.
즉, F열을 선택하고 삽입을 하면 E열과 F열의 사이에 삽입되고
3행을 선택하고 삽입을 하면 2행과 3행의 사이에 삽입되지요.

혹시 F열의 내용을 복사해서 바로 앞이 아닌 띄어서 앞에 즉, 예를들어 B열과 C열 사이에 삽입하고 싶다면, C열을 선택한 후에 삽입해야 합니다.

다음은 "매크로 기록" 기능을 이용하여
 위 예를 실행하고 기록한 매크로 코드에 주석을 추가한 것입니다.

Sub 매크로3()
     Columns("F:F").Select           'F열을 선택하여
    Application.CutCopyMode = False
     Selection.Copy                  '복사하기
    Columns("C1").Select               'C1 셀을 선택하고
    Selection.Insert Shift:=xlToRight
             '선택열을 오른쪽으로(xlToRight) 밀면서(Shift) 삽입
            '즉, 왼쪽에 삽입한다는 뜻임
End Sub
11-14 (22:12)
삭제 ■신고
네옹이상단 F열위에 마우스우클릭 > 키보드 i > 열이 추가 됩니다.
이걸 매크로로 돌려보면 엉뚱한곳에 추가 됩니다.
작성된 매크로 돌려보면 이해 하리라 봅니다.
녹색으로 3칸 색칠했습니다.F열 바로 왼쪽에 삽입 되어야 하는데.... 테이블표가 밀려 버립니다.

이래저래 테스트 해보니...
엑셀의 셀병합을 전부 풀고 해야.. 매크로가 정상 작동한다는걸 알았습니다.
이방법 외에 다른 방법은 없는 건가요?
11-14 (23:39)
삭제 ■신고
조삿갓상단 F열위('열머리글'이라고 하지요)에서
 마우스우클릭 > [홈] 리본메뉴의 [삽입] 클릭
하면 간단히 E열과 F열 사이에 한 열이 삽입됩니다.
이 경우에는 셀 병합이 되어 있어도 상관 없고요.
(물론 E:F 사이가 병합된 경우, 병합영역이 한 칸 늘어나겠지요)

그런데, 내용이님께서 시도하신 키보드 i라는게 무슨 뜻인지 이해가 안갑니다.
그냥 <i> 키를 누르면 F1 셀에 i라고 입력됩니다.
<Shift I>는 대문자 I가 입력되고
<Ctrl I>는 기울임(Italic) 글꼴을 켜거나 끕니다
<Alt I>는 I로 시작하는 메뉴를 엽니다. 보통 삽입(Insert) 메뉴가 열릴텐데, 한글판에서는 안되는 것 같네요.
<Ctrl+Alt I>나 <Ctrl+Shift I>는 아무 일도 안 일어나고요
(보통은 사용자정의 매크로의 단축키를 이런 식으로 지정하지요. 기본 메뉴 단축키와 충돌을 피하기 위해서)
아마도 내용이님께서 사용하는 엑셀 프로그램이 특별한 설정이 되어 있는 것 같네요.
11-15 (08:40)
삭제 ■신고
조삿갓저도 이 질문 답변 준비하면서 온라인 도움말 공부하다가 알아낸 건데, 삽입 메소드의 CopyOrigin 옵션에 대한 사항입니다.
삽입되어 새로 만들어지는 행이나 열의 유전자를 어디에서 가져올 것인가 하는 것이지요.

1) 특별히 지정하지 않거나,
   CopyOrigin:=xlFormatFromRightOrBelow
   라고 지정하면, 글자 그대로 왼쪽이나 위쪽의 셀 모양을 닮게 됩니다.
   즉, E열과 F열 사이에 삽입되는 경우 새로운 열은 E열을 닮게 됩니다.(열 폭, 셀 음영 등)

2) CopyOrigin:=xlFormatFromRightOrBelow
   로 지정하면, 오른쪽이나 아랫쪽에서 유전자를 가져옵니다.
   즉, E열과 F열 사이에 삽입되는 새로운 열은 F열을 닮게 됩니다.
11-15 (08:48)
삭제 ■신고
조삿갓주문하신 기능은 매크로로는 다음과 같이 간단히 해결됩니다.
매크로1은 E열을 닮은 새로운 열을 삽입하고
 매크로2는 F  "      "        "    삽입합니다.

Sub 매크로1()
     Columns("F:F").Select
     Selection.Insert Shift:=xlToRight
End Sub

 Sub 매크로2()
     Columns("F:F").Select
     Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromRightOrBelow
 End Sub
11-15 (09:15)
삭제 ■신고
조삿갓아하.. 이제 자세히 보니,
마우스 오른쪽 버튼을 클릭해서 팝업메뉴를 부르셨군요.

그런데 제가 실험해 본 바에 의하면
이 경우에도 마찬가지로 그냥 한 칸이 E:F 사이에 삽입되던데요?
아무튼 요 앞에 댓글처럼 사용하시면 되겠습니다.
11-15 (11:34)
삭제 ■신고
네옹이매크로 기록 누르고,,, E:F사이에 열 삽입을 몇개 넣고, 매크로 기록 종료... >> E:F 사이에 삽입했던 열 다시 삭제 >> 다음에 녹음한..매크로 실행해 보시면.. 무슨 말인지 확실히 아실꺼예요....11-16 (00:37)
삭제 ■신고
네옹이어느정도 경험 하신분은 이해 하리라 생각하고, 질문 했는데..제가 자세한 설명을 빼서 오해 했나 보네요..11-16 (00:38)
삭제 ■신고
조삿갓매크로 기록 기능을 이용하여 자동화 루틴을 만들려면
1) 매크로 기록을 켠 이후에는 꼭 자동화를 원하는 동작(메뉴실행) 외에 군동작(화면을 스크롤시키거나, 셀포인터를 옮기거나, 저장하는 등)을 하면 곤란합니다. 그러면 그런 동작까지도 기록이 되어서, 나중에 엉뚱한 동작이 나타나는 원인이 될 수 있습니다.

2) 일단 기록을 완료하고 나면, VBA 편집기를 열어서 기록된 매크로를 점검해 보아야 합니다. 처음 접하는 명령어나 옵션이 보이면, 그 단어 위에 커서를 두고 <F1>을 눌러서 도움말을 참고해 봅니다. 기록된 매크로 명령 모두에 대해 제대로 이해하는 것이 원칙입니다. 영어가 불편하면 주소표시줄을 복사하여 구글크롬에 붙여넣고, 자동번역 기능을 활용하는 것도 방법입니다. 물론 기계번역이기 때문에 콩글리쉬로 바뀐 부분은 적당히 알아먹어야죠.
3) 내가 원하는 기능 외에 다른 것이 기록되지는 않았는지 살펴보고 그 부분은 삭제해야 합니다.
11-17 (09:28)
삭제 ■신고
조삿갓4) 변수로 바꾸어 줄 필요가 있는 곳이 있는지 검토해보고 수정해야 합니다. 예를들면 Columns("F:F").Select 부분입니다. 항상 F열에서만 삽입을 하는 것은 아닐 수 있겠지요. 이 부분을 InputBox로 삽입할 기준열을 입력 받도록 처리하거나, 아니면 차라리 삭제해 버리면 매크로 실행 이전에 특정 열을 선택한 상태로 매크로 실행하면 될 것입니다.
마찬가지 요령으로, 몇 개의 열을 삽입할 것인지에 대해서도 매크로 기록할 때에는 한 개만 삽입한 것을 기록해 놓고 나중에 VBA 편집에서 삽입할 열 개수는 InputBox로 받아서 For 반복문으로 돌려주는 식으로 처리하면 될 것입니다.

내용이님께서 기록하신 매크로를 보면, 이러한 군동작이 여러 군데 보이고 있습니다.(제가 보기에는 이런 동작들이 실제로 그걸 원하신 것은 아닌 것 같아 보입니다.) 그렇기 때문에 기록된 매크로를 그냥 재실행하게 되면, 환경이 바뀌어 있을 수 있기 때문에 엉뚱한 동작이 일어나는 것이지요.
11-17 (09:34)
삭제 ■신고
        
  

작성일 : 2017-11-14(16:09)
최종수정일 : 2017-11-14(16:09)