質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

383閲覧

Book間のコピーペースト

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/11/19 04:44

編集2020/11/19 05:20

前提・実現したいこと

ブックA(別ブック)の値をブックBにコピーして請求書を作成しようとしています。

追記
ブックABの構成としては
ブックA:簡単に項目毎に分けた請求費用(シートは4枚有)
ブックB:請求書雛形、取引会社の情報等が入ってくるのでシート数は不定

発生している問題・エラーメッセージ

インデックスが有効範囲にありません。
オブジェクトは、このプロパティまたはメソッドをサポートしていません。

該当のソースコード

VBA

1Sub demo() 2 3 '鏡を開く 4 Workbooks.Open "C:\Users\xxxxxxxxx\Desktop\請求書データベース.xls" 5 6 '請求書雛形bookをアクティブに 7 Workbooks("請求書雛形.xlsm").Activate 8 9 10 Dim num, i, j, k, m, n As Variant 11 12 '青色シートの削除※ 13 Application.DisplayAlerts = False 14 For num = worksheets.Count To 1 Step -1 15 If worksheets(num).Tab.ColorIndex = 5 Then 16 worksheets(num).Delete 17 End If 18 Next 19 Application.DisplayAlerts = True 20 21 22 For i = worksheets.Count To 2 Step -1 23 If worksheets(i).Name = "雛形" Then 24 Exit For 25 26 ElseIf worksheets(i).Name <> "雛形" Then 27 28 '入力 29 Sheets("雛形").Range("AA1").Value = Format(Now, "yyyy年m月d日") 30 Sheets("雛形").Range("A4") = worksheets(worksheets.Count).Range("B2") 31 Sheets("雛形").Range("B1") = worksheets(worksheets.Count).Range("B3") 32 Sheets("雛形").Range("B2") = worksheets(worksheets.Count).Range("B4") 33 Sheets("雛形").Range("V13") = worksheets(worksheets.Count).Range("B8") 34 Sheets("雛形").Range("Z13") = worksheets(worksheets.Count).Range("B9") 35 Sheets("雛形").Range("S13") = worksheets(worksheets.Count).Range("B10") 36 37 38 '書式整える 39 Range("A4,B1,B2,V13,Z13").VerticalAlignment = xlCenter 40 41 'セルの結合 42 Sheets("雛形").Range("AA1:AE1").Merge 43 Sheets("雛形").Range("V13:X14").Merge 44 Sheets("雛形").Range("Z13:AA14").Merge 45 Sheets("雛形").Range("S13:S14").Merge 46 47 48 '入力されたものを別シートとして出力 49 worksheets("雛形").Copy after:=worksheets("雛形") 50 51 '上記出力したシートの名前とシートの色を変更 52 Sheets("雛形 (2)").Name = Range("A4") & "請求書" 53 ActiveSheet.Tab.ColorIndex = 5 54 55 '雛形再構築 56 Sheets("雛形").Range("AA1:AE1").UnMerge 57 Sheets("雛形").Range("V13:X14").UnMerge 58 Sheets("雛形").Range("Z13:AA14").UnMerge 59 Sheets("雛形").Range("S13:S14").UnMerge 60 61 worksheets("雛形").Range("A4,B1,B2").Clear 62 worksheets("雛形").Range("AA1,V13,Z13").ClearContents 63 Sheets(2).Select 64 65 '入力完了した企業シートを削除 66 Application.DisplayAlerts = False 67 worksheets(worksheets.Count).Delete 68 Application.DisplayAlerts = True 69 End If 70 Next 71 72 'データベースから入力 73 Dim R As Range 74 Set R = Range("A4") 75 76 For k = worksheets.Count To 1 Step -1 77 If Workbooks("請求書雛形").worksheets(k).Tab.ColorIndex = 5 Then 78 For m = 6 To Sheets("請求一覧").Cells(Rows.Count, 1).End(xlUp).Row + 1 79 If Workbooks("請求書雛形.xlsm").worksheets(k).R = Workbooks("請求書データベース.xls").worksheets("請求一覧").Range("H" & m) Then 80 Workbooks("請求書雛形.xlsm").worksheets(k).Range("B17") = Workbooks("請求書データベース.xls").worksheets("請求一覧").Range("F" & m) 81 End If 82 Next m 83 84 End If 85 Next k 86 87 'PDF出力 現状本エクセルがあるフォルダに出力PDFを保存するように 88 Dim fileName As String 89 x = ActiveSheet.Name 90 91 For j = worksheets.Count To 1 Step -1 92 If worksheets(j).Tab.ColorIndex = 5 Then 93 worksheets(j).ExportAsFixedFormat Type:=xlTypePDF, _ 94 fileName:=ThisWorkbook.Path & "\" & _ 95 worksheets(j).Name, _ 96 Quality:=xlQualityStandard, _ 97 IncludeDocProperties:=True, _ 98 IgnorePrintAreas:=False, OpenAfterPublish:=True 99 End If 100 Next 101 102End Sub

試したこと

book、sheetを変数に組み込もうとすると"メソッドをサポートしていません"の
エラーが出るので一旦解きました。

エラー自体は"データベースからの入力"の6行目から出ております。

補足情報(FW/ツールのバージョンなど)

Excel 2010

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DreamTheater

2020/11/19 05:09

人に調べてもらうなら、どの行でエラーが発生するとかブックAやB(特にブックA)がどんな構成なのかくらい書きましょう。 (シート数が何枚とか)
退会済みユーザー

退会済みユーザー

2020/11/19 05:21

大変失礼致しました。 ご指摘していただきました点を修正致しました。 引き続き宜しくお願い致します。
guest

回答2

0

ベストアンサー

シートのレイアウトが不明なので細かく精査してませんが、
とりあえず「'データベースから入力」の部分を下記のように修正してください。

vba

1 'データベースから入力 2 Dim R As String 3 Set R = "A4" 4 5 For k = Worksheets.Count To 1 Step -1 6 If Workbooks("請求書雛形").Worksheets(k).Tab.ColorIndex = 5 Then 7 For m = 6 To Sheets("請求一覧").Cells(Rows.Count, 1).End(xlUp).Row + 1 8 If Workbooks("請求書雛形.xlsm").Worksheets(k).Range(R) = Workbooks("請求書データベース.xls").Worksheets("請求一覧").Range("H" & m) Then 9 Workbooks("請求書雛形.xlsm").Worksheets(k).Range("B17") = Workbooks("請求書データベース.xls").Worksheets("請求一覧").Range("F" & m) 10 End If 11 Next m 12 13 End If 14 Next k

解説

vba

1 Dim R As Range 2 Set R = Range("A4")

という書き方は現在のアクティブブックのアクティブシートのA4セルという意味になります。
それを使って、
Workbooks("請求書雛形.xlsm").Worksheets(k).R
というような書き方はできません。
すでに、ブックもシートも決まっているのに重ねて指定することはできないということです。

投稿2020/11/19 05:57

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/11/19 06:28

ご返答ありがとうございます。 上記修正させて頂きました! 私の記述したコードで"For m = 6 To Sheets("請求一覧").Cells(Rows.Count, 1).End(xlUp).Row + 1"でのエラーが出てしまいました。 こちらのコードもアクティブでないと作動しないのでしょうか。
hatena19

2020/11/19 08:36 編集

エラーメッセージはなんですか。 "請求一覧" というシートは現在アクティブなブックにありますか。 ブックやシートを省略する書き方=現在アクティブなブックを対象とする、というコーディングは読みづらいしバグの元になります。といっていちいちすべてにブック名とシート名をつけていてはコードが長くなりまた読みづらくなります。 ブックやシートを変数に代入してそれを利用するコーディングにすべきですね。
退会済みユーザー

退会済みユーザー

2020/11/19 08:59

ご返答ありがとうございます。 やはり変数への代入は必須ですよねぇ… このプログラムで代入に対してエラーが出たのですが、再度チャレンジ致します! ありがとうございました! ありがとうございました。
guest

0

ちゃんと全体は見ていませんが・・・

SetしたRはアクティブシートのものという情報がつくので、
何らかのシート名を指定しての利用はできません。(同じシートでも異なるシートでも)
そのままRange("A4")とすればいいのではないでしょうか。

VBA

1If Workbooks("請求書雛形.xlsm").worksheets(k).Range("A4") = Workbooks("請求書データベース.xls").worksheets("請求一覧").Range("H" & m) Then

投稿2020/11/19 05:38

編集2020/11/19 06:03
radames1000

総合スコア1923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2020/11/19 05:58

同じシートでも使用できないですね。
radames1000

2020/11/19 06:04

hatena19さん 表現が不適切でしたね。ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問