[[20191010144253]] 『【VBA】データ一覧から請求書を発行したい』(マクロン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『【VBA】データ一覧から請求書を発行したい』(マクロン)

VBA・マクロ初心者です。
元データから雛型へ転記させて請求書を発行する方法が上手くいかないので質問させてください。

◆ブック内には「請求データ」と「原稿」の2つのシートがあります。
シート内容は下記の通りです。


【請求データ】オブジェクト名:wsData
A1会社名1
B2会社名2
C3請求書番号
D4金額
どの列も、2行目以降にそれぞれの名前、数字が振り分けられている。
全部で30社ある。
【原稿】オブジェクト名:wsTemplate
請求書の雛型。このシートをひな形に、上記のデータを転記し、コピーさせていく。

◆現在記載しているコード
Sub 請求書作成()

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


>もこな2様

コメントありがとうございます。
また、私自身はこちらの掲示板は初投稿になりますので、記載の質問の方とは別人になります。
(マクロ+マカロンを組み合わせたら可愛いと思い、なんとなくこのNNにしました。)

サンプルコードを早速試しましたら、私が目指していたコードでした。
オブジェクト変数の代入・【原稿】である"wsTemplate"に転記がおかしい等大変勉強になりました。

>渡辺ひかる様

再度コメントありがとうございます。

丁寧に説明して貰えたおかげで、自分のコードの変な所に気付けました。
name、number の変数名もあまり良くないのですね。勉強になります。
こちらのサンプルコードも正に理想のものでした。
まだ理解できていないコード部分もあるので、じっくり調べていこうと思います。


お二人とも本当に助かりました。
サンプルコードを元に、使わせていただきます。
本当にありがとうございました。

(マクロン) 2019/10/10(木) 16:40


コメント返信:

[ 一覧(最新更新順) ]


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