시트 내 셀 안의 기호를 바꾸는 vba를 작성 중입니다

VBA
작성자
뱅만보르트
작성일
2022-06-13 10:59
조회
52
엑셀버전 : 엑셀2019

운영체제 : 윈도우10

제가 원하는 작업은 이겁니다.

예를들면

"3+5+(6*3)+↑4+당초3+6÷입상 2+기존 2*3" 이렇게 입력된 셀의 내용을

"3+5+(6*3)+4+3+6/2 +2*3" 이렇게 계산 수식과 관련없는 문자는 없애고 결과를 구하고 싶은데,

X 는 * 로,
÷ 는 / 로,
√ 는 sqrt 로
π 는 pi() 로
기타 "→" , "←", 같은 어떤 문자들 은 "" (아무것도 없는 것으로)

등등등 , ......

이런식으로 셀에 내용중 텍스트 기호들을 변환해서 결과를 얻는 모듈이 있는데

제가 아는 방법은

첫째

strTmp = rngTarget.Value

strTmp = WorksheetFunction.Substitute(LCase(strTmp), "x", "*")
strTmp = WorksheetFunction.Substitute(LCase(strTmp), "÷", "/")
strTmp = WorksheetFunction.Substitute(LCase(strTmp), "↑", "")
strTmp = WorksheetFunction.Substitute(LCase(strTmp), "↓", "")
.......

이런식으로 원하는 만큼 똑같은 구문을 다 적어 주는 방법이나

둘째

strTmp = rngTarget.Value

varData = [{"x","÷","↑","↓","→","←","π","√","(입상)","(추가)","(기존)","(반영)","(도면)","(입하)","(외부)","개소","당초","내부","(요청사항)";"*","/","","","","","PI()","sqrt","","","","","","","","","","","" }]
For i = 1 To 19
strTmp = WorksheetFunction.Substitute(LCase(strTmp), varData(1, i), varData(2, i))
Next

이렇게 하고 있는데,

첫째 방법은 바꿔야 할 것이 많으면 그 줄이 수십줄이 되어서 실행 속도라던가 메모리 사용에 문제가 있지 싶고,

둘째 방법은 구문 한줄에 타이핑 수가 정해져 있는 것 같아 많은 부분을 반영하지 못하는 문제가 있고 구문 줄 바꿈도 되지 않아 고민입니다.

그래서 혹시 이런 방법도 있는지 문의 드립니다

구문 1줄 정의후
"X" 는 "*"로 "÷" 는 "/"로 "↑"는 ""로 , "π" → "pi()" , ...... 등등등

이렇게 간단하게 할 수 있는 방법이 있는지 가르침을 주시면 감사하겠습니다.

전체 4

  • 2022-06-13 11:09

    @뱅만보르트 님 질문엔 엑셀 샘플을 올리십시오...


    • 2022-06-13 11:33

      @마법의손 님 마음이 급해서 파일을 못올렸네요

      파일 첨부합니다.

      첨부파일 : 기호바꿈-VBA.xls


  • 2022-06-13 13:55

    @뱅만보르트 님 사용자 정의 함수를 아래와 같이 작성하였습니다.

    두번째 인자는 생략하거나 False이면 계산결과를 보여주고,

    True로 지정하면 추출되어 계산이 되기 직전의 내용을 보여줍니다.

     

    Public Function RegRxEval(ByVal argStr As String, Optional bText As Boolean = False) As Variant
    
        Application.Volatile True
        
        Dim myRegExp As Object
        Dim vMatch As Variant
        Dim sResult As String
        
        Set myRegExp = CreateObject("VBScript.RegExp")
        '// 먼저 정규식으로 추출전에 바꿀 것들 처리
        argStr = Replace(UCase(argStr), "X", "*")
        argStr = Replace(UCase(argStr), "÷", "/")
        
        With myRegExp
            .Global = True
            .MultiLine = True
            .ignoreCase = False
            '// 정규식으로 뽑아낼 패턴
            .Pattern = "[()0-9.+-/*√π]"
            If .test(argStr) Then
                For Each vMatch In .Execute(argStr)
                    sResult = sResult & vMatch.Value
                Next
            Else
                sResult = vbNullString
            End If
    
        End With
        
        '// (입상) (추가) 등이 -> ()로 바뀐 것을 정리
        sResult = Replace(UCase(sResult), "()", "")
        
        '// 추출된 문자에서 최종 치환할 것들
        sResult = Replace(UCase(sResult), "π", "pi()")
        sResult = Replace(UCase(sResult), "√", "sqrt")
            
        If bText Then   '옵션이 True이면 계산전 추출된 문자열 반환 -> 결과 점검용
            RegRxEval = sResult
        Else            '옵션이 없거나 False이면 계산된 결과를 반환
            RegRxEval = Evaluate(sResult)
        End If
    
        Set myRegExp = Nothing
        
    End Function

     

    첨부파일 : 기호바꿈-VBA.xls


    • 2022-06-13 14:34

      @원조백수 님 답글 달아주셔서 감사합니다.


전체 6,914
번호 카테고리 제목 작성자 작성일 추천 조회
알림
📌 -- VBA 기초-활용 4주 완성, 특별 스터디 모집을 시작합니다! (모집 마감) -- 📌 (99)
오빠두엑셀 | 2022.06.23 | 추천 144 | 조회 17916
오빠두엑셀 2022.06.23 144 17916
공지사항 함수/공식
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (79)
오빠두엑셀 | 2021.10.28 | 추천 98 | 조회 5360
오빠두엑셀 2021.10.28 98 5360
39127 함수/공식
New 날짜/시간에 따른 이동경로 구하는 방법 알고 싶어요 엑셀파일첨부파일
날씬토끼 | 13:24 | 추천 0 | 조회 11
날씬토끼 13:24 0 11
39126 VBA
New FindWindowEx 선택 엑셀파일첨부파일
나야 | 12:07 | 추천 0 | 조회 13
나야 12:07 0 13
39125 문서서식
New 엑셀 행 선택 시 CTRL + SHIFT + 하단 방향키가 안되요
김도경 | 11:54 | 추천 0 | 조회 18
김도경 11:54 0 18
39121 기능/도구
New 셀 활성화? 표시가 안되요ㅠㅠ 개미들이 안움직임 첨부파일
외모지상렬주의 | 11:35 | 추천 0 | 조회 19
외모지상렬주의 11:35 0 19
39119 VBA
New 유저폼 생년월일 또는 주민등록번호는 입력해서 만나이를 추출하고 싶습니다.
kwt**** | 11:24 | 추천 0 | 조회 15
kwt**** 11:24 0 15
39115 함수/공식
New 중복값 강조 또는 함수를 이용한 원하는 항목 찾기 문의 엑셀파일첨부파일
이선홍 | 10:40 | 추천 0 | 조회 17
이선홍 10:40 0 17
39113 문서서식
New 데이터가 있음에도 불구하고 필터에 아무것도 안잡히는 경우 질문드립니다. 엑셀파일첨부파일 (1) 답변완료
다뿡이 | 10:37 | 추천 0 | 조회 18
다뿡이 10:37 0 18
39111 차트/그래프
New 간단한 그래프 만드려고 하는데 조언 부탁드리겠습니다. 엑셀파일첨부파일
이선홍 | 10:24 | 추천 0 | 조회 15
이선홍 10:24 0 15
39110 VBA
New VBA 파일 유효기간이 지나면 읽기전용으로 하고싶어요! (1)
꽁지 | 10:05 | 추천 0 | 조회 27
꽁지 10:05 0 27
39103 VBA
New 특정 셀에 특정 값을 입력하면 msgbox 띄우기 (매크로 트리거) (1)
509 | 01:45 | 추천 0 | 조회 23
509 01:45 0 23
39097 VBA
New Worksheet_Change 기능을 Module 에서 다루기 (3)
유지니_ | 2022.07.06 | 추천 0 | 조회 40
유지니_ 2022.07.06 0 40
39093 함수/공식
New 쉼표로 구분된 단어 끊는 방법좀 알려주세요! 부탁드립니다 첨부파일 (2) 답변완료
YJ | 2022.07.06 | 추천 0 | 조회 32
YJ 2022.07.06 0 32
39092 함수/공식
New 정렬 기능 대신 3가지 순서로 RANK 매기기 엑셀파일 (2)
블링블링 | 2022.07.06 | 추천 0 | 조회 30
블링블링 2022.07.06 0 30
39082 함수/공식
New RANK와 RANK.EQ 함수 문의 엑셀파일 (2) 답변완료
블링블링 | 2022.07.06 | 추천 0 | 조회 18
블링블링 2022.07.06 0 18
39075 파워쿼리/피벗
New 파워쿼리 새로고침시 개인정보수준이라는 팝업이 뜨면서 에러가 납니다. 첨부파일
만땅 | 2022.07.06 | 추천 0 | 조회 20
만땅 2022.07.06 0 20
39072 함수/공식
New 숙박일수 계산 추가질문드립니다. 엑셀파일 (1)
두키림 | 2022.07.06 | 추천 0 | 조회 32
두키림 2022.07.06 0 32
39071 함수/공식
New 상태표시줄 관련 첨부파일 (2) 답변완료
선크 | 2022.07.06 | 추천 0 | 조회 27
선크 2022.07.06 0 27
39070 함수/공식
New 함수? 사용해서 1시트의 내용을 2시트에 표시하는 방법좀 알려주세요 엑셀파일 (3)
지펴린 | 2022.07.06 | 추천 0 | 조회 27
지펴린 2022.07.06 0 27
39062 VBA
New 고급필터를 사용하여 추출한 데이터를 수정하면 원본 데이터 시트에서 수정되는 코드 해석 부탁드립니다 엑셀파일 (1)
호랑이파워 | 2022.07.06 | 추천 0 | 조회 39
호랑이파워 2022.07.06 0 39
39059 차트/그래프
New 슬라이서 다중 연동하여 원형차트 시 적용되지 않는 문제 엑셀파일
지둥이 | 2022.07.06 | 추천 1 | 조회 12
지둥이 2022.07.06 1 12
39052 VBA
New 파일 삭제 매크로가 한쪽 문구에서만 작동을 합니다. 첨부파일 (1)
빼갈 | 2022.07.06 | 추천 0 | 조회 23
빼갈 2022.07.06 0 23
39044 VBA
New 사용자정의함수를 다른PC에 적용 (2) 답변완료
siempre | 2022.07.06 | 추천 0 | 조회 37
siempre 2022.07.06 0 37
39034 VBA
New 자동화 프로그램 항목 추가 관련
유라 | 2022.07.06 | 추천 0 | 조회 46
유라 2022.07.06 0 46
39032 VBA
New VBA 고급자동필터 활용 조건 값이 비워 있을 때 결과 값도 안 나오게 하는 방범 문의 합니다. 첨부파일 (4) 답변완료
파란맥 | 2022.07.06 | 추천 0 | 조회 33
파란맥 2022.07.06 0 33
39019 함수/공식
New 엑셀 수식시 범위부분이 절대값이 안되요 첨부파일 (4)
skih**** | 2022.07.05 | 추천 0 | 조회 33
skih**** 2022.07.05 0 33
39016 함수/공식
New vlookup으로 가져온 알파벳을 특정숫자로 바꾸는 방법(쌩초보) (1)
방성희 | 2022.07.05 | 추천 -2 | 조회 33
방성희 2022.07.05 -2 33
39014 VBA
New 열 추가 문의 첨부파일 (2)
오대표 | 2022.07.05 | 추천 0 | 조회 35
오대표 2022.07.05 0 35
39009 함수/공식
New index,match 함수 중에서 동일한 값이 나올때 첨부파일 (2) 답변완료
최사무엘 | 2022.07.05 | 추천 0 | 조회 28
최사무엘 2022.07.05 0 28
39007 함수/공식
New VLOOKUP 조건에 맞는 것을 계속해서 나열하고 싶을 때 첨부파일 (1)
야자키겐스케 | 2022.07.05 | 추천 0 | 조회 39
야자키겐스케 2022.07.05 0 39
39003 함수/공식
New 셀에서 영어만 추출하기 엑셀파일첨부파일 (2) 답변완료
킹셀 | 2022.07.05 | 추천 0 | 조회 30
킹셀 2022.07.05 0 30