>주제 >excel >Excel에서 이름으로 사진을 쉽게 쿼리하는 방법

Excel에서 이름으로 사진을 쉽게 쿼리하는 방법

WBOY
WBOY앞으로
2022-07-12 11:58:165029검색

이 기사에서는 테이블의 A열에 있는 데이터 그림 이름에 따라 한 워크시트에서 다른 워크시트로 그림을 삽입하는 방법을 포함하여 이름으로 그림을 쿼리하는 방법에 대한 관련 문제를 주로 정리하는 excel에 대한 관련 지식을 제공합니다. 사진 테이블의 사진을 데이터 테이블의 B열에 일괄 삽입하는 방법 등을 함께 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.

Excel에서 이름으로 사진을 쉽게 쿼리하는 방법

관련 학습 권장 사항: excel 튜토리얼

한 워크시트에서 다른 워크시트로 그림을 삽입하는 방법은 무엇입니까? 예를 들어보세요.

아래와 같이:

Excel에서 이름으로 사진을 쉽게 쿼리하는 방법

워크북에는 두 개의 워크시트가 있습니다.

사진이 저장되어 있는 워크시트를 [사진], 사진을 삽입해야 하는 워크시트를 [데이터]라고 합니다.

이제 [data] 테이블의 A열에 있는 사진 이름을 기반으로 [Photo] 테이블의 사진을 [Data] 테이블의 B열에 일괄 삽입해야 합니다...

샘플 애니메이션은 다음과 같습니다.

Excel에서 이름으로 사진을 쉽게 쿼리하는 방법

...

이러한 기능을 구현하려면 실제로 3줄의 코드이면 충분합니다.

코드는 다음과 같습니다.

Sub InsertPicFromSheet()
Dim rngData As Range, rngPicName As Range
For Each rngData In Range("a2", Cells(Rows.Count, 1).End(3))
Set rngPicName = Sheets("照片").Cells.Find(rngData.Value, , , xlWhole)
'使用Find方法在照片表完整匹配姓名
If Not rngPicName Is Nothing Then rngPicName.Offset(0, 1).Copy rngData.Offset(0, 1)
'如果有找到对应的姓名,则将照片复制粘贴到目标位置
Next
End Sub

하지만...

위 코드의 가장 큰 문제는 데이터 테이블을 삭제하지 않고 이미 오래된 사진이 있다는 점입니다. 이 문제를 해결하려면 두 문장의 코드를 추가해야 합니다.

코드는 다음과 같이 수정됩니다.

Sub InsertPicFromSheet()
Dim shp As Shape, rngData As Range, rngPicName As Range
For Each shp In ActiveSheet.Shapes
'删除活动工作表原有照片
If shp.Type = 13 Then shp.Delete
Next
For Each rngData In Range("a2", Cells(Rows.Count, 1).End(3))
Set rngPicName = Sheets("照片").Cells.Find(rngData.Value, , , xlWhole)
'使用Find方法在照片表的完整匹配姓名
If Not rngPicName Is Nothing Then rngPicName.Offset(0, 1).Copy rngData.Offset(0, 1)
'如果有找到对应的姓名,则将照片复制粘贴到目标位置
Next
End Sub

위 코드는 모든 경우에 적용되는 단일 접근 방식을 사용하여 오래된 이미지를 삭제합니다.

하지만...

이 코드는 약간만 수정하면 VBA 기초가 좋은 친구들의 대부분의 문제를 처리하기에 충분하지만 분명히 초보자에게는 충분하지 않습니다...

예를 들어 …

1. 사진 이름은 데이터 테이블의 A열에 고정되어 있는데 실제로는 A열이 아닐 수도 있습니다. 제 말이 맞습니다.

2. 이름 열이 오른쪽으로 1열 이동한 셀에 사진이 있는 위치가 고정됩니다. 물론 실제 상황에서는 그렇지 않을 수도 있습니다.

3. 코드에는 사진을 저장하는 워크시트가 시트("사진")로 설정되어 있습니다. 실제로는 그렇지 않습니다.

4. 크기, I...

코드는 다음과 같이 수정됩니다.

Sub InsertPicFromSheet2()
'ExcelHome VBA编程学习与实践 by:看见星光
Dim rngData As Range, rngWhere As Range, cll As Range
Dim rngPicName As Range, rngPic As Range, rngPicPaste As Range
Dim shp As Shape, sht As Worksheet, bln As Boolean
Dim strWhere As String, strPicName As String, strPicShtName As String
Dim x, y As Long, lngYesCount As Long, lngNoCount As Long
'On Error Resume Next
Set rngData = Application.InputBox("请选择应插入图片名称的单元格区域", Type:=8)
'用户选择需要插入图片的名称所在单元格范围
Set rngData = Intersect(rngData.Parent.UsedRange, rngData)
'intersect语句避免用户选择整列单元格,造成无谓运算的情况
If rngData Is Nothing Then MsgBox "选择的单元格范围不存在数据!": Exit Sub
strWhere = InputBox("请输入放置图片偏移的位置,例如上1、下1、左1、右1", , "右1")
'用户输入图片相对单元格的偏移位置
If Len(strWhere) = 0 Then Exit Sub
x = Left(strWhere, 1)
'偏移的方向
If InStr("上下左右", x) = 0 Then MsgBox "你未输入偏移方位。": Exit Sub
y = Val(Mid(strWhere, 2))
'偏移的值
Select Case x
Case "上"
Set rngWhere = rngData.Offset(-y, 0)
Case "下"
Set rngWhere = rngData.Offset(y, 0)
Case "左"
Set rngWhere = rngData.Offset(0, -y)
Case "右"
Set rngWhere = rngData.Offset(0, y)
End Select
strPicShtName = InputBox("请输入存放图片的工作表名称", , "照片")
For Each sht In Worksheets
If sht.Name = strPicShtName Then bln = True
Next
If bln <> True Then MsgBox "未找到保存图片的工作表:" & strPicShtName & vbCrLf & "程序退出。": Exit Sub
Application.ScreenUpdating = False
rngData.Parent.Select
For Each shp In ActiveSheet.Shapes
&#39;如果旧图片存放在目标图片存放范围则删除
If Not Intersect(rngWhere, shp.TopLeftCell) Is Nothing Then shp.Delete
Next
x = rngWhere.Row - rngData.Row
y = rngWhere.Column - rngData.Column
&#39;偏移的纵横坐标
For Each cll In rngData
&#39;遍历选择区域的每一个单元格
strPicName = cll.Text
&#39;图片名称
If Len(strPicName) Then
&#39;如果单元格存在值
Set rngPicName = Sheets(strPicShtName).Cells.Find(cll.Value, , , xlWhole)
&#39;使用Find方法在照片表完整匹配姓名
If Not rngPicName Is Nothing Then
Set rngPicPaste = cll.Offset(x, y)
&#39;粘贴图片的单元格
Set rngPic = rngPicName.Offset(0, 1)
&#39;保存图片的单元格
lngYesCount = lngYesCount + 1
&#39;累加找到结果的个数
If lngYesCount = 1 Then
&#39;设置放置图片单元格的行高和列宽,以适应图片的大小
rngPicPaste.RowHeight = rngPic.RowHeight
rngPicPaste.ColumnWidth = rngPic.ColumnWidth
End If
rngPicName.Offset(0, 1).Copy rngPicPaste
&#39;如果有找到对应的姓名,则将照片复制粘贴到目标位置
Else
lngNoCount = lngNoCount + 1
&#39;累加未找到结果的个数
End If
End If
Next
Application.ScreenUpdating = True
MsgBox "共处理成功" & lngYesCount & "个对象,另有" & lngNoCount & "个非空单元格未找到对应的图片名称。"
End Sub

위 코드는 앞서 언급한 세 가지 일반적인 문제를 해결합니다...

그러나...세 가지, 그러나. ..

실용적으로 발생할 수 있는 문제가 아직 해결되지 않았습니다...

예를 들어...

1. 사진과 데이터 소스 간의 연결을 어떻게 해결합니까? 데이터 소스 이미지가 변경되면 데이터 테이블 이미지도 자동으로 변경되나요? 프로그램을 다시 실행하는 것 외에도 워크시트의 활성화 이벤트를 사용하거나 activesheet.chartobjects.add...를 사용할 수도 있습니다. 대신 셀에 맞게 그림 크기를 설정하는 방법 그림에 맞게 셀 크기를 조정하는 방법은 무엇입니까?

관련 학습 권장 사항:

excel 튜토리얼

위 내용은 Excel에서 이름으로 사진을 쉽게 쿼리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 excelhome.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제