• ベストアンサー

エクセルのマクロについて教えていただきたいのですが・・・

見積書を作成しているんですが、1枚目のシート(見積書)に明細が書ききれなかった時に、マクロを実行すると、『明細書』と言う名前のシートが(1)~(5)枚目まで追加され、各シートの小計を1枚目のシートに書き出す・・・と言うマクロを作りたいのですが、うまくいかずに困っています>< 追加されるシートの元となる『見積もりマスター』と言うシートがあって、そのシート内でそれぞれのシートの小計は取れるのですが・・・ 下記のマクロの中に何か追加すればうまくいく方法はありますか?? (明細書は追加する時もあれば追加しない時もあってその都度、使う人が、最大5枚まで何枚追加するかを決めるそうです。) Sub Macro1() Dim cnt As Integer Dim wkNum As Double Dim ws As Worksheet  For Each ws In Worksheets   If Left(ws.Name, 4) = "明細書(" Then    If IsNumeric(Mid(ws.Name, 5, 1)) Then     wkNum = Val(Mid(ws.Name, 5, 1))     If cnt < wkNum Then      cnt = wkNum     End If    End If   End If  Next ws  If cnt >= 5 Then   MsgBox ("明細書シートが既に5枚以上あるため追加できません")   Exit Sub  Else   Sheets("明細マスター").Copy after:=Sheets(Worksheets.Count)   ActiveSheet.Name = "明細書(" & cnt + 1 & ")"  End If End Sub マクロ自体をあまり理解できてなくて、会社の人や、ここで教えていただいて進めているので、出来ればそのままコピーして使用できるようにしていただけるとありがたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.5

#02、04です。まだわかりません。#04の補足説明が補足要求の答になっていません。 明細書マスターおよび明細書(1)~(5)で小計のセルはE31:F31ですね。 それをなぜD52のような1つのセルにコピーするのですか? もしかしてE31:F31セルは結合されているのですか? とりあえず明細書(1)~(5)のE31を見積書シートのD52~D56に表示できるようにマクロを書きかえました(1行追加しただけですが…) また複数枚明細シートが必要なら複数回マクロを実行してください。枚数入力させるとマクロも長くなります。 お仕事で使うようですから、後は会社の人に相談されるとよいでしょう(^^) Sub Macro1() Dim cnt As Integer Dim wkNum As Double Dim ws As Worksheet  For Each ws In Worksheets   If Left(ws.Name, 4) = "明細書(" Then    If IsNumeric(Mid(ws.Name, 5, 1)) Then     wkNum = Val(Mid(ws.Name, 5, 1))     If cnt < wkNum Then      cnt = wkNum     End If    End If   End If  Next ws  If cnt >= 5 Then   MsgBox ("明細書シートが既に5枚以上あるため追加できません")   Exit Sub  Else   Sheets("明細マスター").Copy after:=Sheets(Worksheets.Count)   ActiveSheet.Name = "明細書(" & cnt + 1 & ")"   Sheets("見積書").Cells(cnt + 52, "D").Formula = "='明細書(" & cnt + 1 & ")'!E31" 'この行が追加されました  End If End Sub

aki0623
質問者

お礼

ありがとうございます。 明細書の小計のセルは結合されています。その小計を、見積書の一部にコピーして全てのシートの一覧が見れるようにしたかったので、こういうセルになってしまいました・・・それも書き込んだ方がよかったんですね。 これで、一度、マクロを作り直して実行してみます。 後は、会社の人に相談して教えてもらいます☆ 何度もありがとうございました。

その他の回答 (4)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#02です。前回の回答に補足をいただいていたのですね。 でも回答に対して何日も経ってから補足書き込みされても、前の回答を巡回しなくなりますから、本当にお困りなら書き込みレスポンスは早くする方がよいですよ。今日のレスポンスも早いとは言えませんね(^^; それに折角前の質問に補足を書いたなら、前回の質問番号も書く方が親切でしょう。今回の皆さんの回答がムダになります >詳しく言うと・・・ >追加されたシート『明細書(1)~(5)』の、セル『E31:F31』を、>表紙『見積書』の『D52~D56』にコピーすると言う内容です。 >D52~D56は最後に集計を取る時の数式に使用します。 これも変ですね。明細書(1)~(5)のE31:F31を転記するとなると、見積書シートのセルは2×5=10個必要になるはずですが、書き込み先はD52:D56の5個ですか? また「追加する時もあれば追加しない時もあって」もどのようにすれば良いのかがわかりません。他人にわかりやすく整理していただけないでしょうか

aki0623
質問者

お礼

そうだったんですね↓ ここに書き込みするようになったのもまだ最近だったんで、どうしたらいいのかイマイチ分かってなくて・・・ ありがとうございます、次からは気をつけます。 >詳しく言うと・・・ >追加されたシート『明細書(1)~(5)』の、セル『E31:F31』を、>表紙『見積書』の『D52~D56』にコピーすると言う内容です。 >D52~D56は最後に集計を取る時の数式に使用します。 上の部分は、明細マスターでの小計のセルが『E31:F31』で、見積書にコピーして来たいセルが、追加された1枚目がD52・2枚目がD53・3枚目がD54・4枚目がD55・5枚目がD56・・・と言う意味です。 >また「追加する時もあれば追加しない時もあって」もどのようにすれば良いのかがわかりません。他人にわかりやすく整理していただけないでしょうか この部分は、使う人が数人いるのですが、その時々によって、見積書が1枚だけでいい場合もあれば、たくさんの量の明細書が必要だったりするそうで、追加したい明細書の枚数もその都度変わるようです。 いつも分かりにくい質問ですいません><が、よろしくお願いしますm( 。 。)m

回答No.3

かなり説明不足ですので、意味が違ってとらえているかも知れません。 一応、明細書(n)というシートは出来るけど、そのシートの小計を明細書に書き出せないと言う意味だと思います。 書き出す方法ですが、明細書追加時に書き出すとすると、常に小計は0ですよね? なので、明細書追加時に、追加した明細書シートの小計欄にリンクを貼る方法が良いかと思います。 そのままコピーして使用できるようにするには、ほんとに情報が少なすぎてムリなので、多少の改善は質問者様で頑張って行ってください。 例えば、明細の書き込める行が5行目~24行目、小計欄が25行目とします。 また項目を2列目(B列)に書き、金額を3列目(C列)に書くとします。 そして、明細書(1)の20~24行目は必ず空行にし、別シートの小計を記載する欄として利用者に徹底をお願いします。 その場合、記載していただいたマクロの下から3行目、EndIFの上に以下を付け加えてください。 ActiveSheet.Name = "明細書(" & cnt + 1 & ")" Sheets("明細書").Cells(20 + cnt, 2) = "明細書(" & cnt + 1 & ") 小計" Sheets("明細書").Cells(20 + cnt, 3).FormulaR1C1 = "=" & "'明細書(" & cnt + 1 & ")'" & "!R[" & 5 - cnt & "]C" End If これで、実行すると明細書シートが1枚増え、小計が明細書シートにも記入されるようになります。 多分、明細書の書式が違うので、数字を変えてください。 変える場所は「Cells(20 + cnt, 2)」の20に小計をコピーしてくる行の数字、 「Cells(20 + cnt, 2)」の2に項目名の列数(A=1、B=2・・・)、 その下の「Cells(20 + cnt, 3)」も同様です。3には金額の列を。 いかがでしょうか?ご質問の趣旨に沿っているといいですが・・・。 あ、それから、もし「見積書」シートと「明細マスター」シートの書式が違って、金額の列が違う場合はまたちょっと変更があります。 例えば明細マスターではC列だけど、見積書ではD列に金額、と言う場合など。 その時は "=" & "'明細書(" & cnt + 1 & ")'" & "!R[" & 5 - cnt & "]C" この最後が変わります。 このCのあとに[1]という感じで数字を付け足してください。 CからDは1増えるので[1]です。2ふえるなら[2]。減るなら[-1]って感じです。 とりあえず、式をコピーして実行してみればわかってもらえるかと思います。 説明が下手ですみません。

aki0623
質問者

お礼

ありがとうございます☆ こちらこそ、質問が分かり辛くてすいません>< 言いたかった内容は、お返事頂いた通りなんで、セルを変えて実行してみます。 ありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

少し補足をお願いします マクロが実行されたときに「明細書の追加をする/しない」の確認をするだけなら例えば以下のようにすればよいですが、そもそもこのマクロは請求書を追加するために実行するのではありませんか? 追加する必要がないなら「実行しなければよい」ようにも思いますが… Sub Macro1() Dim cnt, res As Integer Dim wkNum As Double Dim ws As Worksheet res = MsgBox("明細書を追加しますか", vbYesNo) If res = vbYes Then For Each ws In Worksheets If Left(ws.Name, 4) = "明細書(" Then If IsNumeric(Mid(ws.Name, 5, 1)) Then wkNum = Val(Mid(ws.Name, 5, 1)) If cnt < wkNum Then cnt = wkNum End If End If End If Next ws If cnt >= 5 Then MsgBox ("明細書シートが既に5枚以上あるため追加できません") Exit Sub Else Sheets("明細マスター").Copy after:=Sheets(Worksheets.Count) ActiveSheet.Name = "明細書(" & cnt + 1 & ")" End If End If End Sub

aki0623
質問者

補足

質問が分かり辛くて申し訳ありません。 シート(明細書)の追加まではうまく行っていて、使う側が明細書を追加したいときだけ、マクロを実行する(最大で5枚までで、追加する枚数は使う側がその都度、見積書の明細の量によって変わる)そうです。 その際に、追加された明細書の一番下の行に小計を取るようにしていて、そのセルは『E31:F31』で、その小計を、表紙『見積書』のD52~D56にコピーして来ると言うマクロを作りたいのですが・・・ 追加された明細書の1枚目の小計はD52に・・・2枚目はD53に・・・・・ と言う内容です。 分かりにくい質問&補足で申し訳ありませんが、よろしくお願いしますm( 。 。)m

  • x0000x
  • ベストアンサー率52% (67/127)
回答No.1

>うまくいかずに困っています どのように上手く行かないのでしょうか?

aki0623
質問者

補足

質問が分かりにくくて申し訳ありません>< まず、明細書を追加する部分までは、質問に載せたマクロでうまく行くのですが、追加された明細書でそれぞれ、小計を取り(セルはE31:F31です)、その小計を、表紙『見積書』の、セルD52~D56にコピーすると言う内容です。 追加した明細書(1)の小計はD52へ・・・明細書(2)の小計はD53へ・・・明細書(3)の小計はD54へ・・・明細書(4)の小計はD55へ・・・明細書(5)の小計はD56へコピーしたいのですが。 うまく行かないと言うより、小計をコピーするマクロが分からないと書いた方が正しかったですね↓ 分かりにくい質問&補足で本当に申し訳ありませんがよろしくお願いします。

関連するQ&A

  • 検索マクロ

    下記のマクロは、検索文字でシートを検索し、そのセルアドレス情報を シートを追加して表示する機能ですが、BOOK全体に検索し、シート名を含めて表示するには、xxxxのところをどのように変更すればいいか。よろしくお願いします。 Sub kennsaku_Macro1() Dim ret Dim r As Range Dim adr As String Dim cnt As Long Dim psw As Boolean Dim mySht, adSht, ws As Worksheet Set mySht = ActiveSheet ret = Application.InputBox("検索文字列を入力してください") If TypeName(ret) <> "Boolean" Then With mySht.Cells Set r = .Find(ret, LookIn:=xlValues, lookat:=xlPart) If Not r Is Nothing Then adr = r.Address cnt = 2 '2行目から表示 xxxxxxxxxxxxx For Each ws In Worksheets If ws.Name = "検索結果" & ret Then psw = True Exit For End If Next ws If psw Then Set adSht = ws adSht.Cells.ClearContents Else Set adSht = Worksheets.Add adSht.Name = "検索結果" & ret End If adSht.Cells(cnt, 1).Value = r.Value adSht.Cells(cnt, 2).Value = xxxx 'シート名 adSht.Cells(cnt, 3).Value = adr Do Set r = .FindNext(r) If r.Address = adr Then Exit Do Else cnt = cnt + 1 adSht.Cells(cnt, 1).Value = r.Value adSht.Cells(cnt, 2).Value = xxxx 'シート名 adSht.Cells(cnt, 3).Value = r.Address End If Loop End If End With End If adSht.Cells(1, 1).Value = "項目" adSht.Cells(1, 2).Value = "シート名" adSht.Cells(1, 3).Value = "セルアドレス" mySht.Activate End Sub

  • 既存のマクロを他のエクセルファイルで使用したい

    下記のマクロを使おうと思うと、 このマクロがついたファイルを開いて 他のエクセルファイルを開くのですが使えません。 使おうとするとマクロのついたファイルに戻ってしまいます。 Sub test01() Dim ws As Worksheet For Each ws In Worksheets If ws.Name = "統合シート" Then Else ws.Activate d = ws.Range("A65535").End(xlUp).Row ws.Range(Cells(1, "A"), Cells(d, "C")).Copy Sheets("統合シート").Activate Sheets("統合シート").Range("A65535").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste End If Next End Sub どこを変えればよいのでしょうか。 教えてください。 よろしくお願いします。

  • エクセルの簡単なマクロ機能を追加したいのです

    既存のエクセルマクロ(Sub チェック()以下です)に下記の内容のマクロを付け足したいです。 教えていただけないでしょうか。 付け足したい条件です:  Sheet2のC列に 0  があれば  Sheet1のB列に 愛 と([太字]でセルの背景色を[灰色25%]にして)入れたいです 恐れ入りますがご存じの方がいらっしゃりましたら教えていただきたく何卒よろしくお願いいたします。 ----------------------------------------------- Sub チェック() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim myRange1 As Range Dim myRange2 As Range Dim c1 As Range Dim c2 As Range Dim myCt As Long Set Ws1 = Worksheets("Sheet1") Set Ws2 = Worksheets("Sheet2") Set myRange1 = Ws1.Range("A1", Ws1.Cells(Rows.Count, "A").End(xlUp)) Set myRange2 = Ws2.Range("A1", Ws2.Cells(Rows.Count, "A").End(xlUp)) For Each c1 In myRange1 myCt = 0 For Each c2 In myRange2 If c2.Value = c1.Value Then If c2.Offset(, 1).Value = "" Then c1.Offset(, 1).Interior.ColorIndex = 3 Else c1.Offset(, 1).Value = c2.Offset(, 1).Value End If myCt = myCt + 1 End If Next c2 If myCt > 1 Then c1.Offset(, 1).Interior.ColorIndex = 10 Next c1 Set Ws1 = Nothing Set Ws2 = Nothing Set myRange1 = Nothing Set myRange2 = Nothing End Sub

  • マクロ 特定のシート以外を削除する

    いつも回答して頂きありがとうございます。 特定のシート以外を削除するマクロを作成して動作させたのですが、削除する時に『選択したシートにデータが存在する可能性が・・・』と聞いてきます。これを無視して削除を行わせたいのですがどうすればよろしいでしょうか?御指導の程宜しくお願い致します。 Sub シートの削除() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "データ元" And ws.Name <> "集計用" Then ws.Delete End If Next End Sub

  • Excel 2007 マクロのIF構文について

    Excel 2007 マクロのIF構文について Sheet1からSheet2にIF構文を使用して、 必要な情報を転記するマクロです。 下記マクロで実現できているのですが、IF構文が多く もっと効率的なマクロがあるのではないかと考えています。 IF構文が2つありますが、1つにまとめるマクロがありましたら お教えください。 Sub Rist() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") '「Sheet1」シートを更新 Worksheets("Sheet1").Range("A1").ListObject.QueryTable.Refresh BackgroundQuery:=False '「Sheet1」シートから「Sheet2」シートに転記 For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To ws2.Cells(Rows.Count, 13).End(xlUp).Row '「Sheet1」シートのL列から「Sheet2」シートのS列に転記 If ws2.Cells(j, "M") = ws1.Cells(i, "A") Then ws2.Cells(j, "S") = ws1.Cells(i, "L") End If '「Sheet1」シートのG列から「Sheet2」シートのQ列に転記 If ws2.Cells(j, "M") = ws1.Cells(i, "A") Then ws2.Cells(j, "Q") = ws1.Cells(i, "G") End If Next j Next i End Sub

  • ファイルオープン時のマクロが一部実行されない

    いつも回答して頂き、ありがとうございます。感謝感謝です。 ファイルオープン時にApplication.Runで3つのマクロを実行させているのですが、最後のマクロだけ実行されません。どうしてでしょうか?もしかして、前の2つで『一覧シート』を除外するマクロを実行しているからでしょうか?御指導の程宜しくお願いいたします。 1番目に実行するマクロ Sub 特定のシート以外の最終履歴と次回予定日を算出する() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then If ws.Name <> "メニュー" Then Dim c As Integer c = 3 Do While ws.Cells(2, c).Value <> "" With ws.Cells(6, c) .FormulaR1C1 = "=MAX(R8C:R10000C)" If .Value = 0 Then .Value = "履歴無し" ws.Cells(7, c).ClearContents Else .Value = .Value ws.Cells(7, c) = DateAdd("d", ws.Cells(5, c), DateAdd("m", ws.Cells(4, c), DateAdd("yyyy", ws.Cells(3, c), ws.Cells(6, c)))) End If End With c = c + 1 Loop End If End If Next End Sub 2番目に実行するマクロ Sub 期限の未達と到達を色で分ける() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then If ws.Name <> "メニュー" Then Dim c As Long Dim res As Variant For c = 3 To ws.Cells(7, Columns.Count).End(xlToLeft).Column If IsDate(ws.Cells(7, c)) Then If ws.Cells(7, c) > Date Then res = 8 Else res = 3 End If Else res = xlNone End If ws.Cells(7, c).Interior.ColorIndex = res Next c End If End If Next End Sub 3番目に実行するマクロ Sub 各シートの情報を一覧へ転記する() Dim d As Integer Dim retu As Integer d = 3 Do While Cells(d, 2).Value <> "" With Worksheets(Worksheets("一覧").Cells(d, 2).Value) .Activate retu = .Range("IV7").End(xlToLeft).Column .Range(Cells(7, 3), Cells(7, retu)).Copy End With With Worksheets("一覧") .Activate Cells(d, 3).PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End With d = d + 1 Loop End Sub

  • Excelマクロ 途中まで作成したマクロの修正をお願いします

    Excelマクロ 途中まで作成した下記のマクロの修正をお願いできませんでしょうか。 【マクロ-途中 説明】 全シートのアクティブセルを「A1」にして、最後に左端のシートにして終了。→ファイル保存時、見栄えを良くするために使用 【修正点】 アクティブセル「A1」に移動を変更。 B列の一番下から「END+↑」でとんだ位置で止まる。 複数のシート(20以上)を同じ作業(ブック内の全シート) 同じく最後に一番左端のシートでをアクティブシートにして終了 ※A列は空白行のため、必ず埋まっているB列を基準にしたい 上記の【修正点】を下記の【マクロ-途中】に反映したい。 ↓ 【マクロ-途中】 Sub 全シートをHOMEポジションに() Dim ws As Variant For Each ws In Worksheets If Sheets(ws.Name).Visible = True Then Sheets(ws.Name).Select Range("A1").Select End If Next Sheets(1).Select End Sub

  • エクセル マクロ修正

    シート1~5まであります。別に情報シートを作成しています それぞれ同じ原本から作成しています 全部のシートにA1~A10のセルに日付、B1~B10のセルに文字など入力がするところがあります 入力はA1から順番に入れていきます 例えば 保存ボタンを作成しておく シート1のA1に日付、B1に”文字”を入力し、保存ボタンをおす 情報シートに日付と内容が一致する情報がなければ、 情報シートのA列にシート名、B列に日付、C列に入力した内容が 空白のところに出力される ボタンのマクロがCommandButton1_Clickとしたら Private Sub CommandButton1_Click() 検索 End Sub 標準モジュールに Sub 検索() Dim c As Range Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws1LastRow As Long Dim ws2LastRow As Long Set ws1 = Sheets("情報シート") Set ws2 = ActiveSheet If ws2.Range("A1").Value = "" Or ws2.Range("B1").Value = "" Then MsgBox "検索する日付もしくは語句が入力されていません。", vbCritical Exit Sub End If If ws1.Range("A1").Value = "" Then ws1LastRow = 0 Else ws1LastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row End If ws2LastRow = ws2.Cells(Rows.Count, "A").End(xlUp).Row For Each c In ws1.Range(ws1.Cells(1, "B"), ws1.Cells(Rows.Count, "B").End(xlUp)) If c.Value2 = ws2.Cells(ws2LastRow, "A").Value2 Then If c.Offset(0, 1).Value = ws2.Cells(ws2LastRow, "B").Value Then MsgBox "既にデータが存在します", vbInformation Exit Sub End If End If Next ws1.Cells(ws1LastRow + 1, "A").Value = ws2.Name ws1.Cells(ws1LastRow + 1, "B").Resize(1, 2).Value = ws2.Cells(ws2LastRow, "A").Resize(1, 2).Value MsgBox "データを追加しました", vbInformation Set ws1 = Nothing Set ws2 = Nothing End Sub これを教えて頂き作っていたのですが 別のシートを作成しこのプログラムを応用していたのですが うまく起動しないため再度投稿しました 今度のやつは固定でやろうと思っていていじったのですが 別の欄の文字が表示してしまった 結合セルB2:C4に日付を入れる 結合セルL2:L30に内容を入れるようにしたいのですが ここだけのセルを参照するようにしたいのです。 どうすればいいでしょうか? 試したことAをB2にかえ、BをL2にしたら変なことになりました・・・

  • 複数のエクセルシートをまとめるマクロ

    下は複数のエクセルファイルを一つにするマクロですが、100万件を超えるためcsvで保存するようにするにはどこを変更したらよいでしょうか。 よろしくお願いします。 Sub Sample() Dim t As Single Dim strPath As String Dim strFileName As String Dim WB1 As Workbook Dim WS1 As Worksheet Dim WS2 As Worksheet Dim lngRowCount As Long 'A列に値が入っているデータ数 t = Timer 'まとめたいシート Set WS2 = ThisWorkbook.Worksheets(1) strPath = ThisWorkbook.Path strFileName = Dir(strPath & "\*.xls*") Do While strFileName <> "" If strFileName <> ThisWorkbook.Name Then Set WB1 = Workbooks.Open(strPath & "\" & strFileName) Set WS1 = WB1.Worksheets(1) With WS1.Range("A1") lngRowCount = .Worksheet.Cells(.Worksheet.Rows.Count, .Column).End(xlUp).Row - .Row If lngRowCount >= 1 Then With .Resize(lngRowCount, 14).Offset(1) .Copy WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1) End With End If End With WB1.Close False End If strFileName = Dir Loop MsgBox "まとめ処理をしました。処理時間 " & Format((Timer - t) / 60 / 60 / 24, "h:mm:ss") End Sub

  • マクロ エクセル2003

    いつも回答して頂き感謝しています。 原紙のブックを開き、別の名前を付けて保存するマクロを考えています。 原紙のブックを開くマクロはネットから探して、少し修正して出来あがったのですが、 この開いた原紙のブックに別の名前を付けて保存するマクロで困っています。 ただ単に名前を付けるだけだったら問題無いのですが、 その名前が既に保存されていないか確認した後、保存としたいのです。 ブックを開く記述を少し引用して出来ないかやってみたのですが、 Const Target2 As String = "C:\Users\Owner\Documents\" & NewFile で、定数式が必要です。と表示されエラーが発生してしまいます。 どのように変更したら上手くいくのでしょうか?宜しくお願い致します。 Sub Sample() Dim buf1 As String Dim buf2 As String Dim NewFile As String Dim ws1 As Worksheet Dim wb As Workbook Set ws1 = ThisWorkbook.Worksheets("作成") NewFile = "借入貸出" & ws1.Range("C4").Value & "." & ws1.Range("D4").Value Const Target1 As String = "C:\Users\Owner\Documents\借入貸出原紙.xlsx" Const Target2 As String = "C:\Users\Owner\Documents\" & NewFile & ".xlsx" buf1 = Dir(Target1) If buf1 = "" Then MsgBox Target1 & vbCrLf & "は存在しません", vbExclamation Exit Sub End If For Each wb In Workbooks If wb.Name = buf1 Then Application.DisplayAlerts = False Workbooks("借入貸出原紙.xlsx").Close Application.DisplayAlerts = True End If Next wb Workbooks.Open Target1 buf2 = Dir(Target2) If buf2 = "" Then End If End Sub

専門家に質問してみよう