都道府県穴埋めゲーム

マクロを組んでいるのですが、なかなかうまくいかないので、お願いいたします。

”Abook”の速報シートを”速報book”に保存する際、一番先頭にコピーし、シート名がA1セルとなるようにしたいです。
その際、重複する名前がある場合、メッセージボックス"重複する名前がありますが上書きしますか?"を出し、yesの場合は上書き、noの場合は中断とするようにしたいです。

よろしくお願いいたします。

質問者からの補足コメント

  • うーん・・・

    Abook及び、速報bookはエクセルです。

    以下、自分で調べて組んでみたのですが、うまくいきません。
    ちなみに、マクロは初心者です。
    ---------------------------------
    Abook.xlsxにマクロを組んでいます

    速報.xlsxを開く
    Abook.xlsxの速報シートを速報.xlsxの先頭にコピー
    (※A1セルの名前で保存)
    同じシートの名前がある場合、メッセージボックスが出るようにしたい
    (同じ名前のシートがあります。上書きしますか?)
    yes 上書き
    no 処理中断

    よろしくお願いいたします

      補足日時:2018/07/06 13:33
  • うーん・・・

    保存先のAbook.xlsxはAフォルダ内にあり、速報.xlsxはAフォルダ内のBフォルダ内にあるのですが、組むことはできますでしょうか?

      補足日時:2018/07/06 16:40

A 回答 (4件)

Workbooks.Open Filename:=ThisWorkbook.Path & "\" & toBook



Workbooks.Open Filename:="Aフォルダ内Bフォルダ\" & toBook
に変えてください。
    • good
    • 0

以下のマクロを標準モジュールへ登録してください。


コピー先のブックは、”速報.xlsx”としました。(”速報book.xlsx”ではありません)
速報.xlsxのオープンはマクロ側で行いますが、マクロ側でクローズは行いません。(クローズの旨提示されていない為)
マクロのあるブックと速報.xlsxは同じフォルダ内にある前提です。
--------------------------------------------------------
Option Explicit

Public Sub ブック間シートコピー()
Dim fromsheet As String
Dim toBook As String
Dim toSheet As String
Dim ix As Long
toBook = "速報.xlsx"
fromsheet = "速報シート"
toSheet = ThisWorkbook.Worksheets(fromsheet).Range("A1").Value
If toSheet = "" Then
MsgBox ("A1のシート名不正")
Exit Sub
End If
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & toBook
ix = CheckSheet(toBook, toSheet)
If ix > 0 Then
If MsgBox("重複する名前がありますが上書きしますか?", vbYesNo) <> vbYes Then
Exit Sub
End If
Application.DisplayAlerts = False 'シート削除時の警告を出さないようにする
Workbooks(toBook).Worksheets(ix).Delete '既に該当シートがあるなら削除する
Application.DisplayAlerts = True 'シート削除時の警告を出すようにする(元に戻す)
End If
'シートをコピーする(一番左へ)
ThisWorkbook.Worksheets(fromsheet).Copy before:=Workbooks(toBook).Worksheets(1)
Workbooks(toBook).Worksheets(1).Name = toSheet
MsgBox ("処理完了")
End Sub
'シート名チェック
Private Function CheckSheet(ByVal book, ByVal sheet As String) As Long
Dim ix As Long
For ix = 1 To Workbooks(book).Worksheets.Count
If LCase(Workbooks(book).Worksheets(ix).Name) = LCase(sheet) Then
CheckSheet = ix
Exit Function
End If
Next
CheckSheet = -1
End Function
    • good
    • 0

補足要求です


①”Abook”と”速報book”の拡張子は何でしょうか。
②”Abook”と”速報book”は両方とも既にオープンされている前提でよいですか。
③このマクロは”Abook”に格納する前提でよいですか。
    • good
    • 0

こんにちは



大雑把に二通りの考え方があるかと思います。

◇事前に既存のシート名をチェックする
For Each sht In Worksheets
 If sht.Name = newName Then MsgBox "すでに存在する"
Next sht
みたいな感じ。

◇エラーが出たら処理する
すでに同じ名前が存在する状態で名前を設定しようとすると、VBAのエラーが発生しますので、
 On Error ~~
でエラーの発生をチェックし、発生していたらエラー処理を行う
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報