Sub 集計データを表に持ってくる()
Dim srcSheet As Worksheet
Dim destSheet As Worksheet
Dim lastRowSrc As Long
Dim destRow As Long
Dim i As Long
Dim destRange As Range
' 集計シートを設定
Set srcSheet = ThisWorkbook.Sheets("集計") ' 集計シートの名前に変更してください
' 貼付シートを設定
Set destSheet = ThisWorkbook.Sheets("貼付") ' 貼付シートの名前に変更してください
' 集計シートのC列の最終行を取得
lastRowSrc = srcSheet.Cells(srcSheet.Rows.Count, "C").End(xlUp).Row
' 貼付シートのD列の次の空白行を取得
destRow = destSheet.Cells(destSheet.Rows.Count, "D").End(xlUp).Row + 1
' 貼付シートのD列を範囲として取得
Set destRange = destSheet.Range("D2:D" & destRow - 1)
' データをコピーして貼り付け
For i = 2 To lastRowSrc ' 2から始めることでヘッダー行をスキップ
If srcSheet.Cells(i, 3).Value >= 1 Then
' 数値が1以上かつD列に存在しない場合、左隣のセルの値をD列に追加
If WorksheetFunction.CountIf(destRange, srcSheet.Cells(i, 2).Value) = 0 Then
destSheet.Cells(destRow, 4).Value = srcSheet.Cells(i, 2).Value
destRow = destRow + 1
End If
End If
Next i
MsgBox "データが追加されました。", vbInformation
End Sub
Sub VLOOKUP適用()
Dim destSheet As Worksheet
Dim srcSheet As Worksheet
Dim lastRowDest As Long
Dim lastRowSrc As Long
Dim destRange As Range
Dim cell As Range
' 貼付シートを設定
Set destSheet = ThisWorkbook.Sheets("貼付") ' 貼付シートの名前に変更してください
' 集計シートを設定
Set srcSheet = ThisWorkbook.Sheets("集計") ' 集計シートの名前に変更してください
' 貼付シートのD列の最終行を取得
lastRowDest = destSheet.Cells(destSheet.Rows.Count, "D").End(xlUp).Row
' 集計シートのB列の最終行を取得
lastRowSrc = srcSheet.Cells(srcSheet.Rows.Count, "B").End(xlUp).Row
' 貼付シートのD列を範囲として取得
Set destRange = destSheet.Range("D8:D" & lastRowDest)
' H列にVLOOKUP関数を適用
For Each cell In destRange
cell.Offset(0, 4).Formula = "=IFERROR(IF(VLOOKUP(" & cell.Address & ",集計!B2:AA" & lastRowSrc & ",2,0)<>0,VLOOKUP(" & cell.Address & ",集計!B2:AA" & lastRowSrc & ",2,0),""""),"""")"
Next cell
' J列にVLOOKUP関数を適用
For Each cell In destRange
cell.Offset(0, 6).Formula = "=IFERROR(IF(VLOOKUP(" & cell.Address & ",集計!B2:AA" & lastRowSrc & ",3,0)<>0,VLOOKUP(" & cell.Address & ",集計!B2:AA" & lastRowSrc & ",3,0),""""),"""")"
Next cell
' 結果が0の場合は空白にするために数式を値に変換
' 数式を値に変換する
destSheet.Range("H8:H" & lastRowDest).Value = destSheet.Range("H8:H" & lastRowDest).Value
destSheet.Range("J8:J" & lastRowDest).Value = destSheet.Range("J8:J" & lastRowDest).Value
MsgBox "VLOOKUP関数が適用されました。", vbInformation
End Sub
Sub 数字に応じ画像()
Dim destSheet As Worksheet
Dim imageSheet As Worksheet
Dim lastRowDest As Long
Dim cell As Range
Dim pictureName As String
Dim picture As picture
Dim title As Range
' 貼付シートを設定
Set destSheet = ThisWorkbook.Sheets("貼付") ' 貼付シートの名前に変更してください
' 画像シートを設定
Set imageSheet = ThisWorkbook.Sheets("画像") ' 画像シートの名前に変更してください
' 貼付シートのH列の最終行を取得
lastRowDest = destSheet.Cells(destSheet.Rows.Count, "H").End(xlUp).Row
' H列に基づいて画像を貼り付ける
For Each cell In destSheet.Range("H1:H" & lastRowDest)
If cell.Value >= 1 And cell.Value <= 4 Then
' 値が1以上4以下の場合、"トラ"の画像を貼り付け
pictureName = "トラ"
ElseIf cell.Value >= 5 Then
' 値が5以上の場合、"シンスタ"の画像を貼り付け
pictureName = "シンスタ"
Else
' それ以外の場合は何もしない
pictureName = ""
End If
' 画像が指定されていれば、画像を取得してセルに貼り付け
If pictureName <> "" Then
Set picture = GetImageByName(imageSheet, pictureName)
If Not picture Is Nothing Then
picture.Copy
cell.Offset(0, -1).PasteSpecial Paste:=xlPasteValues
Set title = cell.Offset(0, -1)
With destSheet.Shapes(destSheet.Shapes.Count)
.LockAspectRatio = msoFalse
.Top = title.Top + (title.Height - ActiveSheet.Shapes(destSheet.Shapes.Count).Height) / 2
.Left = title.Left + (title.Width - ActiveSheet.Shapes(destSheet.Shapes.Count).Width) / 2
End With
Application.CutCopyMode = False
End If
End If
Next cell
MsgBox "画像が貼り付けられました。", vbInformation
End Sub
Function GetImageByName(imageSheet As Worksheet, imageName As String) As picture
Dim picture As picture
' 画像シートから画像を取得
For Each picture In imageSheet.Pictures
If picture.Name = imageName Then
Set GetImageByName = picture
Exit Function
End If
Next picture
' 該当する画像が見つからない場合は Nothing を返す
Set GetImageByName = Nothing
End Function