
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
No.3
- 回答日時:
あれ?
このコードってリストにある行数分シートを新規作成してデータを振り分けていくのではなかったのかな?
また老眼かな?
最近似たような質問があったのでそう思い込んでしまった?
No.2
- 回答日時:
おはようございます。
なさりたい事が分かりませんので、
先ず、コードを整理してみてください。
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
No.1
- 回答日時:
まずVBAでは
>Dim n, i As Long
この書き方をすると変数:i は Long になりますが、変数:n はValiant型を宣言している事になります。
VBとは違いVBAでも1つ1つ型の指定が必要かと。
あとこのコード何をしたいのか不明です。
>.Name = 氏名.Value
いくつかのシートを作成しつつ値の代入をしたいようですが、シート名が全て同じになってしまうのでは?
『氏名』が何を指しているのかわかりませんが、そこを書き込みたいデータ数分揃えなきゃいけないかと。
例えばシート:リスト等のどこかの列に並べておいて同じようにCells(i,???)で指定するなど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
ユーザーフォームに入力したデ...
-
VBAエクセルの非アクティブシー...
-
XL:BeforeDoubleClickが動かない
-
Excel VBA 複数行を数の分だけ...
-
EXCELVBAを使ってシートを一定...
-
エクセルのマクロでアクティブ...
-
Excel チェックボックスにチェ...
-
VBA オートフィルター繰り返し
-
VB6.0でEXCELにシートを追加したい
-
SheetsクラスのSelectメソッド...
-
ExcelVBA シート名を複数セルか...
-
VBA 存在しないシートを選...
-
VBAで同じシート名のコピー時は...
-
Excel VBA リンク先をシート...
-
エクセルVBA Ifでシート名が合...
-
ExcelのVBAを使い、複数シート...
-
ブック名、シート名を他のモジ...
-
VB.net(2005)でエクセルの特定...
-
VBA イベントプロシージャ Deac...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
実行時エラー1004「Select メソ...
-
特定の文字を含むシートだけマ...
-
XL:BeforeDoubleClickが動かない
-
【ExcelVBA】全シートのセルの...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【Excel VBA】Worksheets().Act...
-
エクセルVBA Ifでシート名が合...
-
Excel チェックボックスにチェ...
-
シートが保護されている状態で...
-
Excel VBA リンク先をシート...
-
ブック名、シート名を他のモジ...
-
ExcelのVBAのマクロで他のシー...
-
同じ作業を複数のシートに実行...
-
エクセルのシート名変更で重複...
-
VBA 検索して一致したセル...
-
【VBA】色のついたシート名を取得
-
VBAで指定シート以外の選択
おすすめ情報
お返事ありがとうございます。私の説明不足でした。
コード内に、コメントしてるひな形とはSheets("原本")のことです。
転記コードが4行ずつあるのは同じ書式のもの4枚分です。
(領収書(控)、領収書、請求書、請求書(控))
リストの情報を1行ずつ原本に転記していき、コピーしたsheetのインデックス名にリストの氏名を入れていくということです。Worksheets("原本").Copy After:=Worksheets(Worksheets.Count) でとまってしまいます。
よろしくお願いします。
返信ありがとうございます
>複製したシート名を氏名.Valueに...何を指しているか説明してください。
.Name =Sheets("リスト") 氏名.Value
です
>項目が違うのに同じ....これで合っているのでしょうか?
矛盾してますがあってます
>同じシートだとコードは言って...、違うシートですか?
同じシートです
>値を入れて行く前にコピーされていますが、示され....
>同じシートだとコードは言っていますが違うシート?
前回の補足がまちがいで原本を先にコピーしてから作りこんでいこうと思いました
同じシートです
>ループで処理しなくても下記、..
凄い!納得です
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
インデックスが有効範囲にありませんとでてしまいます
初心者でお手数おかけします宜しくお願いします
>また、実際の...確認してください
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
今 これで作成してます
返信、遅くなりました。
新ワークブックに請求書ができました。作成中に、イメージもしましたが、そもそも、自分の力量ではなかなか、と諦めのところがありましたので、VERY感謝です。
>シート名を別に付.....(リストシートの行の値ですべてが決まってくるので、1行ずつ実行されると言う意味です)
これは、シートの名前を別に付けたいときは、新たに列を作成、そこを指定してコードを作成すれば良いということですよね。()内の意味がよく分からないのですが教えてください。
いつも丁寧な返信ありがとうございます
>On Error Resume Next 'うまく動かない場....
> Application.DisplayAlerts = False
>Application.ScreenUpdating = False
>Application.ScreenUpdating = True
> Application.DisplayAlerts = True
は初めて使います少し調べて勉強になりましたが長いコードの時にはすごく有効ということですね
原本の作成ですがきれいに方眼使用再作成セル結合にしましたが値が入らず(-_-;)色々調べたところ左上のセルを使うことで解決しました方眼利用しない方が賢明ですか?
もう1点コードを加えた箇所ができ文字数オーバーでした再投稿します
よかったら又よろしくお願いします
返信ありがとうございます。
>Excelでシートを数十シート作る事やセルの結合などもほぼ、行いませんね。
上記のコメントが気になりました。私がこのコードで請求書を作成するシート数は、毎月100枚から150枚のつもりしたので。。。無理がある作業でしょうか?
>.......目的と方法の合理性を見出す事が出来ず、やめました。
方眼利用や、セルの結合、後々問題が起きそうなので、私もなるべく避けていくことにします。