[[20251129090659]] 『ワークシートを追加し、別シートで管理表を作成し』(ちゃ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『ワークシートを追加し、別シートで管理表を作成したい』(ちゃ)

マクロ初心者で、CATGPTなど調べつつ作成しているのですがうまくいきません。
ご指導いただけたらと思いますm(__)m

準備したシートが「貼付用」「ひな形」「リスト」です。

作業イメージですが、
貼付用に、氏名や採用日などの情報を他からもってくる

貼付けボタンを押す

作成したフォーマットを使って、貼付用シートの情報を転記してワークシートを追加しワークシート名は氏名。
※シートが追加される状況になる。

リストシートには
   A    B    C  ・・・ M
5  受付日 社員番号 名前 ・・・リンク
6

C列には追加したシート名(氏名)をマクロで転記し、Cの名前と同じ条件でM列にはリンクさせます(関数)
M列のセルをおすと社員のシートにいく。

現在のコードです。

−−−−−−−−−−−−−−−−−
Sub 管理()

    Dim wsSource As Worksheet
    Dim wsTemplate As Worksheet
    Dim wsProgress As Worksheet
    Dim newSheet As Worksheet
    Dim baseName As String
    Dim newSheetName As String
    Dim lastRow As Long
    Dim staffName As String
    Dim i As Integer
    Dim progressRow As Long
    Dim targetSheetName As String
    Dim targetWS As Worksheet
    Dim val As Variant

    Set wsSource = ThisWorkbook.Sheets("貼付用")
    Set wsTemplate = ThisWorkbook.Sheets("ひな形")
    Set wsProgress = ThisWorkbook.Sheets("リスト")

    staffName = wsSource.Range("D3").Value
    baseName = staffName
    newSheetName = baseName

    i = 2
    Do While SheetExists(newSheetName)
        newSheetName = baseName & "(" & i & ")"
        i = i + 1
    Loop

    wsTemplate.Copy Before:=wsTemplate
    Set newSheet = ActiveSheet
    newSheet.Name = newSheetName

    With newSheet
        .Range("C3").Value = wsSource.Range("C3").Value
        .Range("D3").Value = wsSource.Range("D3").Value
        .Range("D4").Value = wsSource.Range("E3").Value
        .Range("E3").Value = wsSource.Range("G3").Value
        .Range("G3").Value = wsSource.Range("F6").Value
        .Range("H3").Value = wsSource.Range("G6").Value
        .Range("N2").Value = Date
    End With

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    lastRow = wsProgress.Cells(wsProgress.Rows.Count, "C").End(xlUp).Row

    With wsProgress
    .Cells(lastRow + 1, "C").Value = newSheetName

    End With

    For progressRow = 2 To lastRow
        targetSheetName = wsProgress.Cells(progressRow, "C").Value

        If targetSheetName <> "" Then
            On Error Resume Next
            Set targetWS = ThisWorkbook.Sheets(targetSheetName)
            On Error GoTo 0

            ' ここでは何もせず、存在確認だけしている
            Set targetWS = Nothing
        End If
    Next progressRow

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

    MsgBox staffName & "さんのシート作成しました", vbInformation

End Sub

Function SheetExists(sheetName As String) As Boolean

    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets(sheetName)
    SheetExists = Not ws Is Nothing
    On Error GoTo 0
End Function

−−−−−−−−−−−−−−−−−

●VBAエディタにコードをはるとグレイのラインがでるので、構成エラーでしょうか?

End Sub
←ここにでます!
Function SheetExists(sheetName As String) As Boolean

●↑のコードのおかしい個所などありますか?

追加と転記はされるのですが、エクセルマクロをひらくとセキュリティなのかトラストセンターのエラーがでます。
マクロの設定でVBAマクロが有効な場合にExcel4.0マクロを有効にするとチェックをするとでなくなりますが、各PCごとに表示されます。
この表示もでないようにしたいというのがあります。

< 使用 Excel:unknown、使用 OS:Windows11 >


 > ●VBAエディタにコードをはるとグレイのラインがでるので、構成エラーでしょうか?
 プロシージャや関数の区切り線なのでエラーではありません。

 >●↑のコードのおかしい個所などありますか?
 おかしな部分はないと思います。
 このようなコードでテストしてください。
 Sub SheetExists_Test()
    MsgBox SheetExists("貼付用")
    MsgBox SheetExists("貼付用2")
 End Sub

 >追加と転記はされるのですが、エクセルマクロをひらくとセキュリティなのかトラストセンターのエラーがでます。
 このあたりはPCごとのセキュリティ設定なので、EXCEL側では制御できないと思います。
 というか出来たらまずい?

 設定方法に関してもAIを活用してください。
 プロンプトは質問文をそのまま利用しましたが、こんな回答を教えてくれないでしょうか。

 ----
 EXCEL のマクロファイルを開くとセキュリティなのかトラストセンターのエラーがでます。 マクロの設定でVBAマクロが有効な場合にExcel4.0マクロを有効にするとチェックをするとでなくなりますが、各PCごとに表示されます。
 これを表示されないようにする手順を教えてください。
 ----
 :
 ◆ 手順2:ファイルの保存場所を「信頼できる場所」にする(推奨)
 ファイルを 信頼済みフォルダ に置くと、そのフォルダ内のファイルは警告なしで開きます。

 ● 設定手順
 Excel を開く
 [ファイル] → [オプション]
 [トラストセンター] → [トラストセンターの設定]
 [信頼できる場所]
 [新しい場所の追加]
 マクロファイルの保存フォルダを追加
 チェック「サブフォルダーも信頼する」をオン
 これにより、そのフォルダ内のマクロは警告を出さずに実行されます。
 :
 以下略
 :
  🔍 まとめ(何をするのがベストか?)
 方法	警告を消せる?	PCごとの設定?	推奨度
 Excel 4.0 マクロを使わない	◎	不要	★★★★
 信頼できる場所に配置	◎	初回のみ必要	★★★★
 Excel 4.0 マクロを有効化	◎	必要	★★★
 GPOで全PC統一	◎	不要	★★★★★(企業環境向け)
(英愛) 2025/11/29(土) 10:20:19

>●VBAエディタにコードをはるとグレイのラインがでるので、構成エラーでしょうか?
>End Sub
>←ここにでます!
>Function SheetExists(sheetName As String) As Boolean

VBAエディタの仕様です。
プロシージャの堺であることを示しています。

「VBA プロシージャ」で調べてみてください。

>追加と転記はされるのですが、エクセルマクロをひらくとセキュリティなのかトラストセンターのエラーがでます。
>マクロの設定でVBAマクロが有効な場合にExcel4.0マクロを有効にするとチェックをするとでなくなりますが、各PCごとに表示されます。
>この表示もでないようにしたいというのがあります。

「トラストセンターのエラー」という表現は個人的には直した方がよいと思ますが、、
「エラー」ではなく、「警告」です。
「本当にこのBookのマクロを実行できるようにしてよいですか?」
という事を警告しています。
なぜなら、VBAを使えばコンピュータウイルスを作ることが可能だからです。
この警告を出さないようにはできますが、それは、外部から
例えばメールなどの添付ファイルとかにウイルスが仕込まれていた時でも実行されてしまうからです。

Excelのオプションからトラストセンターの設定を確認してください。
トラストセンターの設定を開くとマクロの設定があるので、そちらでもコントロールできますが、
VBAマクロを有効にするは、Microsoftも推奨していません。

また、トラストセンターにある
信頼できる発行元
信頼できる場所
信頼済ドキュメント
でもコントロール可能です。

初心者の方であれば、このようなことを調べる事も
自分の実力をつける一歩になります。

調べてみてわからなければ、一つ一つ質問していくと
VBAの力がついてくると思います。

(匿名) 2025/11/29(土) 10:40:29


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.