- 締切済み
マクロ構文を教えて下さい
いつもお世話になっております。 マクロ超初心者です。 以下のような作業を行いたい場合のマクロ構文を教えていただけたらありがたいです。 ・同じエクセルファイルに「会員一覧」と「通知」シートがあります。 ・「会員一覧」シートのA列に会員番号が入っています(7桁) ・「通知」側のA1セルに会員番号を入力すると、「会員一覧」の各データを引っ張って来る作りになっています。(VLOOKUP) マクロを使ってやりたいこと (1)会員番号の最少数から最大数まで、値を「通知」A1セルに入力し、印刷することを繰り返す。 (2)「会員一覧」シートに存在しない会員番号については除外したい。 (3)「会員一覧」シートのB列に「退会」と入力されている会員番号についても除外したい。 以上、お分かりの方、ご教授下さい。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
No.2です。 >Sheet3を作業用として使用する意味をご教示いただければ幸いです の件について・・・ 前回も書いたようにSheet1「会員一覧」SheetのA列が昇順になっていない場合を考慮して者です。 Sheet1に手を加えないように、Sheet1をそのままSheet3にコピーして A列の昇順で並び替えています。(実際はA列のみで良かったのですが、) そのデータを利用して、Sheet2{通知」Sheetに会員番号の小さい順に表示させています。 Sheet1に手を加えてよいのであれば作業用のSheetは不要でした。m(_ _)m
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! >(1)会員番号の最少数から最大数まで、値を「通知」A1セルに入力し・・・ というコトは「会員一覧」SheetのA列・会員番号は昇順になっていない!というコトでしょうか? A列の会員番号の若い順に、B列が「退会」でないデータすべてを印刷する!という解釈です。 尚Sheet3を作業用のSheetとして使用していますので、 Sheet3は全く使用していない状態にしておいてください。 「会員一覧」Sheetは1行目が項目行で、データは2行目以降にあるとします。 標準モジュールです。 Sub Sample1() Dim i As Long, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("会員一覧") Set wS2 = Worksheets("通知") With Worksheets("Sheet3") wS1.Cells.Copy .Range("A1") .Range("A1").CurrentRegion.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row If .Cells(i, "B") <> "退会" Then wS2.Range("A1") = .Cells(i, "A") wS2.PrintPreview '←印刷プレビューのみ End If Next i .Cells.Clear End With End Sub ※ 印刷実行ではなく、「印刷プレビュー」にとどめています。 すぐに印刷したい場合はNo.1さんの回答にもあるように、関数による計算に若干時間を要することがあるかもしれませんので、 仮に2秒程度間隔を置きたい場合、上記コードの >wS2.PrintPreview '←印刷プレビューのみ の行を >Application.Wait Now() + TimeValue("0:00:02") >wS2.PrintOut にしてみてください。 (印刷プレビューなしに2秒まって印刷します)m(_ _)m
- keithin
- ベストアンサー率66% (5278/7941)
一覧シートのA1に「会員番号」とタイトルが記入してあり、A2以下に上から詰めて会員番号が記入してあるとする sub macro1() dim r as long worksheets("通知").select ’一覧の2行目から最終行まで for r = 2 to worksheets("会員一覧").range("A65536").end(xlup).row ’退会じゃない会員番号を転記して印刷する if worksheets("会員一覧").cells(r, "B") <> "退会" then range("A1").value = worksheets("会員一覧").cells(r, "A").value ’application.wait now + timeserial(0, 0, 5) ’* activesheet.printout end if next r end sub *構成が悪い場合、会員番号を記入してからVLOOKUP関数が所定の計算を終えるまでに時間がかかってしまい、適切に印刷されない不具合が出る場合があります。 その場合は*の行を生かします。
お礼
ありがとうございます。
お礼
ありがとうございます!
補足
もし可能でしたら、Sheet3を作業用として使用する意味をご教示いただければ幸いです。