アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA 初心者です。強縮ですがまたお力添え頂けたらと思います。
出来ないことが3点あります。。。


①売上データを基に請求書を作成するマクロを組んでいる所なのですが、ひとまず1枚のデータ基を請求書に転記するマクロは組めました。
次の段階として、2枚目以降のデータを対象の列から最終行を取得して貼り付ける。ということを行いたく、Cells(Rows.Count, "").End(xlUp).Rowを使うのは解るのですがデータ基の繰り返しForの値との組み合わせ?方がわかりません。

下記に1枚のデータ基を請求書に起こすVBAを記載いたします。
どこにどのように追記したらよいのか教えて頂けたらと思います。

また、請求書のD列を対象として小計1、小計2に再度新しいデータ情報をB~I列迄貼付を行いたいです。(B・C列は最初のみ ※写真1枚目参照下さい)

②データ基で金額(AC列)が0の場合はY~AB列の情報も転記せず次の内容に~としたいのですが
わからない状態です。(写真2枚目参照下さい)
IfでAC列が0の場合とするのはわかりますが組込み方がわかりません・・・

③データ基のブック名・シート名が一部変更になっても大丈夫なVBAを組もうと*を使って作ったのですがエラーが起きてしまいつくれませんでした。
ブック名・シート名共にD6までは固定で00101~どんどん変動していきます。
エラーの対応策をご教授頂けたらと思います。
※今は請求書作成をとりあえず先に。と1つの名前で作成しています。

周りにVBA組める人がいないのでここに頼ってしまい申し訳ありませんが宜しくお願い致します。


-------------
Sub 請求書作成()

'シートの指定
Dim wb1, wb2 As Workbook
Dim sh1, sh2 As Worksheet
Dim x, y, m, n As Long

Set wb1 = Workbooks("売上管理票(D600101).xlsx")
Set wb2 = Workbooks("請求書.xlsm")
Set sh1 = wb1.Worksheets("D600101")
Set sh2 = wb2.Worksheets("請求書")

x = 168 & y = 17 & m = 172 & n = 28

With sh2 '小計1
For x = 168 To 171
For y = 17 To 20

Cells(6, 2) = sh1.Cells(3, 14) '取引先名
Cells(17, 2) = sh1.Cells(2, 8) '案件コード
Cells(17, 3) = sh1.Cells(2, 14) '案件名
Cells(y, 4) = sh1.Cells(x, 25) '項目
Cells(y, 5) = sh1.Cells(x, 26) '数量
Cells(y, 6) = sh1.Cells(x, 27) '単位
Cells(y, 7) = sh1.Cells(x, 28) '単価
Cells(y, 8) = sh1.Cells(x, 29) '金額
x = x + 1

Next
Next
With sh2 '小計2
For m = 172 To 174
For n = 28 To 30

Cells(28, 2) = sh1.Cells(2, 8) '案件コード
Cells(28, 3) = sh1.Cells(2, 14) '案件名
Cells(n, 4) = sh1.Cells(m, 25) '項目
Cells(n, 5) = sh1.Cells(m, 26) '数量
Cells(n, 6) = sh1.Cells(m, 27) '単位
Cells(n, 7) = sh1.Cells(m, 28) '単価
Cells(n, 8) = sh1.Cells(m, 29) '金額
m = m + 1
Next
Next
End With
End With

End Sub

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

  • 請求書の画像です

    「VBA 最終行取得からの繰り返し貼付」の補足画像1
      補足日時:2020/02/17 08:13
  • データ基の画像です

    「VBA 最終行取得からの繰り返し貼付」の補足画像2
      補足日時:2020/02/17 08:13
  • つらい・・・

    VBAの修正、Withの意味がないとのことでしたのでWith文やめました。
    再度きちんと質問させて頂くため、こちらの質問はクローズさせて頂きます。

      補足日時:2020/02/19 12:03

A 回答 (1件)

取り合えず。



>Dim wb1, wb2 As Workbook

この宣言方法はwb2は確かにWorkbook型になりますが、wb1はValiant型になります。
他もそうですがVBAではこのような書き方で宣言する型の省略は出来ません。
VB.Net であればこの書き方でも同じ型の宣言としてみなされます。

>x = 168 & y = 17 & m = 172 & n = 28

書き方としては初めて見たので合っているのか否かは不明ですが、『何を目的としている?』と疑問はあります。
x = 168 : y = 17 : m = 172 : n = 28
これなら各変数への代入をしようとしているって事はわかりますけど。

>With sh2 '小計1~2

With ~ End With文として意味を成しているとは思えません。

>Cells(6, 2) = sh1.Cells(3, 14) '取引先名

右辺がsh1のシートを指しているとして左辺がsh2のシートのセルをってことであれば、

.Cells(6, 2) = sh1.Cells(3, 14) '取引先名

Cellsの前にピリオドを付けないとWith文とは繋がらないかと。

と本題からずれましたが、本題の回答については理解できていませんのでそちらは常連さん(過去質との関係あり?)にお任せです。
    • good
    • 0
この回答へのお礼

色々とご指摘ありがとうございます。まだ始めたばかりできちんと組み立て、理解が出来ていないのが現状なのでとても勉強になります。
手元のVBAは修正したいとおもいます!!

お礼日時:2020/02/17 15:19

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

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