[[20140911152219]] 『明細書作成の問い合わせ』(おじさん) ページの最後に飛ぶ

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

 

『明細書作成の問い合わせ』(おじさん)

明細書作成で行き詰っています。
1)部材の発注明細書作成で、下記プログラムを参考書から応用して使用しておりましたが、発注先の注文数が増えて明細書の行数以上にデータがあり作成していた明細書が使用できなくなりました。貼付け用データの行数を指定して明細書1ページ目・2ページ目・・・と張り付けるには、どのように記述を加えればよいのかご教授お願いいたします。
尚、明細書の明細貼付けは1ページ目10行目から39行目で、2ページ目は49行目から78行目、3ページ目は88行目から117行目で作成しております。貼付け用データは7行目から2006行目までで作成しております。
2)特定の部材が斡旋部材扱いとなったため、別に斡旋部材明細書として発行しなければなりません、その部材が判別できるよう貼付け用データのM列に * のしるしを入力しております。明細書作成時、自動的に振り分けできないでしょうか、よろしくお願いいたします。

Sub 明細書作成()

    Dim Gyousya As String
    Dim i As Integer
    Dim cnt As Integer

    Gyousya = Worksheets("貼付用データ").Range("C3").Value
    Worksheets("明細書").Copy after:=Worksheets("明細書")
    Worksheets(7).Name = Gyousya
    Worksheets(Gyousya).Range("B5") = Gyousya

    cnt = 10
    For i = 7 To 2006
        With Worksheets("貼付用データ")
            If .Range("C" & i) = Gyousya Then
                Worksheets(Gyousya).Range("B" & cnt) = .Range("D" & i)
                Worksheets(Gyousya).Range("C" & cnt) = .Range("E" & i)
                Worksheets(Gyousya).Range("D" & cnt) = .Range("F" & i)
                Worksheets(Gyousya).Range("E" & cnt) = .Range("G" & i)
                Worksheets(Gyousya).Range("F" & cnt) = .Range("H" & i)
                Worksheets(Gyousya).Range("G" & cnt) = .Range("I" & i)
                Worksheets(Gyousya).Range("H" & cnt) = .Range("J" & i)
                Worksheets(Gyousya).Range("I" & cnt) = .Range("K" & i)
                Worksheets(Gyousya).Range("J" & cnt) = .Range("L" & i)
                cnt = cnt + 1
            End If
        End With
    Next

End Sub

以上よろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 明細書のフォーマットが分からないけど、一応
 もし117行目まできちゃったらどうするんですか?
    Sub 明細書作成()
        Dim Gyousya As String
        Dim i As Integer
        Dim cnt As Integer
        Dim DSH As Worksheet
        Set DSH = Sheets("貼付用データ")
        Gyousya = DSH.Range("C3").Value
        Sheets("明細書").Copy after:=Sheets(Sheets.Count)

        With Sheets(Sheets.Count)
            .Name = Gyousya
            .Range("B5") = Gyousya
            cnt = 10
            For i = 7 To 2006
                If DSH.Range("C" & i) = Gyousya Then
                    If .Range("M" & i) = "*" Then
                        '//斡旋明細の処理
                    Else
                        '//通常明細の処理
                        .Range(.Cells(cnt, "B"), .Cells(cnt, "J")).Value = DSH.Range(DSH.Cells(i, "D"), DSH.Cells(i, "L")).Value
                        Select Case cnt
                            Case 39:    cnt = 49
                            Case 78:    cnt = 88
                            Case 117:   Exit For '//117行目以降は?
                            Case Else:  cnt = cnt + 1
                        End Select
                    End If
                End If
            Next
        End With
    End Sub

 私なら印刷設定で、先頭行とフッター入れて、入力されていないセルは非表示にします。
(稲葉) 2014/09/11(木) 16:26

稲葉さん
早速のご返答ありがとうございます。
説明不足で申し訳ないです。まず、117行目以降はないと判断しております。印刷設定も考えましたが、ページごとの小計表示を最下段に設定したため、データが小計欄まで張り付いてしまいました。
早速コードを入力しましたが、明細書をコピーして新しいワークシートに業者名を入力するところでエラーが発生しました。どのようにすればよいのかご教授お願いいたします。明細書はシート6枚目にあり、コピーした明細書が7枚目になるようになっておりました。
申し訳ないですが、よろしくお願いいたします。

(おじさん) 2014/09/11(木) 17:29


 エラーの内容とフォーマットが分からないと答えようがないですなぁ・・・

(稲葉) 2014/09/11(木) 18:05


稲葉さんありがとうございます。
貼付け用シートは
     A       B      C       D        E    F     G    H     I       J      K      L      M
 1
 2
 3       C3に業者名
 4
 5
 6 発行日 担当 業者名 発注番号 型番 品名 色 数量 単価 発注金額 備考 発注日 斡旋物
 7 9/1     A     XXX     9001     A-1   AAA   赤    12   100    1200            9/2    *
 8 9/1     B     XXX     9002     B-1   BBB        100   125   12500            9/2
 9  9/3     A     XXX     9003     C-1   CCC   黒   150    80   12000            9/4    
10
・
・
・
2006

明細書シートは、

     A       B      C       D        E    F     G    H     I       J      K      L      M
 1
 2
 3       
 4
 5         B5に業者名
 6
 7
 8
 9 発注番号 型番 品名 色 数量 単価 発注金額 備考 発注日    
10 9002     B-1   BBB        100   125   12500            9/2
11 9003     C-1   CCC   黒   150    80   12000            9/4
12
・
・
・
39
40                               小計  24500
このようになっており、他に入力シートや単価表シート・月別データ等のシートがあり、貼付け用シートが5番目で明細書シートが6番目にあります。

エラーは、実行時 .Name = Gyousya でデバックとなります。
初心者のため、どう対処してよいのかわかりません。よきアドバイスをお願いいたします。

(おじさん) 2014/09/12(金) 15:32


 その「エラーの内容」と「エラー番号」が知りたいんですけど
 同じシート名があるか、シート名に使えない文字がありませんか?
 変数Gyousyaがどうなっているかローカルウィンドウ等で確認してください。

 あとシート名を番号で指定するのはやめた方がいいです。
 シートの並び順が絶対変わらないならそれでもいいですが、通常新しくシートを作成するときは
 一番後ろに追加して、一番後ろのシートを編集する、というコードになります。
 提示したコードでは
 >Sheets("明細書").Copy after:=Sheets(Sheets.Count)
 >With Sheets(Sheets.Count)
 この2行です。

(稲葉) 2014/09/12(金) 16:00


稲葉さん、ありがとうございます。
いろいろと確認し、業者シートの追加シートはエラーも出ず作成できるようになりましたが、明細内容が反映されません。入力に間違いはありません、ご教授お願いいたします。

(おじさん) 2014/09/13(土) 16:06


 こっちはテストデータで問題ないことを確認しているので、
 あとはご自身で修正していただくしかありません  
 変数が希望通りに変化しているか確認してください
(稲葉) 2014/09/14(日) 16:08

稲葉さん、ありがとうございます。
確認、修正を行います。また何かありましたら、質問させていただきます。
いろいろと教えていただきありがとうございました。

(おじさん) 2014/09/15(月) 08:54


稲葉さん、本当にすみません。
自分で確認修正を試みましたが、何ともなりません。
初心者で何もわかりませんので、教えていただきたいのですが、>’//斡旋明細の処理 及び >’//通常明細の処理 の部分に、何か記述が入るのでしょうか。
わからず困っております、よろしくお願いいたします。

(おじさん) 2014/09/16(火) 10:16


 デバッグしてくださいよ。
 >If .Range("C" & i) = Gyousya Then
 この行は自分で作ったコードですよね?

 提示されたデータには「貼付用データシートのC列i行」の業者名は「XXX」で
 C3の業者名は「C3に業者名」で、一致していませんよね?

 なので私は「何も転記されないこと」は正しいと判断しましたが、違うのですか?

 >自分で確認修正を試みましたが、何ともなりません。 
 どのように修正されて、どのような結果になったことが「何ともならなかった」事なんですか?

 シート名を変更してみたけど、変数をSetするところで「インデックスが有効範囲にありません」エラー
 がでたので「なんともならなかった」のですか?

 それとも貼付用データと明細の項目の並び順が異なるから、そのまま貼り付けると項目がずれてしまう
 ことが「なんともならなかった」のですか?

 それとも別の何かですか?

 >>’//斡旋明細の処理 及び >’//通常明細の処理
 どちらもただのコメントです。

 前者は「M列に"*"がはいっていたら、処理を分岐してほしいとのことでしたので、ご自身で処理を記述
 する必要がございます。
 後者は既に処理が記述してあります。

 VBAの初心者は仕方ありませんが、
 日本語の初心者ではありませんよね?

 人に伝える気持ちを忘れて、初心者だからと甘えないでください。

 『マクロを「書いてみた」「動かした」「ダメでした」。』
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200.html
 『デバッグトレースの開始方法』
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html

(稲葉) 2014/09/16(火) 10:38


稲葉さん
ご指摘、ありがとうございます。
不明点を適格に相手に伝えること、相手の立場に立ち考えて質問等行うよういたします。
また、何かありましたらその時はよろしくお願いいたします。
(おじさん) 2014/09/16(火) 11:20

コメント返信:

[ 一覧(最新更新順) ]


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