【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

Sheets("リスト")Sheets("原本")を使い作成してます。
色々作成しましたが。。。


Sub 請求書作成()
Dim n, i As Long

n = Worksheets("リスト").Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To n
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = 氏名.Value
'2行目を請求書ひな形に転記 氏名
.Cells(3, 5).Value = Sheets("リスト").Cells(i, 1).Value
.Cells(23, 5).Value = Sheets("リスト").Cells(i, 1).Value
.Cells(45, 5).Value = Sheets(" リスト").Cells(i, 1).Value
.Cells(63, 5).Value = Sheets("リスト").Cells(i, 1).Value
'2行目を請求書ひな形に転記 合計金額
.Cells(5, 6).Value = Sheets("リスト").Cells(i, 5).Value
.Cells(25, 6).Value = Sheets("リスト").Cells(i, 5).Value
.Cells(45, 6).Value = Sheets("リスト").Cells(i, 5).Value
Sheets("原本").Cells(65, 65).Value = Sheets("リスト").Cells(i, 5).Value
'2行目を請求書ひな形に転記 消費税欄
.Cells(13, 6).Value = Sheets("リスト").Cells(i, 5).Value
.Cells(33, 6).Value = Sheets("リスト").Cells(i, 5).Value
.Cells(53, 6).Value = Sheets("リスト").Cells(i, 5).Value
.Cells(73, 6).Value = Sheets("リスト").Cells(i, 5).Value
'2行目を請求書ひな形に転記 入所日
.Cells(7, 11).Value = Sheets("リスト").Cells(i, 2).Value
.Cells(27, 11).Value = Sheets("リスト").Cells(i, 2).Value
.Cells(47, 11).Value = Sheets("リスト").Cells(i, 2).Value
.Cells(67, 11).Value = Sheets("リスト").Cells(i, 2).Value
'2行目を請求書ひな形に転記 退所日
.Cells(8, 11).Value = Sheets("リスト").Cells(i, 3).Value
.Cells(28, 11).Value = Sheets("リスト").Cells(i, 3).Value
.Cells(48, 11).Value = Sheets("リスト").Cells(i, 3).Value
.Cells(68, 11).Value = Sheets("リスト").Cells(i, 3).Value
'2行目を請求書ひな形に転記 日数
.Cells(9, 11).Value = Sheets("リスト").Cells(i, 4).Value
.Cells(29, 11).Value = Sheets("リスト").Cells(i, 4).Value
.Cells(49, 11).Value = Sheets("リスト").Cells(i, 4).Value
.Cells(69, 11).Value = Sheets("リスト").Cells(i, 4).Value
End With

i = i + 1

Next
End Sub

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

  • うーん・・・

    お返事ありがとうございます。私の説明不足でした。
    コード内に、コメントしてるひな形とはSheets("原本")のことです。
    転記コードが4行ずつあるのは同じ書式のもの4枚分です。
    (領収書(控)、領収書、請求書、請求書(控))
    リストの情報を1行ずつ原本に転記していき、コピーしたsheetのインデックス名にリストの氏名を入れていくということです。Worksheets("原本").Copy After:=Worksheets(Worksheets.Count) でとまってしまいます。
    よろしくお願いします。

      補足日時:2020/07/03 00:28
  • うーん・・・

    返信ありがとうございます
    >複製したシート名を氏名.Valueに...何を指しているか説明してください。
    .Name =Sheets("リスト") 氏名.Value
    です
    >項目が違うのに同じ....これで合っているのでしょうか?
    矛盾してますがあってます
    >同じシートだとコードは言って...、違うシートですか?
    同じシートです
    >値を入れて行く前にコピーされていますが、示され....
    >同じシートだとコードは言っていますが違うシート?
    前回の補足がまちがいで原本を先にコピーしてから作りこんでいこうと思いました
    同じシートです
    >ループで処理しなくても下記、..
    凄い!納得です
    Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
    インデックスが有効範囲にありませんとでてしまいます
    初心者でお手数おかけします宜しくお願いします

    No.6の回答に寄せられた補足コメントです。 補足日時:2020/07/05 11:48
  • うーん・・・

    >また、実際の...確認してください
    VBEのVBA Project名が違う所で作成していましたお恥ずかしい
    >何の値を指しているのですか?
    シートのインデックスにリストの氏名をいれたっかたのですが、
    >氏名.Valueにインデ..2度目...が、どうでしょう?
    エラーになりました
    Dim 氏名 As Integer
    .Name = Sheets("リスト").Cells(i, 1).Value
    これでできましたが 他にどのようなコードがありますでしょうか?
    >#4では金額と言う...何を意味でしょうか?
    これは間違って書いてしまいました
    > ループで処理しなくても下記で良いのですが、
    For j = 13 To 73 Step 20
    .Cells(j, 6).Value = Sheets("リスト").Cells(i, 5).Value
    Next
    今 これで作成してます

    No.7の回答に寄せられた補足コメントです。 補足日時:2020/07/05 19:03
  • うれしい

    返信、遅くなりました。

    新ワークブックに請求書ができました。作成中に、イメージもしましたが、そもそも、自分の力量ではなかなか、と諦めのところがありましたので、VERY感謝です。
    >シート名を別に付.....(リストシートの行の値ですべてが決まってくるので、1行ずつ実行されると言う意味です) 
    これは、シートの名前を別に付けたいときは、新たに列を作成、そこを指定してコードを作成すれば良いということですよね。()内の意味がよく分からないのですが教えてください。

    No.10の回答に寄せられた補足コメントです。 補足日時:2020/07/09 13:15
  • うーん・・・

    いつも丁寧な返信ありがとうございます
    >On Error Resume Next 'うまく動かない場....
    > Application.DisplayAlerts = False
    >Application.ScreenUpdating = False
    >Application.ScreenUpdating = True
    > Application.DisplayAlerts = True
    は初めて使います少し調べて勉強になりましたが長いコードの時にはすごく有効ということですね
    原本の作成ですがきれいに方眼使用再作成セル結合にしましたが値が入らず(-_-;)色々調べたところ左上のセルを使うことで解決しました方眼利用しない方が賢明ですか?

    もう1点コードを加えた箇所ができ文字数オーバーでした再投稿します
    よかったら又よろしくお願いします

    No.11の回答に寄せられた補足コメントです。 補足日時:2020/07/12 16:52
  • うーん・・・

    返信ありがとうございます。
    >Excelでシートを数十シート作る事やセルの結合などもほぼ、行いませんね。
    上記のコメントが気になりました。私がこのコードで請求書を作成するシート数は、毎月100枚から150枚のつもりしたので。。。無理がある作業でしょうか?

    >.......目的と方法の合理性を見出す事が出来ず、やめました。
    方眼利用や、セルの結合、後々問題が起きそうなので、私もなるべく避けていくことにします。

    No.12の回答に寄せられた補足コメントです。 補足日時:2020/07/13 23:48

A 回答 (13件中11~13件)

あれ?


このコードってリストにある行数分シートを新規作成してデータを振り分けていくのではなかったのかな?
また老眼かな?
最近似たような質問があったのでそう思い込んでしまった?
    • good
    • 0

おはようございます。


なさりたい事が分かりませんので、
先ず、コードを整理してみてください。

i = i + 1 は i がループカウント変数なので
2行ずつ移動を希望していないのなら、不要かと思います。
また、.Cells(3, 5).Value = Sheets("リスト").Cells(i, 1).Value は、
同じ場所に入力されますので結果、
.Cells(3, 5).Value = Sheets("リスト").Cells(n, 1).Value と同じ結果になります。
左辺のループは必要ないのですか?
必要無いのであれば、

例えば、
'2行目を請求書ひな形に転記 氏名
.Cells(3, 5).Value = Sheets("リスト").Cells(i, 1).Value
.Cells(23, 5).Value = Sheets("リスト").Cells(i, 1).Value
.Cells(45, 5).Value = Sheets(" リスト").Cells(i, 1).Value
.Cells(63, 5).Value = Sheets("リスト").Cells(i, 1).Value

これは、

Range("E3,E23,E45,E63").Value = Sheets("リスト").Cells(i, 1).Value

1行で良いかと思います。

何かを Sheets("リスト")から探して出力するなら、Findなどを使って iを特定するか
Forで探すなら、Sheets("リスト").Cells(n, 1).Value(例) を
Ifで条件を設定して条件に合った時メインの処理を実行させます。
For i = 2 To n


If Sheets("リスト").Cells(i, 1).Value="氏名" Then
    • good
    • 0

まずVBAでは



>Dim n, i As Long

この書き方をすると変数:i は Long になりますが、変数:n はValiant型を宣言している事になります。
VBとは違いVBAでも1つ1つ型の指定が必要かと。

あとこのコード何をしたいのか不明です。

>.Name = 氏名.Value

いくつかのシートを作成しつつ値の代入をしたいようですが、シート名が全て同じになってしまうのでは?
『氏名』が何を指しているのかわかりませんが、そこを書き込みたいデータ数分揃えなきゃいけないかと。
例えばシート:リスト等のどこかの列に並べておいて同じようにCells(i,???)で指定するなど。
    • good
    • 0

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