엑셀 조건에 맞게 이미지 삽입 방법 있을까요?

VBA
작성자
tu1541
작성일
2021-10-12 18:04
조회
1427
엑셀버전 : 엑셀2016

운영체제 : 윈도우10

첨부파일 있습니다. 조건이 좀 까다롭죠...ㅠㅠ
이미지 파일을 여러장 선택하여 삽입할 때 파일명에 가장 뒤 숫자와 엑셀 이미지 삽입하는 셀 바로 위 행 숫자에 따라 사진이 기입되는 방법이 있을까요?

EX)파일명 호랑이-1, 호랑이-12 두개 파일을 선택 했으면 위 숫자를 보고 1) , 12) 아래 셀에 이미지 삽입
그리고 또 한번 VBA실행하여 고양이-03,05,06,10,13,14,24 선택하여 해당하는 사진 삽입
이후 해당 방식으로 이미지 삽입

신고
스크랩
공유
전체 6

  • 2021-10-14 10:05

    @tu1541

    Sub AutoInsertPic()
    
        Dim regex As Object
        Set regex = CreateObject("VBScript.RegExp")
        regex.Pattern = "([가-힣]+)-([0-9]+)"
        regex.Global = True
        
        imgPath = Application.GetOpenFilename("Picture, *.jpg;*.bmp;*.tif;*.gif;*.png")
        If imgPath = "False" Then: Exit Sub
        
        If regex.Test(imgPath) Then
            Dim rng As Range
            Dim matches As Object, fileName As String, fileNo As Integer
            Set matches = regex.Execute(imgPath)
            
            ' # 예를 들어, 파일경로가 C:\documents...\호랑이-01.jpg 라면..
            ' # 정규식으로 값을 구분하여 가져옴.
            
            fileName = matches(0).SubMatches(0) ' # 호랑이
            fileNo = CInt(matches(0).SubMatches(1)) ' # 01
            
            If fileName = "호랑이" Then
                ' # 파싱한 값이 호랑이 라는 이미지 이름이면, A1:W9 까지 No를 찾음
                Set rng = Range("A1:W9").Find(fileNo)
            ElseIf fileName = "고양이" Then
                ' # 파싱한 값이 고양이 라는 이미지 이름이면, A17:W25 까지 No를 찾음
                Set rng = Range("A17:W25").Find(fileNo)
            End If
            
            If Not rng Is Nothing Then
                ' # index No가 있다면 선택한 이미지 삽입 루틴
                Set rng = Cells(rng.Row + 1, rng.Column)
                With ActiveSheet.Pictures.Insert(imgPath).ShapeRange
                    .LockAspectRatio = msoFalse
                    .Height = rng.Height
                    .Width = rng.Width
                    .Left = rng.Left
                    .Top = rng.Top
                End With
                
                Set rng = Nothing
            End If
            
        End If
    Set regex = Nothing
    End Sub

    여러가지 방법으로 할 수 있겠으나

    저는 정규식으로 구현해보았습니다.

    주석은 달아놨으니 해보시고 이해 안되는 부분은 말씀해주세요.


    • 2021-10-14 12:19

      @ToString 님 먼저 답변 감사합니다!!

      해봤는데 잘 되지 않는 것 같습니다.

      그리고 호랑이,고양이 한정이 아니라 제가 다시 파일 첨부 드렸는데요. 제가 하고자하는게 설명이 부족한 것 같아 다시 자세히 설명, 조건 적었습니다.

      맨 앞 셀에 호랑이,고양이 등등 큰 구분이 들어가고(SC219Q) 그걸 비교해서 고양이면 그쪽 오른쪽에 번호에 따라 이미지 삽입이 되었으면 좋겠습니다. 실제로는(SC219Q-30-01 , SC219Q-30-05) 이런 식에 파일 명에 파일이 들어갑니다.

      조건1. 맨 앞 셀에 값과 파일명에 첫번 쨰 "-" 기준으로 앞에 글자(글자 수는 바뀔수도 있어요..)를 비교하여 일치하는지 확인

      조건2. 조건1 만족하면 이미지 넣는 셀 위에 숫자와 파일 명에 맨 뒤 숫자를 비교하여 각각에 맞는 셀에 이미지 삽입

      너무 조건이 많네요..

      첨부파일 : 이미지.xlsm


      • 2021-10-14 14:29

        @tu1541

        Private Function GetPathExtension(FilePath As String) As String
            GetPathExtension = Right(FilePath, Len(FilePath) - InStrRev(FilePath, "\"))
        End Function
        
        Sub AutoInsertPic()
            Dim imgPath As String
            imgPath = Application.GetOpenFilename("Picture, *.jpg;*.bmp;*.tif;*.gif;*.png")
            If imgPath = "False" Then: Exit Sub
        
            Dim FileName As String, Items() As String, No As Integer, rng As Range
            FileName = Split(GetPathExtension(imgPath), ".")(0)
            
            Items = Split(FileName, "-")
            No = Items(UBound(Items))
            
            Set rng = Cells.Find(CStr(Items(0)))
            If Not rng Is Nothing Then
                Set rng = Range(rng.Address & ":X" & rng.Row + 9).Find(No)
                If Not rng Is Nothing Then
                    ' # 이미지 삽입
                    Set rng = Cells(rng.Row + 1, rng.Column)
                    With ActiveSheet.Pictures.Insert(imgPath).ShapeRange
                        .LockAspectRatio = msoFalse
                        .Height = rng.Height
                        .Width = rng.Width
                        .Left = rng.Left
                        .Top = rng.Top
                    End With
                End If
            End If
        End Sub

         

        첨부파일 및 소스코드 참고하세요.
        다음에는 예시 설명을 정확하게 부탁드립니다.

        첨부파일 : 이미지-3.xlsm


        • 2021-10-14 17:29

          @ToString 님 설명을 자세히 안 적었었네요...죄송합니다.

          소스코드 잘 작동 하는 거 같습니다. 감사합니다!!

          다중 파일 선택이 가능하게 구현은 안될까요? 단일 파일 선택으로는 파일이 많아 어려워 보여서요..


          • 2021-10-15 08:30
            채택된 답변

            @tu1541

            Private Function GetPathExtension(FilePath As String) As String
                GetPathExtension = Right(FilePath, Len(FilePath) - InStrRev(FilePath, "\"))
            End Function
            
            Sub AutoInsertPic()
                Dim selectedFile As Variant
                selectedFile = Application.GetOpenFilename("Picture, *.jpg;*.bmp;*.tif;*.gif;*.png", MultiSelect:=True)
                If Not IsArray(selectedFile) Then: Exit Sub
            
                For Each imgPath In selectedFile
                    Dim FileName As String, Items() As String, No As Integer, rng As Range
                    FileName = Split(GetPathExtension(CStr(imgPath)), ".")(0)
                    
                    Items = Split(FileName, "-")
                    No = Items(UBound(Items))
                    
                    Set rng = Cells.Find(CStr(Items(0)))
                    If Not rng Is Nothing Then
                        Set rng = Range(rng.Address & ":X" & rng.Row + 9).Find(No)
                        If Not rng Is Nothing Then
                            ' # 이미지 삽입
                            Set rng = Cells(rng.Row + 1, rng.Column)
                            With ActiveSheet.Pictures.Insert(CStr(imgPath)).ShapeRange
                                .LockAspectRatio = msoFalse
                                .Height = rng.Height
                                .Width = rng.Width
                                .Left = rng.Left
                                .Top = rng.Top
                            End With
                        End If
                    End If
                Next
            End Sub

             

            안녕하세요. Multiselect 가능하게 변경한 소스입니다.

            테스트를 해보지 않았는데... 한번 저걸로 테스트 해보세요.


            • 2021-10-15 09:43

              @ToString 님 와...너무 간단하게 다중 파일 선택도 되네요...

              감사합니다!!


전체 12,669
번호 카테고리 제목 작성자 작성일 추천 조회
알림
[📚교재 출간 안내] 「진짜쓰는 실무엑셀」 , 드디어 출간되었습니다! (218)
오빠두엑셀 | 2022.02.03 | 추천 501 | 조회 232632
오빠두엑셀 2022.02.03 501 232632
공지사항 문서서식
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (197)
오빠두엑셀 | 2021.10.28 | 추천 270 | 조회 14622
오빠두엑셀 2021.10.28 270 14622
61605 파워쿼리/피벗
New 파워쿼리 관련 질문입니다. 두표를 비교하여 불일치 목록 혹은 항목만 찾아내고싶습니다. 엑셀파일첨부파일 (1)
ak스타 | 2023.09.24 | 추천 0 | 조회 28
ak스타 2023.09.24 - 28
61603 함수/공식
New 문자열에서 특정 월, 일이 일치하는 항목의 금액합계와 건수를 계산하고 싶습니다. 첨부파일
김승현 | 2023.09.24 | 추천 0 | 조회 29
김승현 2023.09.24 - 29
61598 VBA
New VBA매크로 기능과 추가기능의 차이가 뭔가요???
월마리아 | 2023.09.24 | 추천 0 | 조회 47
월마리아 2023.09.24 - 47
61595 함수/공식
New 단어추출, 글자추출 이거 가능한 기능인지 봐주시면 감사하겠습니다! (1)
태협 | 2023.09.24 | 추천 0 | 조회 50
태협 2023.09.24 - 50
61594 함수/공식
New 엑셀 함수만 활용해서 조건부로 해당되는 항목에 대한 종류수를 세고 싶습니다 엑셀파일첨부파일 (3) 답변완료
정우현 | 2023.09.24 | 추천 0 | 조회 50
정우현 2023.09.24 - 50
61593 함수/공식
New 숫자 입력시 자동으로 원하는 단어 입력하는 방법을 알고 싶습니다. 첨부파일 (1)
maya0145 | 2023.09.24 | 추천 0 | 조회 44
maya0145 2023.09.24 - 44
61587 구글시트
New 다른 스프레드 시트의 다중 조건 합산 시 오류
어려워 | 2023.09.24 | 추천 0 | 조회 49
어려워 2023.09.24 - 49
61580 구글시트
New 다른 시트의 데이타 조건값 불러오기 첨부파일 (1)
자연인 | 2023.09.24 | 추천 0 | 조회 61
자연인 2023.09.24 - 61
61577 함수/공식
New 생산예정일 엑셀로 작성하는 방법 도와주세요 ㅠㅠ 엑셀파일첨부파일 (4)
ls**** | 2023.09.24 | 추천 0 | 조회 73
ls**** 2023.09.24 - 73
61574 기능/도구
New 선택한 영역의 가운데로 기능을 단축키로 가능할까요? (2)
문화인 | 2023.09.23 | 추천 0 | 조회 61
문화인 2023.09.23 - 61
61572 함수/공식
New 두 항목의 값을 함수를 통해 자동 합산되어 원하는 제목에 들어가기를 원해요 ㅠㅠ 첨부파일 (2)
비너쓰 | 2023.09.23 | 추천 0 | 조회 68
비너쓰 2023.09.23 - 68
61570 구글시트
New 다른 파일의 시트에서 데이터 불러오기 첨부파일
daniel | 2023.09.23 | 추천 0 | 조회 62
daniel 2023.09.23 - 62
61563 피벗테이블
New 피벗테이블 평균 DIV, 합계는 0으로 나오는 문제 엑셀파일첨부파일 (2) 답변완료
신세율 | 2023.09.23 | 추천 0 | 조회 59
신세율 2023.09.23 - 59
61562 함수/공식
New 군경력 기간 합산하고 승급월 구하는 수식 (3) 답변완료
뭉룽지 | 2023.09.23 | 추천 0 | 조회 67
뭉룽지 2023.09.23 - 67
61560 함수/공식
New 자동으로값구하기 첨부파일 (3) 답변완료
도와주세요1 | 2023.09.23 | 추천 0 | 조회 60
도와주세요1 2023.09.23 - 60
61557 VBA
New 특정셀에 데이터가 없다면 행을삭제하는 방법을 알고싶습니다 (2)
엑셀춉 | 2023.09.23 | 추천 1 | 조회 65
엑셀춉 2023.09.23 1 65
61549 구글시트
New 스프레드 시트에서 체크박스 액션으로 클릭한 사용자를 기록할 수 있나요? 첨부파일
양기원 | 2023.09.23 | 추천 0 | 조회 53
양기원 2023.09.23 - 53
61543 VBA
New 시트 보호 상태에서 Imagelookup 매크로 적용시키고 싶어요
밤ㅂ아암 | 2023.09.22 | 추천 0 | 조회 48
밤ㅂ아암 2023.09.22 - 48
61541 VBA
New VBA 편집시 오류 났을 때 폼크기 자동변경 해결방법 첨부파일
코훈 | 2023.09.22 | 추천 0 | 조회 56
코훈 2023.09.22 - 56
61537
New A B C 데이터 패턴을 활용한 년수 계산값 엑셀파일첨부파일 (1)
eintech | 2023.09.22 | 추천 0 | 조회 59
eintech 2023.09.22 - 59
61531 VBA
New 유저폼으로 표에 데이타를 입력하는 방법 엑셀파일 (1)
saechang | 2023.09.22 | 추천 0 | 조회 69
saechang 2023.09.22 - 69
61528 기능/도구
New 콤보박스의 텍스트를 조건부 서식에 활용하는 방법 문의 (1)
Sangwon | 2023.09.22 | 추천 0 | 조회 62
Sangwon 2023.09.22 - 62
61527 VBA
New 제품코드 찾기 함수 또는 매크로 엑셀파일 (2)
패션피플 | 2023.09.22 | 추천 0 | 조회 80
패션피플 2023.09.22 - 80
61526 함수/공식
New 재고 관리 계산(복잡합니다ㅠㅠ) 엑셀파일첨부파일 (1)
나지나지 | 2023.09.22 | 추천 0 | 조회 84
나지나지 2023.09.22 - 84
61522 함수/공식
New 엑셀 날짜 함수 질문입니다 (3) 답변완료
엑셀춉 | 2023.09.22 | 추천 0 | 조회 80
엑셀춉 2023.09.22 - 80
61521 함수/공식
New vlookup질문 엑셀파일 (3)
초보이정환 | 2023.09.22 | 추천 1 | 조회 82
초보이정환 2023.09.22 1 82
61520 문서서식
New 하이퍼링크 연결
cyk**** | 2023.09.22 | 추천 0 | 조회 56
cyk**** 2023.09.22 - 56
61516 함수/공식
New 다른시트의 중복된 모든 값과 그행을 다른 시트에 정리 하고 싶어요 엑셀파일 (4)
aj_ | 2023.09.22 | 추천 0 | 조회 71
aj_ 2023.09.22 - 71
61515 문서서식
New 정말 간단한 복사 붙여넣기 문의 드립니다. (1)
김키미 | 2023.09.22 | 추천 0 | 조회 66
김키미 2023.09.22 - 66
61514 함수/공식
New 다른시트에 있는 셀값 가져오는 방법 도움 요청드려요..(왕초보) 엑셀파일첨부파일 (3)
ruddlahs | 2023.09.22 | 추천 0 | 조회 77
ruddlahs 2023.09.22 - 77