Sub Left2()
Dim str As String
str = "abcde"
MsgBox Left(str, 3)
End Sub
str = abcdeなので先頭から3文字までのabcが表示されます。
Left関数内で文字列の結合
Sub Left3()
Dim str As String
str = "abcde"
MsgBox Left(str + "fgh", 7)
End Sub
Left関数ないの文字列は”abcde”+”fgh”=”abcdefgh”になります。
そこから先頭から7文字なのでabcdefgで表示されます。
問題1
以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。
Sub Left4()
Dim str As String
str = "あいうえお"
MsgBox Left(str, 2)
End Sub
問題2
以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。
Sub Left5()
Dim str1, str2 As String
str1 = "あいうえお"
str2 = "かきくけこ"
MsgBox Left(str1 + str2, 2 + 5)
End Sub
問題1の答え
str = “あいうえお”でしたので先頭からの2文字ですので”あい”が表示されます。
問題2の答え
Left(“あいうえお” + “かきくけこ”, 2 + 5)
Left(“あいうえおかきくけこ”, 7)になるため”あいうえおかき”が表示されます。
セルから文字列を取得して隣のセルに設定
B2から文字列を取得してC2に設定します。
Sub Left6()
Dim str As String
str = Range("B2").Value
Range("C2").Value = Left(str, 3)
End Sub
処理の実行
abcの値がC2のセルに設定されました。
同様の処理内容
Left関数内にRange(“B2”)を設定する。
Sub Left7()
Range("C2").Value = Left(Range("B2").Value, 3)
End Sub
Rangeではなく、Cellsで設定する。
Sub Left8()
Dim str As String
str = Cells(2, 2)
Cells(2, 3) = Left(str, 3)
End Sub
上記、2つの処理でもabcの値がC2のセルに設定されます。
Cellsのイメージ
繰り返し処理(for文)
B列に取得したい文字列が8行入力されています。
これを繰り返し処理でC列に先頭から3文字取得して表示させます。
処理内容
Sub Left9()
Dim str As String
Dim i As Integer
For i = 1 To 8
str = Cells(i + 1, 2)
Cells(i + 1, 3) = Left(str, 3)
Next
End Sub
処理の結果
8行分先頭から3文字まで取得できました。
しかし、最後から2行の文字列は数値で表示されました。
VBA側で文字列として処理をしてもExcel側で数値に変換されます。
この表示を修正するにはセルの書式設定で文字列として表示させましょう。
これで数値が正常に文字列として表示されます。
繰り返し処理(Do While文)
for文ではFor i = 1 To 8と記載して8回処理をしたら終了する設定にしました。
Do While文では終了条件で繰り返し処理を終了させます。
終了条件はB列が空白になるまで繰り返し処理を行います。
つまりB10まで繰り返し処理を行います。
処理内容
Sub Left10()
Dim str As String
Dim i As Integer
i = 1
Do While Cells(i + 1, 2) <> ""
str = Cells(i + 1, 2)
Cells(i + 1, 3) = Left(str, 3)
i = i + 1 'この処理が抜けると無限ループになります。
Loop
End Sub
Sub サブフォルダ含むファイル名取得()
Dim maisu As Integer
Dim strFolderpass As String
'枚数の初期設定をします。
maisu = 1
'対象フォルダのパスを設定
strFolderpass = Range("B1").Value
'ファイルのパスの判定
If strFolderpass = "" Or Range("B2").Value = "" Then
MsgBox "対象フォルダのパスがありません。パスを入力してください。"
Else
'ファイル名変更のメソッドを呼び出します。
Call ファイル名変更(strFolderpass, maisu)
End If
End Sub
Sub ファイル名変更(strFolderpass As String, maisu As Integer)
Dim objfFSO As Object
Dim objFiles As Object
Dim objFile As Object
Dim objSubFolders As Object
Dim objSubFolder As Object
Dim fileName, file, filePath As String
Dim kakucho, seko As String
Dim i As Integer
Dim syuturyokuPath As String
'ファイルやフォルダを操作するオブジェクトの生成
Set objfFSO = CreateObject("Scripting.FileSystemObject")
'対象フォルダのファイルオブジェクトをセット
Set objFiles = objfFSO.GetFolder(strFolderpass).Files
i = 1
'ファイルをコピーして出力先のフォルダにファイル名を変更して貼り付け
For Each objFile In objFiles
file = objFile.Name
filePath = objFile.Path
fileName = Mid(filePath, Len(Range("B1")) + 1, Len(filePath) - Len(Range("B1")) - Len(file))
fileName = Replace(fileName, "\", "_")
kakucho = Mid(file, InStr(file, "."))
syuturyokuPath = Range("B2").Value + "\"
Select Case i Mod 3
Case 1
seko = "施工前"
Case 2
seko = "施工中"
Case Else
seko = "施工後"
End Select
FileCopy filePath, syuturyokuPath & maisu & fileName & seko & kakucho
maisu = maisu + 1
i = i + 1
Next objFile
'対象フォルダのサブフォルダファイルオブジェクトをセット
Set objSubFolders = objfFSO.GetFolder(strFolderpass).SubFolders
'サブフォルダを含むファイル名取得
For Each objSubFolder In objSubFolders
If objSubFolder.Name <> "" Then
'サブフォルダのパスをメソッドへ渡して再帰的に処理を行う
Call ファイル名変更(objSubFolder.Path, maisu)
End If
Next objSubFolder
'使用したオブジェクトの解放
Set objfFSO = Nothing
Set objFiles = Nothing
Set objFile = Nothing
Set objSubFolders = Nothing
Set objSubFolder = Nothing
End Sub
上記で行っている処理の内容
受け取ったパス内にファイルが存在する分だけ処理を繰り返す。
ファイルをコピーして出力先のフォルダにファイル名を変更して貼り付け。
受け取ったパス内にフォルダが存在する分だけ処理を繰り返す。
サブフォルダのパスをファイル名変更メソッドに渡す。
'サブフォルダを含むファイル名取得
For Each objSubFolder In objSubFolders
If objSubFolder.Name <> "" Then
'サブフォルダのパスをメソッドへ渡して再帰的に処理を行う
Call ファイル名変更(objSubFolder.Path, maisu)
End If
Next objSubFolder
i = 1
'ファイルをコピーして出力先のフォルダにファイル名を変更して貼り付け
For Each objFile In objFiles
file = objFile.Name
filePath = objFile.Path
fileName = Mid(filePath, Len(Range("B1")) + 1, Len(filePath) - Len(Range("B1")) - Len(file))
fileName = Replace(fileName, "\", "_")
kakucho = Mid(file, InStr(file, "."))
syuturyokuPath = Range("B2").Value + "\"
Select Case i Mod 3
Case 1
seko = "施工前"
Case 2
seko = "施工中"
Case Else
seko = "施工後"
End Select
FileCopy filePath, syuturyokuPath & maisu & fileName & seko & kakucho
maisu = maisu + 1
i = i + 1
Next objFile
Sub サブフォルダ含むファイル名取得()
Dim maisu As Integer
Dim strFolderpass As String
'ファイル名一覧を出力する行番号を指定します。
maisu = 1
'対象フォルダのパスを設定
strFolderpass = Range("B1").Value
'ファイルのパスの判定
If strFolderpass = "" Or Range("B2").Value = "" Then
MsgBox "対象フォルダのパスがありません。パスを入力してください。"
Else
'ファイル名変更のメソッドを呼び出します。
Call ファイル名変更(strFolderpass, maisu)
End If
End Sub
Sub ファイル名変更(strFolderpass As String, maisu As Integer)
Dim objfFSO As Object
Dim objFiles As Object
Dim objFile As Object
Dim objSubFolders As Object
Dim objSubFolder As Object
Dim fileName, file, filePath As String
Dim kakucho, seko As String
Dim i As Integer
Dim syuturyokuPath As String
'ファイルやフォルダを操作するオブジェクトの生成
Set objfFSO = CreateObject("Scripting.FileSystemObject")
'対象フォルダのファイルオブジェクトをセット
Set objFiles = objfFSO.GetFolder(strFolderpass).Files
i = 1
'ファイルをコピーして出力先のフォルダにファイル名を変更して貼り付け
For Each objFile In objFiles
file = objFile.Name
filePath = objFile.Path
fileName = Mid(filePath, Len(Range("B1")) + 1, Len(filePath) - Len(Range("B1")) - Len(file))
fileName = Replace(fileName, "\", "_")
kakucho = Mid(file, InStr(file, "."))
syuturyokuPath = Range("B2").Value + "\"
Select Case i Mod 3
Case 1
seko = "施工前"
Case 2
seko = "施工中"
Case Else
seko = "施工後"
End Select
FileCopy filePath, syuturyokuPath & maisu & fileName & seko & kakucho
maisu = maisu + 1
i = i + 1
Next objFile
'対象フォルダのサブフォルダファイルオブジェクトをセット
Set objSubFolders = objfFSO.GetFolder(strFolderpass).SubFolders
'サブフォルダを含むファイル名取得
For Each objSubFolder In objSubFolders
If objSubFolder.Name <> "" Then
'サブフォルダのパスをメソッドへ渡して再帰的に処理を行う
Call ファイル名変更(objSubFolder.Path, maisu)
End If
Next objSubFolder
'使用したオブジェクトの解放
Set objfFSO = Nothing
Set objFiles = Nothing
Set objFile = Nothing
Set objSubFolders = Nothing
Set objSubFolder = Nothing
End Sub
Sub サブフォルダ含むファイル名取得()
Dim maisu As Integer
Dim strFolderpass As String
'枚数の初期設定をします。
maisu = 1
'対象フォルダのパスを設定
strFolderpass = Range("B1").Value
'ファイルのパスの判定
If strFolderpass = "" Or Range("B2").Value = "" Then
MsgBox "対象フォルダのパスがありません。パスを入力してください。"
Else
'ファイル名変更のメソッドを呼び出します。
Call ファイル名変更(strFolderpass, maisu)
End If
End Sub
Sub ファイル名変更(strFolderpass As String, maisu As Integer)
Dim objfFSO As Object
Dim objFiles As Object
Dim objFile As Object
Dim objSubFolders As Object
Dim objSubFolder As Object
Dim fileName, file, filePath As String
Dim kakucho, seko As String
Dim i As Integer
Dim syuturyokuPath As String
'ファイルやフォルダを操作するオブジェクトの生成
Set objfFSO = CreateObject("Scripting.FileSystemObject")
'対象フォルダのファイルオブジェクトをセット
Set objFiles = objfFSO.GetFolder(strFolderpass).Files
i = 1
'ファイルをコピーして出力先のフォルダにファイル名を変更して貼り付け
For Each objFile In objFiles
file = objFile.Name
filePath = objFile.Path
fileName = Mid(filePath, Len(Range("B1")) + 1, Len(filePath) - Len(Range("B1")) - Len(file))
fileName = Replace(fileName, "\", "_")
kakucho = Mid(file, InStr(file, "."))
syuturyokuPath = Range("B2").Value + "\"
Select Case i Mod 3
Case 1
seko = "施工前"
Case 2
seko = "施工中"
Case Else
seko = "施工後"
End Select
FileCopy filePath, syuturyokuPath & maisu & fileName & seko & kakucho
maisu = maisu + 1
i = i + 1
Next objFile
'対象フォルダのサブフォルダファイルオブジェクトをセット
Set objSubFolders = objfFSO.GetFolder(strFolderpass).SubFolders
'サブフォルダを含むファイル名取得
For Each objSubFolder In objSubFolders
If objSubFolder.Name <> "" Then
'サブフォルダのパスをメソッドへ渡して再帰的に処理を行う
Call ファイル名変更(objSubFolder.Path, maisu)
End If
Next objSubFolder
'使用したオブジェクトの解放
Set objfFSO = Nothing
Set objFiles = Nothing
Set objFile = Nothing
Set objSubFolders = Nothing
Set objSubFolder = Nothing
End Sub
Set ObjFolder = ObjShell.Namespace(filePath).ParseName(file)
写真の撮影日を取得
day = ObjFolder.ExtendedProperty("System.Photo.DateTaken")
写真のデータの参照を解放
Set ObjFolder = Nothing
セルに撮影日を設定
Cells(k + 2, j + 13) = Format(day, "yyyy年m月d日")
シェルの解放
Set ObjShell = Nothing
写真一括貼り付け処理
Sub 写真張り付け_Click()
'ループ関数を設定
Dim i As Integer, j As Integer, k As Integer
'写真の一覧を取得
Dim fileName As Variant
Dim dblscal As Double
Dim str As String
'←--------追加
Dim day As Date
Dim ObjShell As Object
Dim ObjFolder As Object
Dim filePath As Variant
Dim file As Variant
'---------->
Dim startTime As Double
Dim endTime As Double
Dim processTime As Double
fileName = Application.GetOpenFilename( _
filefilter:="画像ファイル,*.bmp;*.jpg;*.gif;*.JPG", _
MultiSelect:=True)
'画像ファイルを選択しなかった場合は処理を終わらせる
If Not IsArray(fileName) Then Exit Sub
'処理中画面描写をしない
Application.ScreenUpdating = False
'開始時間取得
startTime = Timer
'写真を貼る開始セルの列
j = 2
'写真を貼る開始セルの行
k = 2
'印刷範囲の初期設定
str = Range(Cells(1, 1), Cells(60, 16)).Address
'原本シートのコピーを末尾に追加
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
'ボタンを削除
ActiveSheet.DrawingObjects.Delete
'←--------追加
'シェルの設定
Set ObjShell = CreateObject("Shell.Application")
'-------→
'取得した写真リストをセルに貼り付け
For i = LBound(fileName) To UBound(fileName)
If i <> 1 And i Mod 3 = 1 Then
Worksheets("原本").Range(str).Copy
Cells(k - 1, 1).PasteSpecial
Application.CutCopyMode = False
ActiveSheet.HPageBreaks.Add before:=Cells(((i \ 3) * 60) + 1, 1)
End If
'選択ファイル
With ActiveSheet.Shapes.AddPicture( _
fileName:=fileName(i), _
linktofile:=False, _
savewithdocument:=True, _
Left:=ActiveCell.Left, _
Top:=ActiveCell.Top, _
Width:=ActiveCell.Width * 10, _
Height:=ActiveCell.Height * 18)
'結合セルの大きさに設定する場合は下記の内
'Height:=ActiveCell.MergeArea.Height, _
'Width:=ActiveCell.MergeArea.Width)
End With
'写真の貼り直し
ActiveSheet.Shapes(i).Select
Selection.Cut
Cells(k, j).Select
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayasIcon:=False
Application.CutCopyMode = False
'Noに数を記入
Cells(k, j + 13) = i
'←------追加
'ファイルのパスを取得
filePath = Left(fileName(i), InStrRev(fileName(i), "\"))
'ファイル名の取得
file = Mid(fileName(i), Len(filePath) + 1)
'写真のデータを参照
Set ObjFolder = ObjShell.Namespace(filePath).ParseName(file)
'写真の撮影日を取得
day = ObjFolder.ExtendedProperty("System.Photo.DateTaken")
'写真のデータの参照を解放
Set ObjFolder = Nothing
Cells(k + 2, j + 13) = Format(day, "yyyy年m月d日")
'-------→
'次のセルの位置を設定する
k = k + 20
Next i
'←--------追加
'シェルの解放
Set ObjShell = Nothing
'-------→
i = i - 1
k = k - 20
Select Case i Mod 3
Case 1
str = Range(Cells(1, 1), Cells(k + 58, 16)).Address
Case 2
str = Range(Cells(1, 1), Cells(k + 38, 16)).Address
Case Else
str = Range(Cells(1, 1), Cells(k + 18, 16)).Address
End Select
ActiveSheet.PageSetup.PrintArea = str
'写真のズレを修正
ActiveSheet.Shapes.SelectAll
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = Cells(2, 2).Height * 18
Selection.ShapeRange.Width = Cells(2, 2).Width * 10
'終了時間取得
endTime = Timer
'処理時間表示
processTime = endTime - startTime
MsgBox "処理時間:" & processTime
Cells(1, 1).Select
'画面描写を実行
Application.ScreenUpdating = True
End Sub
Sub 写真張り付け_Click()
'ループ関数を設定
Dim i As Integer, j As Integer, k As Integer
'写真の一覧を取得
Dim fileName As Variant
Dim dblscal As Double
Dim str As String
'←--------追加
Dim day As Date
Dim ObjShell As Object
Dim ObjFolder As Object
Dim filePath As Variant
Dim file As Variant
'---------->
fileName = Application.GetOpenFilename( _
filefilter:="画像ファイル,*.bmp;*.jpg;*.gif;*.JPG", _
MultiSelect:=True)
'画像ファイルを選択しなかった場合は処理を終わらせる
If Not IsArray(fileName) Then Exit Sub
'処理中画面描写をしない
Application.ScreenUpdating = False
'写真を貼る開始セルの列
j = 2
'写真を貼る開始セルの行
k = 2
'印刷範囲の初期設定
str = Range(Cells(1, 1), Cells(60, 16)).Address
'原本シートのコピーを末尾に追加
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
'ボタンを削除
ActiveSheet.DrawingObjects.Delete
'←--------追加
'シェルの機能の参照
Set ObjShell = CreateObject("Shell.Application")
'-------→
'取得した写真リストをセルに貼り付け
For i = LBound(fileName) To UBound(fileName)
If i <> 1 And i Mod 3 = 1 Then
Worksheets("原本").Range(str).Copy
Cells(k - 1, 1).PasteSpecial
Application.CutCopyMode = False
ActiveSheet.HPageBreaks.Add before:=Cells(((i \ 3) * 60) + 1, 1)
End If
'選択ファイル
With ActiveSheet.Shapes.AddPicture( _
fileName:=fileName(i), _
linktofile:=False, _
savewithdocument:=True, _
Left:=ActiveCell.Left, _
Top:=ActiveCell.Top, _
Width:=ActiveCell.Width * 10, _
Height:=ActiveCell.Height * 18)
'結合セルの大きさに設定する場合は下記の内
'Height:=ActiveCell.MergeArea.Height, _
'Width:=ActiveCell.MergeArea.Width)
End With
'写真の貼り直し
ActiveSheet.Shapes(i).Select
Selection.Cut
Cells(k, j).Select
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayasIcon:=False
Application.CutCopyMode = False
'Noに数を記入
Cells(k, j + 13) = i
'←------追加
'ファイルのパスを取得
filePath = Left(fileName(i), InStrRev(fileName(i), "\"))
'ファイル名の取得
file = Mid(fileName(i), Len(filePath) + 1)
'写真のデータを参照
Set ObjFolder = ObjShell.Namespace(filePath).ParseName(file)
'写真の撮影日を取得
day = ObjFolder.ExtendedProperty("System.Photo.DateTaken")
'写真のデータの参照を解放
Set ObjFolder = Nothing
Cells(k + 2, j + 13) = Format(day, "yyyy年m月d日")
'-------→
'次のセルの位置を設定する
k = k + 20
Next i
'←--------追加
'シェルの解放
Set ObjShell = Nothing
'-------→
i = i - 1
k = k - 20
Select Case i Mod 3
Case 1
str = Range(Cells(1, 1), Cells(k + 58, 16)).Address
Case 2
str = Range(Cells(1, 1), Cells(k + 38, 16)).Address
Case Else
str = Range(Cells(1, 1), Cells(k + 18, 16)).Address
End Select
ActiveSheet.PageSetup.PrintArea = str
'写真のズレを修正
ActiveSheet.Shapes.SelectAll
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = Cells(2, 2).Height * 18
Selection.ShapeRange.Width = Cells(2, 2).Width * 10
Cells(1, 1).Select
'画面描写を実行
Application.ScreenUpdating = True
End Sub
Sub 写真張り付け_Click()
'ループ関数を設定
Dim i As Integer, j As Integer, k As Integer
Dim FileName As Variant
Dim dblscal As Double
Dim str As String
Dim startTime As Double
Dim endTime As Double
Dim processTime As Double
'写真の一覧を取得
FileName = Application.GetOpenFilename( _
filefilter:="画像ファイル,*.bmp;*.jpg;*.gif;*.JPG", _
MultiSelect:=True)
'写真ファイルを選択しなかった場合は処理を終わらせる
If Not IsArray(FileName) Then Exit Sub
'処理中画面描写をしない
Application.ScreenUpdating = False
'開始時間取得
startTime = Timer
'写真を貼る開始セルの列
j = 2
'写真を貼る開始セルの行
k = 2
'印刷範囲の初期設定
str = Range(Cells(1, 1), Cells(60, 16)).Address
'原本シートのコピーを末尾に追加
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
'ボタンを削除
ActiveSheet.DrawingObjects.Delete
'取得した写真リストをセルに貼り付け
For i = LBound(FileName) To UBound(FileName)
If i <> 1 And i Mod 3 = 1 Then
Worksheets("原本").Range(str).Copy
Cells(k - 1, 1).PasteSpecial
Application.CutCopyMode = False
'←-------------改ページの挿入
ActiveSheet.HPageBreaks.Add before:=Cells(((i \ 3) * 60) + 1, 1)
'-----------------→
End If
Cells(k, j).Select
'選択ファイル
With ActiveSheet.Shapes.AddPicture( _
FileName:=FileName(i), _
linktofile:=False, _
savewithdocument:=True, _
Left:=ActiveCell.Left, _
Top:=ActiveCell.Top, _
Width:=ActiveCell.Width * 10, _
Height:=ActiveCell.Height * 18)
'結合セルの大きさに設定する場合は下記の内
'Height:=ActiveCell.MergeArea.Height, _
'Width:=ActiveCell.MergeArea.Width)
End With
'写真の貼り直し
ActiveSheet.Shapes(i).Select
Selection.Cut
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayasIcon:=False
Application.CutCopyMode = False
'Noに数を記入
Cells(k, j + 13) = i
'次のセルの位置を設定する
k = k + 20
Next i
i = i - 1
k = k - 20
'←--------------------------------------
'印刷範囲を設定
Select Case i Mod 3
Case 1
str = Range(Cells(1, 1), Cells(k + 58, 16)).Address
Case 2
str = Range(Cells(1, 1), Cells(k + 38, 16)).Address
Case Else
str = Range(Cells(1, 1), Cells(k + 18, 16)).Address
End Select
' str = Range(Cells(1, 1), Cells(k + 18, 16)).Address
ActiveSheet.PageSetup.PrintArea = str
'----------------------------------→
'写真のズレを修正
ActiveSheet.Shapes.SelectAll
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = Cells(2, 2).Height * 18
Selection.ShapeRange.Width = Cells(2, 2).Width * 10
'終了時間取得
endTime = Timer
'処理時間表示
processTime = endTime - startTime
MsgBox "処理時間:" & processTime
Cells(1, 1).Select
'画面描写を実行
Application.ScreenUpdating = True
End Sub
Sub 写真張り付け_Click()
'ループ関数を設定
Dim i As Integer, j As Integer, k As Integer
Dim FileName As Variant
Dim dblscal As Double
Dim str As String
'写真の一覧を取得
FileName = Application.GetOpenFilename( _
filefilter:="画像ファイル,*.bmp;*.jpg;*.gif;*.JPG", _
MultiSelect:=True)
'写真ファイルを選択しなかった場合は処理を終わらせる
If Not IsArray(FileName) Then Exit Sub
'処理中画面描写をしない
Application.ScreenUpdating = False
'写真を貼る開始セルの列
j = 2
'写真を貼る開始セルの行
k = 2
'印刷範囲の初期設定
str = Range(Cells(1, 1), Cells(60, 16)).Address
'原本シートのコピーを末尾に追加
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
'ボタンを削除
ActiveSheet.DrawingObjects.Delete
'取得した写真リストをセルに貼り付け
For i = LBound(FileName) To UBound(FileName)
If i <> 1 And i Mod 3 = 1 Then
Worksheets("原本").Range(str).Copy
Cells(k - 1, 1).PasteSpecial
Application.CutCopyMode = False
ActiveSheet.HPageBreaks.Add before:=Cells(((i \ 3) * 60) + 1, 1)
End If
Cells(k, j).Select
'選択ファイル
With ActiveSheet.Shapes.AddPicture( _
FileName:=FileName(i), _
linktofile:=False, _
savewithdocument:=True, _
Left:=ActiveCell.Left, _
Top:=ActiveCell.Top, _
Width:=ActiveCell.Width * 10, _
Height:=ActiveCell.Height * 18)
'結合セルの大きさに設定する場合は下記の内容
'Height:=ActiveCell.MergeArea.Height, _
'Width:=ActiveCell.MergeArea.Width)
End With
ActiveSheet.Shapes(i).Select
Selection.Cut
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False,DisplayasIcon:=False
Application.CutCopyMode = False
'Noに数を記入
Cells(k, j + 13) = i
'次のセルの位置を設定する
k = k + 20
Next i
'コピー範囲を解放
i = i - 1
k = k - 20
Select Case i Mod 3
Case 1
str = Range(Cells(1, 1), Cells(k + 58, 16)).Address
Case 2
str = Range(Cells(1, 1), Cells(k + 38, 16)).Address
Case Else
str = Range(Cells(1, 1), Cells(k + 18, 16)).Address
End Select
ActiveSheet.PageSetup.PrintArea = str
ActiveSheet.Shapes.SelectAll
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = Cells(2, 2).Height * 18
Selection.ShapeRange.Width = Cells(2, 2).Width * 10
Cells(1, 1).Select
'画面描写を実行
Application.ScreenUpdating = True
End Sub