エクセルで楽々校務

学校現場で使えるエクセルファイルや小技の紹介をしています。掘り出し物があるかもしれません。あと、今までの実践での疑問点もつぶやきます。

VBA: シートへ飛ぶリンクの表示列を可変にしてみました

前回のシートに修正を加えて、リンク一覧の表示列をセルに書いた列に移動できるようにしてみました。実はこれ、ひな形の印刷範囲もコピーされるのでむっちゃ楽なんです。

前回の記事はこちら

で、今回の画面はこちら

 

f:id:exeladmin:20200816230412p:plain

リンク一覧の表示列をP1セルで調整できるようにしてみました。

実は、これ、わが校の通信簿ファイルに使っているマクロです。

名簿シートから個人シートに一気に飛べるので大変重宝されています。

今回は備忘録として、コードとファイルを載せておきます。

コードは標準モジュールに書きました。

↑コードを書く場所についての過去記事です。

 

もし興味があれば、触ってみてください。実際に学校現場で使っているマクロです。

【コード】

----------------------------------------------

Option Explicit

Sub ■指定枚数分ひな形シートをコピーしリンク一覧作成()

Dim i As Long
Dim sh As Worksheet
Dim flg As Boolean
Dim makeCnt As Long
Dim rcol As String

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual '手動計算

'作成チェック
For Each sh In Worksheets
 If sh.Name = CStr(1) Then
  flg = True
  MsgBox "すでにシートは作成されています"
  Exit Sub
 End If
Next

If flg = False Then

'★ひな形シートをコピー---------------------------

 makeCnt = Range("K1").Value '作成するシート枚数記入セル

 rcol = Range("P1") '★リンク表列名を入力するセル

'0枚なら抜ける
If makeCnt < 1 Then
 Exit Sub
End If

For i = 1 To makeCnt
 ThisWorkbook.Worksheets("ひな形").Copy After:=Worksheets(Worksheets.Count)
 ActiveSheet.Name = i '★シート名は数字連番をセット
Next

'リンク表削除→作成--------------------
Sheets("index").Activate '★まずindexをアクティブに

Range(Cells(3, rcol), Cells(Rows.Count, rcol).End(xlUp)).ClearContents '★前のリンク表消去
Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp)).ClearContents '★前のナンバーA列消去
'★格子罫線削除
Range(Cells(3, 1), ActiveSheet.UsedRange).Borders.LineStyle = xlLineStyleNone

For i = 1 To makeCnt

 '★前のリンク表の右横列消去(左列は手動で削除を!)
 Range(Cells(3, rcol), Cells(Rows.Count, rcol).End(xlUp)).Offset(i - 1, 1).ClearContents

 Range("A" & (i + 2)).Value = i 'A列ナンバー記入
 Range("A" & (i + 1), rcol & (i + 2)).Borders.LineStyle = xlContinuous '格子罫線描画

'リンク表作成
ActiveSheet.Hyperlinks.Add _
anchor:=Cells(i + 2, rcol), _
Address:="", _
SubAddress:=Sheets(CStr(i)).Name & "!" & "E1", _
TextToDisplay:=Sheets(CStr(i)).Name & "番へ飛ぶ"

 'addは、ふつうは、Activesheet
 'Anchor:=リンク一覧を表示するセル位置
 'Address:=ブック内のシートをリンク先にする場合は""
 '★SubAddress:=各シートへのリンクの飛び先アドレス
 'TextToDisplay:=リンクに表示される文字列

Next
'--------------------------------------

 Range(rcol & 2).Value = "リンク一覧" '表示を上書き

End If
Application.Calculation = xlCalculationAutomatic '自動計算に戻す
Application.ScreenUpdating = True

 MsgBox "処理完了"
End Sub

'-----------------------------------------------------

Sub 作成した数字シートを削除する()

Dim sh As Worksheet

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual '手動計算


For Each sh In Worksheets
 Application.DisplayAlerts = False '★アラート停止
 If IsNumeric(sh.Name) = True Then '数字シートだけ削除
  sh.Delete
 End If
 Application.DisplayAlerts = True '★アラート復旧
Next

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic '自動計算に戻す

 MsgBox "処理完了"
End Sub

-----------------------------------------------

今の私にはこのようにしか書けません(^-^;

コードに無駄な部分があるかもしれませんが、快適に動けば別にいいと思っています。

 

サンプルファイル

 

 では、また(^^)/