Picture

병합된 셀에만 사진 삽입하기

노만e 2025. 3. 25. 05:51

이 코드는 엑셀에서 병합된 셀에 입력하고자 하는 사진을 삽입하는 기능을 수행합니다. 특히, 사용자가 지정한 특정 조건(예: 병합 셀의 행 개수 기준)에 따라 동작하며, 매번 수동으로 이미지를 삽입하는 번거로움을 줄이는 데 도움을 줍니다.

병합된 셀에 사진 삽입

 

1️⃣ 엑셀에서 병합된 셀에 효율적으로 사진 삽입

  • 엑셀에서는 병합된 셀 안에 사진을 정렬하는 것이 까다롭습니다.
  • 이 코드는 자동으로 병합된 셀의 크기에 맞춰 사진을 배치하므로 사용자의 수동 작업을 최소화합니다.

2️⃣ 사용자 친화적인 자동화 기능 제공

  • 사용자가 셀 범위를 직접 선택할 수 있도록 Application.InputBox(Type:=8) 기능을 활용.
  • 병합된 셀 중 특정 크기 이상의 셀만 선택하는 기능이 포함되어 있음.
  • 사진 크기 조정 옵션을 제공하여 다양한 크기에 맞출 수 있도록 함.

3️⃣ 일관된 이미지 배치 유지

  • 여러 개의 병합된 셀에 동일한 방식으로 이미지 크기와 위치를 조정할 수 있음.
  • ShapeRange.LockAspectRatio = msoFalse 설정을 통해 이미지 비율을 제어.
  • 정해진 규칙에 따라 왼쪽 상단 정렬, 크기 조정 등의 처리를 자동화.

4️⃣ 시간 절약 및 수동 작업 감소

  • 일반적으로 엑셀에서 다수의 병합된 셀에 수작업으로 사진을 삽입하면 많은 시간이 소요됨.
  • 사용자가 각 병합 셀을 일일이 조정할 필요 없이, 한 번의 실행으로 여러 개의 사진을 자동으로 삽입할 수 있음.

5️⃣ 유연한 사용자 입력 기능

  • 사용자가 원하는 병합 셀만 선택하여 사진을 삽입할 수 있음.
  • 조건을 설정하여 병합된 셀의 크기에 따라 사진을 넣을지 결정할 수 있음.
  • 여러 개의 이미지를 연속적으로 선택하여 자동 배치 가능.
Sub InsertPicturesInMergedCells()
    Dim selectedRange As Range, mergedCell As Range
    Dim pictureSize As Integer, minMergeRows As Long
    Dim imagePath As String, imageIndex As Integer
    Dim mergedCellsArray()
    
    ' 사용자에게 병합된 셀 범위 선택 요청
    On Error Resume Next
    Set selectedRange = Application.InputBox("사진이 입력될 병합 셀 범위를 선택하세요", "사진 입력 범위", Type:=8)
    If selectedRange Is Nothing Then Exit Sub
    On Error GoTo 0
    
    ' 최소 병합 행 개수 입력 요청
    minMergeRows = Application.InputBox("사진을 입력할 최소 병합 행 개수를 입력하세요", "병합셀 행 갯수 기준", Default:=3)
    If Not IsNumeric(minMergeRows) Or minMergeRows < 1 Then Exit Sub
    
    ' 사진 크기 옵션 입력
    pictureSize = Application.InputBox("사진 크기를 선택하세요." & vbCrLf & "1: 딱 맞게, 2: 조금 작게, 3: 더 작게", "크기 옵션", Default:=1)
    If Not IsNumeric(pictureSize) Or pictureSize < 1 Or pictureSize > 3 Then Exit Sub
    
    ' 병합 셀 목록 저장
    imageIndex = 0
    For Each mergedCell In selectedRange
        If mergedCell.MergeCells And mergedCell.Address = mergedCell.MergeArea.Cells(1, 1).Address _
            And mergedCell.MergeArea.Rows.Count >= minMergeRows And IsEmpty(mergedCell) Then
            
            imageIndex = imageIndex + 1
            ReDim Preserve mergedCellsArray(1 To imageIndex)
            Set mergedCellsArray(imageIndex) = mergedCell.MergeArea
        End If
    Next mergedCell
    
    ' 사용자가 선택한 병합 셀마다 이미지 삽입
    For imageIndex = 1 To UBound(mergedCellsArray)
        imagePath = Application.GetOpenFilename("그림파일 (*.*),*.*", , "삽입할 이미지를 선택하세요", MultiSelect:=False)
        If imagePath = "False" Then Exit Sub
        
        ' 이미지 삽입
        With ActiveSheet.Shapes.AddPicture(imagePath, msoFalse, msoCTrue, 1, 1, 100, 100)
            .LockAspectRatio = msoFalse
            .Left = mergedCellsArray(imageIndex).Left + (pictureSize * 2) - 2
            .Top = mergedCellsArray(imageIndex).Top + (pictureSize * 2) - 2
            .Width = mergedCellsArray(imageIndex).Width - (pictureSize * 4) + 4
            .Height = mergedCellsArray(imageIndex).Height - (pictureSize * 4) + 4
        End With
    Next imageIndex
    
    MsgBox "이미지 삽입이 완료되었습니다.", vbInformation, "완료"
End Sub


 

 

InsertPicturesInMergedCells.xlsm
0.24MB