본문 바로가기

Office/VBA17

VBA에서 16진수를 10진수로 바꾸는 간단한 방법 출처: http://stackoverflow.com/questions/26363113/converting-string-to-hex-in-excel-vba VBA를 사용하다가 16진수를 10진수로 바꿔야 할 일이 생겼습니다. 16진수로 바꿔주는 것은 Hex 함수가 있길래 당연히 Dec()이나 CDec()을 쓰면 되겠지 싶었는데 잘 안되더군요. Hex2Dec()은 사용이 가능하지만 WorksheetFunction이라 Application.WorksheetFunction.Hex2Dec() 처럼 써야 해서 문장이 길고 불편합니다. 출처에 나온 Val 함수를 이용한 방식은 FromHex = Val("&H" & hexString) 처럼 사용하면 되니 간편하네요. 2016. 8. 29.
VBA 한 줄에 변수 여러개 선언 출처: https://wikidocs.net/2041 VBA 변수 선언할 때 비슷한 변수를 한줄에 선언하고 싶을 경우가 있습니다. 이를 어떻게 하는지 궁금해서 구글링해보면 가장 처음에 나오는게 MSDN 사이트인데요. (https://msdn.microsoft.com/ko-kr/library/7ee5a7s1.aspx) MSDN에서는 한줄에 여러 변수를 선언 하려고 할때 다음과 같이 선언하라고 합니다. Dim lastTime, nextTime, allTimes() As Date 근데 문제는 MSDN 사이트에 나온 설명은 Visual Basic에 대한 설명이지 VBA(Visual Basic for Applications)에 대한 설명이 아닙니다. VB나 VBA나 비슷하겠지 하고 VBA에서 그대로 사용하게 되면.. 2016. 7. 23.
VBA에서 밀리초 단위로 시간 기록하는 방법 출처: https://social.msdn.microsoft.com/Forums/office/en-US/606a9ba0-4cae-4cad-a71c-f86c0a9d442d/how-to-display-millisecond?forum=exceldev 로그 파일에 로그 메시지와 시간을 기록하는데 초보다 더 상세한 단위로 기록을 하고 싶어져서 찾아보니 출처에 방법이 나와 있군요. Timer 함수가 자정 이후의 시간을 1초 미만의 소수 단위로 반환하니까 이를 Format해서 기록하면 됩니다. 다음과 같이 작성하면 되겠네요 Private Sub Log(ByVal szLog As String) Print #1, Format(Time, "hh:mm:ss.") & Right(Format(Timer, "#0.000 "), .. 2016. 6. 9.
VBA에서 상수에 따라 크기가 변하는 배열 선언 불가 출처: http://stackoverflow.com/questions/5185595/error-in-excel-vb-function-constant-expression-required 배열의 크기를 Const로 정의하고 거기에 따라서 크기가 고정되는 배열을 선언해보려고 했는데 잘 안되서 찾아보니 VBA는 방법이 없네요. 다음과 같이 먼저 동적 배열을 선언하고 상수 크기에 맞게 ReDim 해주는 방법을 사용해야 합니다. Dim probabilities() As Double ReDim probabilities(0 To n) 2016. 6. 6.