엑셀 함수로 뒤집기

편의상 1부터 6까지의 숫자가 있다고 치자. 우측 열에 거꾸로 뒤집어서 넣을 생각이다.
(숫자로 되어있다면 구지 이렇게 할 필요가 없다. 편의상이라고 했다.)

myimg



OFFSET 함수를 활용할 예정이다.
OFFSET 함수는 특정 셀로부터 X열만큼, Y행만큼 떨어진 곳의 값을 반환해준다.
=OFFSET(
기준이 되는 셀,옮기고 싶은 값이 들어있는 셀과의 행간격,
옮기고 싶은 값이 들어있는 셀과의 열간격
)

글로써놓고 보니 나도 잘 모르겠다.

C4 셀에는 B9의 값이 들어와야 하니, 옮기고 싶은 값의 셀과의 행간격은 5가 되겠다.
단순히 5를 입력해도 되지만, 자동 채우기를 해야하는 관계로 아래로 갈수록 5-4-3-2-1이라는 값을 만들어 내야 한다.

숫자가 들어있는 전체 영역의 갯수(6)를 세어 전체 수를 만들고, —————(A)
아래로 하나씩 내려갈때마다 값이 하나씩 증가되는 것을 해당 열의 행번호로 잡았다. ————(B)



이런식이 될테다
=OFFSET(값,A,B)

입력해보면 아래와 같다.
=OFFSET(B$4,COUNTA(B$4:B$9)-ROW(B1),)

myimg
** 열 이동은 없으므로 열 인수 입력은 공백으로 둔다.



=OFFSET(B$4,COUNTA(B$4:B$9)-ROW(B1), 열 입력)
기준이 되는 값과 데이터가 들어있는 영역은 변하면 안되기 때문에 절대참조로 해둔다.
결과는 아래와 같다.

myimg



단, 1,2,3 행을 삭제하거나 변화를 주면, 수식이 어그러질 수 있다.
사실 이게 귀찮아서, VBA로 했었던거긴 하지만….



엑셀 VBA로 뒤집기

의외로 DB에서 추출한 데이터가 뒤집혀 있는 경우가 많다. 대부분 경우, 엑셀 노가다로 충분하지만, 엑셀에 버튼을 만들어 놓으면 편할 수 있다.
개인적으로 VBA를 몰랐을때 처음으로 시도한 거라 애착이 가고, 회사에서 가장 많이 자주 쓰고 있는 코드이다.

myimg



Sub upsidedown()

Dim i As Integer
Dim j As Integer
Dim EndRowNum As Integer

i = ActiveCell.Row
j = ActiveCell.Column

EndRowNum = ActiveCell.End(xlDown).Row - ActiveCell.Row + 1

For k = 1 To EndRowNum
    Cells(i + k - 1, j + 1) = Cells(i + EndRowNum - k, j).Value
Next k

End Sub


끝.