poohチャンネル
このブログでは、Youtube の「poohチャンネル」で作成したVBAを掲載しています。
テキストで掲載していますので、VBEに貼り付けて、自身のPC用にアレンジして使用してください。
フォルダのハイパーリンクを挿入
■セルD5のみにハイパーリンクを挿入するVBAです。
Sub InsertFolderHyperlink1()
Dim フォルダパス As String
Dim リンクパス As String
' フォルダパスを作成
フォルダパス = ThisWorkbook.path & "\" & Range("C5").Value _
& "組\" & Range("D5").Value
' ハイパーリンクを挿入
Worksheets("生徒名簿").Hyperlinks.Add Anchor:=Range("D5"), _
Address:=フォルダパス
End Sub
■D列すべてにハイパーリンクを挿入するVBAです。
Sub InsertFolderHyperlinks2()
Dim フォルダパス As String
Dim リンクパス As String
Dim 最終行 As Long
Dim i As Long
' 最終行を取得
最終行 = Cells(Rows.Count, "D").End(xlUp).Row
' セルD5からD列の最終行までループ
For i = 5 To 最終行
' フォルダパスを作成
フォルダパス = ThisWorkbook.path & "\" _
& Range("C" & i).Value & "組\" & Range("D" & i).Value
' ハイパーリンクを挿入
Worksheets("生徒名簿").Hyperlinks.Add Anchor:=Range("D" & i), _
Address:=フォルダパス
Next i
End Sub
以前の動画のVBA
一応以前作成したVBAで、
・セルの値からフォルダを作成
・セルの値からファイルを作成
・セルの値でファイルを振り分け
のVBAについても、今回の生徒名簿用にアレンジしたものですが、掲載しておきます。
※FSOを使用していますので、参照設定⇒Microsoft Scripting Runtime の設定をお願いします。
セルの値からフォルダを作成
Sub フォルダ作成()
Dim FSO As New FileSystemObject
Dim 新規フォルダ名 As String
Dim セルの値 As Range
' B列の範囲を取得
Dim 最終セル行 As Long
最終セル行 = Cells(Rows.Count, 4).End(xlUp).Row
' B6から最後のセルまでのフォルダを作成
Dim 選択セル行 As Integer
For Each セルの値 In Range("D5:D" & 最終セル行)
選択セル行 = セルの値.Row
' フォルダのパスを取得
新規フォルダ名 = ThisWorkbook.path & "\" & Range("C" & 選択セル行) & "組" _
& "\" & セルの値.Value
' フォルダを作成
FSO.CreateFolder 新規フォルダ名
Next セルの値
' FSOを解放
Set FSO = Nothing
End Sub
セルの値からファイルを作成
■新しいファイルを作成する方法
Sub 新規ファイル作成()
Dim FSO As New FileSystemObject
Dim ファイル名 As String
Dim 選択セル As Range
Dim 新しいファイル As Workbook
' D列の範囲を取得
Dim 最終行 As Long
最終行 = Cells(Rows.Count, 4).End(xlUp).Row
' D6から最後のセルまでのエクセルファイルを作成
For Each 選択セル In Range("D6:D" & 最終行)
' ファイルのパスを取得
ファイル名 = ThisWorkbook.path & "\" & 選択セル.Value & ".xlsx"
' 新しいブックを作成
Set 新しいファイル = Workbooks.Add
' 新しいブックを保存
新しいファイル.SaveAs ファイル名
' 新しいブックを閉じる
新しいファイル.Close SaveChanges:=False
Next 選択セル
' FSOを解放
Set FSO = Nothing
End Sub
■ファイルのコピーを作成する方法
Sub コピーファイル作成()
Dim FSO As New FileSystemObject
Dim ファイル名 As String
Dim 新しいファイル名 As String
Dim 選択セル As Range
Dim 新しいファイル As Workbook
' フォームの元ファイルパスを取得
ファイル名 = ThisWorkbook.path & "\フォーム.xlsx"
' D列の範囲を取得
Dim 最終行 As Long
最終行 = Cells(Rows.Count, 4).End(xlUp).Row
' D6から最後のセルまでのファイルを作成
For Each 選択セル In Range("D6:D" & 最終行)
' ファイル名とファイルパスを設定
新しいファイル名 = ThisWorkbook.path & "\" & _
選択セル.Value & ".xlsx"
' フォームのコピーを作成
FSO.CopyFile ファイル名, 新しいファイル名
Next 選択セル
' FSOを解放
Set FSO = Nothing
End Sub
セルの値でファイルを振り分け
■セルの値を基にファイルを移動
Sub ファイル移動()
Dim FSO As New FileSystemObject
Dim 基本パス As String
Dim 移動先フォルダ As String
Dim 移動ファイル名 As String
Dim 最終行 As Long
Dim i As Long
' ソースパスをセルC2から取得
基本パス = ThisWorkbook.path & "\"
' 最終行をセルD列から取得
最終行 = Sheet1.Cells(Rows.Count, "D").End(xlUp).Row
' ファイルの移動を繰り返す
For i = 6 To 最終行
' 移動先フォルダをセルC2とセルBの値から取得
移動先フォルダ = 基本パス & Sheet1.Range("C" & i).Value & "組"
' 移動するファイル名をセルD列の値から取得
移動ファイル名 = Sheet1.Range("D" & i).Value & ".xlsx"
' ファイルの移動
If FSO.FileExists(基本パス & 移動ファイル名) Then
FSO.MoveFile 基本パス & 移動ファイル名, 移動先フォルダ _
& "\" & 移動ファイル名
End If
Next i
' FSOのインスタンスを解放
Set FSO = Nothing
End Sub
■ファイルのコピーをセルの値のフォルダに作成
(For Nextを使用)
Sub CopyFormFile1()
Dim FSO As New FileSystemObject
Dim コピーファイルパス As String
Dim 新規ファイル名 As String
Dim 保存先フォルダ As String
Dim 最終行 As Long
Dim i As Long
Dim NewFile As Workbook
' ソースファイルのパスを取得
コピーファイルパス = ThisWorkbook.path & "\" & "個別成績表.xlsx"
' 最終行をセルD列から取得
最終行 = Sheet1.Cells(Rows.Count, "D").End(xlUp).Row
' ファイルのコピーを繰り返す
For i = 5 To 最終行
' コピー元ファイル名をセルD列の値から取得
新規ファイル名 = Sheet1.Range("D" & i).Value & ".xlsx"
' コピー先フォルダをセルC2とセルBの値から取得
保存先フォルダ = ThisWorkbook.path & "\" & _
Sheet1.Range("C" & i).Value & "組"
' フォームのコピーを作成
FSO.CopyFile コピーファイルパス, 保存先フォルダ & "\" & _
Range("D" & i).Value & "\" & 新規ファイル名
Next i
' FSOのインスタンスを解放
Set FSO = Nothing
End Sub
■ファイルのコピーをセルの値のフォルダに作成
(For Eachを使用)
Sub CopyFormFile2()
Dim FSO As New FileSystemObject
Dim コピーパス As String
Dim 新規ファイル名 As String
Dim 保存先フォルダ As String
Dim 選択セル As Range
Dim NewFile As Workbook
' ソースファイルのパスを取得
コピーパス = ThisWorkbook.path & "\" & "個別成績表.xlsx"
' D6から最後のセルまでのファイルを作成
For Each 選択セル In Range("D5:D" & Cells(Rows.Count, 4).End(xlUp).Row)
' コピー元ファイル名をセルD列の値から取得
新規ファイル名 = 選択セル.Value & ".xlsx"
' コピー先フォルダをセルC2とセルBの値から取得
保存先フォルダ = ThisWorkbook.path & "\" & _
Range("C" & 選択セル.Row).Value & "組"
' フォームのコピーを作成
FSO.CopyFile コピーパス, 保存先フォルダ & "\" & 新規ファイル名
Next 選択セル
' FSOのインスタンスを解放
Set FSO = Nothing
End Sub
以上です。
今回は、以前作成したVBAも掲載したので長くなり申し訳ございません。