- ベストアンサー
Excel VBAで指定した印刷範囲をすべて印刷する方法
- Excelデータをフォーマットに差し込んで印刷するVBAがあります。しかし、番号が連番でない場合や重複する番号の行がある場合、正しく印刷できません。
- 問題なく全員を印刷する方法として、欠番も含めて連番で印刷するように修正し、重複する番号の行は印刷されないようにします。
- ただし、人数より多い番号は無視されます。また、一件のみ印刷する場合は、番号を指定して印刷することも可能です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
マクロではなく,「申込用紙_印刷」シートの具体的な数式を直す必要があります。 >Sheets("申込用紙_印刷").Range("d4").Value = section ・・・Range("d4")は番号を入力 「申込用紙_印刷」シートのD4セルに1から順に数字が入ると,シートの数式が =VLOOKUP(D4,データシート,列番号,FALSE) などといった数式になっていて,「番号の行のデータを参照してくる」ようにしていると推測されます。 これを =INDEX(データシート!B:B,D4+1) などのような数式に改めて,データシートの「番号」(A列)はあっさり無視して,単純に「所定の列の何行目(上から順に何番目)のデータ」を参照してくる式にやり直して下さい。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
【基礎編 関数のお勉強から必要ですか】 ○INDEX関数の使い方その1 =INDEX(Sheet1!B:B,3) のように数式を書くと,シート1のB列の上から3行目のセルを参照します ○INDEX関数の使い方その2 =INDEX(Sheet1!B2:F20,3,4) のように数式を書くと,シート1のB2:F20のセル範囲の,上から3行目,左から4列目のセルを参照します 間違えないように: 「B2:F20のセル範囲の,上から3行目,左から4列目」とは,B2セルが「1行目の1列目」です。D3セルは「2行目の3列目」になります。 >シートの数式は、以下のようになっていて他のシートから参照しています。 >=VLOOKUP(d4,INDIRECT(d2),2,) 使い方その2を利用すると =INDEX(INDIRECT(D2),D4,2) のようにして,D4に1,2,3…が入れば「INDIRECT(D2)」の上から順に1,2,3行目(の2列目)を採ってこれることがわかります。 D2セルにたとえば具体的に「Sheet1!B2:C10」と書いてあったとすると,いま実際に欲しい「その2列目」はSheet1!C2:C10ですから E2セルに「Sheet1!C2:C10」と書いておいて 使い方その1: =INDEX(INDIRECT(E2),D4) とすれば良いことが判ります。 (判りやすくE2を使って説明しましたが,実際にはD2の「Sheet1!B2:C10」を「Sheet1!C2:C10」に書き換えて使えばよいという事です)
お礼
早々に丁寧な回答をいただきありがとうございます。 答えそのものをいただきながら、スキル不足で作業に手間取ってしまいました。 おかげで希望どおりに動くようになり感動です。 また機会がありましたらよろしくお願いいたします。
お礼
いつも早々に回答をいただきありがとうございます。 シートの数式は、以下のようになっていて他のシートから参照しています。 =VLOOKUP(d4,INDIRECT(d2),2,) ただこれをどう =INDEX(データシート!B:B,D4+1) などのような数式に改めて参照先を変えるのか、 実はINDEX関数を使ったことがないので先ほどから四苦八苦しているところです。 また進展がありましたらご報告いたします。 お気づきの点がありましたらご指南ください。 よろしくお願いいたします。