[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『【VBA】データ一覧から請求書を発行したい』(マクロン)
VBA・マクロ初心者です。
元データから雛型へ転記させて請求書を発行する方法が上手くいかないので質問させてください。
◆ブック内には「請求データ」と「原稿」の2つのシートがあります。
シート内容は下記の通りです。
Dim i As Long
For i = 2 To 31
Worksheets("原稿").Copy After:=Worksheets(Worksheets.Count)
'データの作成 Dim name As String '会社名1 name = wsData.Cells(i, 1).Value Dim name2 As String '会社名2 name2 = wsData.Cells(i, 2).Value Dim number As Long '請求書番号 number = wsData.Cells(i, 3).Value Dim amount As Long '金額 amount = wsData.Cells(i, 4).Value
'データを転記 wsTemplate.Range("A5").Value = name & name2 wsTemplate.Range("H4").Value = number wsTemplate.Range("F16").Value = amount wsTemplate.Range("A3").Value = Date ActiveSheet.name = Range("H4") & "(" & name2 & ")" Next i End Sub
◆実現したいこと
雛型である【原稿】をコピーして、【請求データ】30社分のデータが転記されたシートを、
【原稿】の右横に30シート分並べたい。(シート名も同じシート名と請求書番号が表示される)
◆困っていること
実際に実行すると、雛型である【原稿】にも【請求データ】のデータが転記されてしまったり、
作成されたシートの中身と、シート名(請求書番号と会社名2)が合わなくなってしまっています。
どのように修正すればよろしいでしょうか。ご教示よろしくお願いいたします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
コードを省略していませんか? オブジェクト変数への代入文が見当たりませんが
(渡辺ひかる) 2019/10/10(木) 14:50
渡辺ひかるさんへ wsTemplate はオブジェクト名とかいてありますので...
(´・ω・`) 2019/10/10(木) 14:55
(´・ω・`) さん
>wsTemplate はオブジェクト名とかいてありますので...
それは読んでいます。
質問者さんは
>実際に実行すると、雛型である【原稿】にも【請求データ】のデータが転記されてしまったり、
と書いているので、その辺が原因ではないかと当たりを付けました。
(渡辺ひかる) 2019/10/10(木) 15:02
コメントありがとうございます。
コードは省略しておりません。
Sub 請求書作成()・・・End Subで全てです。
オブジェクト名は、VBA画面の、プロパティウィンドウの(オブジェクト名)に直接入力しました。
無知でお恥ずかしいのですが、
オブジェクト変数への代入文はあったほうがよろしいのでしょうか?
(マクロン) 2019/10/10(木) 15:32
↓このへんどうなりました? [[20190501153428]] 『エクセルのセルのデータでGOOGLE画像検索結果をセルに貼り付け』(マクロン) [[20190227133724]] 『重複行を削除して該当データを,で結ぶ方法』(マクロン) [[20180516160559]] 『ExcelVBAでワードに差し込み印刷』(マクロン)
そして質問の方は、私も【原稿】である"wsTemplate"に転記するようになってるのがおかしいと思います。
Sub さんぷる() Dim wsData As Worksheet Dim i As Long
Set wsData = Worksheets("請求データ")
For i = 2 To 31
'ひな形をシート末尾にコピー挿入 Worksheets("原稿").Copy After:=Worksheets(Worksheets.Count)
'【末尾にコピー挿入したシートに】データを転記 With Worksheets(Worksheets.Count) .Range("A5").Value = wsData.Cells(i, 1).Value & wsData.Cells(i, 2).Value .Range("H4").Value = wsData.Cells(i, 3).Value .Range("F16").Value = wsData.Cells(i, 4).Value .Range("A3").Value = Date .name = .Range("H4") & "(" & wsData.Cells(i, 2).Value & ")" End With Next i
End Sub
(もこな2) 2019/10/10(木) 15:42
完全にかぶりましたが お詫びもあるので
そういうことですか、オブジェクト変数名だと思い込んでいました
(´・ω・`) さん の指摘もやっとわかりました、すみません。
>オブジェクト名は、VBA画面の、プロパティウィンドウの(オブジェクト名)に直接入力しました。
あまり見かけない処理ですね
ということは
Worksheets("原稿")のオブジェクト名が wsTemplate ということですね
でしたら Worksheets("原稿")をコピーしても新規シートのオブジェクト名は wsTemplate にはなりませんから(wsTemplate1とかになるようです)
>wsTemplate.Range("A5").Value = name & name2
などとしてもWorksheets("原稿")に書き込まれることは当然ですね。
ふつうはこんな風に書くんじゃないでしょうか
name とか number とか は プロパティ名としてすでにあるので、変数名としてはお勧めしないです
Sub 請求書作成()
Dim i As Long Dim myData As Worksheet Dim myTemplate As Worksheet
Set myData = Worksheets("請求データ") For i = 2 To 31 With Worksheets .Item("原稿").Copy After:=.Item(.Count) Set myTemplate = .Item(.Count) End With With myTemplate .Range("A5").Value = myData.Cells(i, 1).Value & myData.Cells(i, 2).Value .Range("H4").Value = myData.Cells(i, 3).Value .Range("F16").Value = myData.Cells(i, 4).Value .Range("A3").Value = Date .name = myData.Cells(i, 3).Value & "(" & myData.Cells(i, 2).Value & ")" End With Next i
End Sub
(渡辺ひかる) 2019/10/10(木) 16:00
コメントありがとうございます。
また、私自身はこちらの掲示板は初投稿になりますので、記載の質問の方とは別人になります。
(マクロ+マカロンを組み合わせたら可愛いと思い、なんとなくこのNNにしました。)
サンプルコードを早速試しましたら、私が目指していたコードでした。
オブジェクト変数の代入・【原稿】である"wsTemplate"に転記がおかしい等大変勉強になりました。
>渡辺ひかる様
再度コメントありがとうございます。
丁寧に説明して貰えたおかげで、自分のコードの変な所に気付けました。
name、number の変数名もあまり良くないのですね。勉強になります。
こちらのサンプルコードも正に理想のものでした。
まだ理解できていないコード部分もあるので、じっくり調べていこうと思います。
お二人とも本当に助かりました。
サンプルコードを元に、使わせていただきます。
本当にありがとうございました。
(マクロン) 2019/10/10(木) 16:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.