
Excel VBA 一覧表のふたつの列のどちらかに値がある場合だけデータを別のシートへ...
2018/6/1810:55:14
Excel VBA 一覧表のふたつの列のどちらかに値がある場合だけデータを別のシートへ転記して一括印刷するコード
【作業環境】
OS:Windows7 Excel:2013
【現在の状況】
〇スイミングスクールの夏休み短期教室の参加者一覧表を作成しています。
〇夏休み短期教室には、通常のスイミングスクールに在籍している会員の他にも一般の方(非会員)や他のスポーツスクール(体操やテニス等)に在籍している会員も参加します。
〇スイミングスクール在籍会員に関しては、夏休み短期教室のテスト結果を通常スクールの担当コーチへ引き継ぐ必要があるため、テスト結果引継票を作成します。
【実現したいこと】
VBAを使用して参加者一覧表シートのスイミング会員のデータだけをテスト結果引継票シートへ転記して一括印刷したいのです。その際に、
①スイミング会員は参加者一覧表シートの欠席(Y列・データの入力規則でリストを設定)または種目(Z列)のどちらかに値(文字列)を必ず入力するので、ふたつの列のどちらかに値がある行のデータだけを転記して印刷する
②参加者情報一覧表シートのクラス2(M列)に値(数値または文字列)がある場合はテスト結果引継票を2部印刷する
③テスト結果引継票の印刷は、マクロを登録した「引継票発行」という図形(AE1:AG2)をクリックすることで実行し、図形をクリックした時に「印刷にはA4用紙の裏紙を使用して下さい。」というメッセージボックスを表示させる
上記3点を実現するためのコードをご教示下さい。どうか宜しくお願い致します。
【ファイル構成】
1.参加者一覧表シート(参考画像・一覧表の一部を表示)
〇短期水泳教室参加者のデータを入力する一覧表です。
〇一覧表の範囲はA2:AC402までで、最大400名を登録可能にしてあります。
〇参加者がスイミングを含むスポーツスクール会員の場合は、氏名(D列)とフリガナ(E列)は会員番号を入力することでIF関数+VLOOKUP関数を使用して在籍者一覧表シート(後述)から値を転記します。その他の項目は手入力です。参加者が非会員(会員番号列に"N"と入力)の場合は、全ての項目を手入力します。
2.在籍者一覧表シート
〇スイミングを含む各スポーツスクール会員の会員番号・氏名・フリガナの一覧表です。A列:会員番号、B列:氏名、C列:フリガナ です。
3.テスト結果引継票シート
〇スイミング会員のデータを参加者一覧表シートから転記して一括印刷するシートです。
〇印刷範囲は、A1:G30です。
〇参加者一覧表シートから転記するデータ項目と転記するセル位置は、
①会員番号(参加者一覧表シート:C列/テスト結果引継票へ転記するセル位置:D5)②氏名(D列/D6)③級(I列/D7)④クラス1(J列/D13)⑤組1(K列/D14)⑥担当者1(L列/D12)⑦クラス2(M列/F13)⑧組2(N列/F14)⑨担当者2(O列/F12)⑩コース(U/D20)⑪組(V列/D21)⑫担当者(W列/D19)⑬テスト欠席(Y列/D25)⑭種目(Z列/D26)⑮タイム/距離/他(AA列/D27)⑯認定級(AB列/D28)⑰備考(AC列/D29)です。
29)です。
この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。
ベストアンサーに選ばれた回答
2018/6/2110:21:14
一例です。
テストの為、プレビューにしてあります。(ここでは2部印刷のチェックは出来ません)
まずこれでテストしてから、Printout部分のコメントを外して下さい。
Sub Sample()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim i As Long
Dim in_add As Variant
Dim out_add As Variant
Dim j As Integer
in_add = Array("C", "D", "I", "L", "J", "K", "O", "M", "N", "U", "V", "W", "Y", "Z", "AA", "AB", "AC")
out_add = Array("D5", "D6", "D7", "D12", "D13", "D14", "F12", "F13", "F14", "D20", "D21", "D22", "D25", "D26", "D27", "D28", "D29")
Application.ScreenUpdating = False
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
MsgBox "印刷にはA4用紙の裏紙を使用して下さい。"
With sh1
For i = 3 To Cells(Rows.count, 1).End(xlUp).Row
If .Range("Y" & i) <> "" Or .Range("Z" & i) <> "" Then
sh2.Range("A1:A30").ClearContents
For j = 0 To 16
sh2.Range(out_add(j)).Value = .Range(in_add(j) & i).Value
Next j
sh2.PrintPreview
'If .Range("M" & i).Value = "" Then
'sh2.PrintOut Copies:=1
'Else
'sh2.PrintOut Copies:=2
'End If
End If
Next i
End With
Application.ScreenUpdating = True
End Sub
補足ですが、現在の状況という部分は不要だと思います。(質問の文章が長すぎると回答を得にくくなるのでは)
反対に、印刷レイアウトの説明は項目ごとに改行して箇条書きにした方がいいです。
①会員番号D5(参加者一覧表シート:C列)
②氏名D6(D列)
このカテゴリの回答受付中の質問
- Excel2003~2016と日本語・英語・中国語を皆で共有する為ユニコードでマクロコー...
- PCからスプレッドシートで条件付き書式設定で1以下を色変えたくて設定したました...
- 分光光度計を使用して、タンニン値を測定するのに没食子酸エチルの希釈液を10~10...
- エクセルのある区間における最大値の抽出について 計測器でcsvにおとしたデータを...
- Windows 10 Excel 2016 Excelのシート内に外部Wordファイル、もしくはWord onlin...
- OS win10 エクセル2016の不具合 セルの内容が数式バーに表示されません。数式バ...
- excel VBAの保護されたビューについて質問です。 ブックを開く時にて、 ブックが...
- エクセルの microsoft barcode control16.0で作成した QRコードですが、勝手にサ...
- xe^(-x) = 0.1 のとき、xの値はどのように求めればよいでしょうか。 ご教示くだ...
- 仕事用ノートPCデルインスパイア「630」です。メモリ2Gが最高です。win10は入れら...
このカテゴリの投票受付中の質問
- Excel(エクセル)についてですが、 例えば8:00と入力する際に 8と0といっ...
- #VALUE!が出たセルだけ消せないでしょうか? ファイルのオプション→詳細設定→計...
- 勤務時間の計算式を教えてください。 ①08:30~17:00 午前15分休憩 午後15分休憩...
- 質問です。 エクセルは基礎知識しかないので、質問の内容がわかりにくいと思いま...
- スプレッドシートのセル内に、 仮に123,12,1233といった文字があった時、 カン...
- エクセルを使用してA4の紙に、CSVから読み取った顧客データを任意の場所に配置し...
- excelについての質問です。 特定のワードを含む部分のみを別のセルに抽出した...
- エクセルマクロについて。 •メッセージボックスを表示→その後の動作を中止 と...
- Excelの関数の作り方がわからないので、教えて下さい。 A列に日付 B列に0又は1...
- エクセルに関して教えて下さい。 エクセルに関して教えて下さい。 割合の計算をし...
カテゴリQ&Aランキング
- 戻る
- 次へ
総合Q&Aランキング
Yahoo!知恵袋カテゴリ
お客様自身の責任と判断で、ご利用ください。

