• 締切済み

マクロ構文を教えて下さい

いつもお世話になっております。 マクロ超初心者です。 以下のような作業を行いたい場合のマクロ構文を教えていただけたらありがたいです。 ・同じエクセルファイルに「会員一覧」と「通知」シートがあります。 ・「会員一覧」シートのA列に会員番号が入っています(7桁) ・「通知」側のA1セルに会員番号を入力すると、「会員一覧」の各データを引っ張って来る作りになっています。(VLOOKUP) マクロを使ってやりたいこと (1)会員番号の最少数から最大数まで、値を「通知」A1セルに入力し、印刷することを繰り返す。 (2)「会員一覧」シートに存在しない会員番号については除外したい。 (3)「会員一覧」シートのB列に「退会」と入力されている会員番号についても除外したい。 以上、お分かりの方、ご教授下さい。 宜しくお願い致します。

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です。 >Sheet3を作業用として使用する意味をご教示いただければ幸いです の件について・・・ 前回も書いたようにSheet1「会員一覧」SheetのA列が昇順になっていない場合を考慮して者です。 Sheet1に手を加えないように、Sheet1をそのままSheet3にコピーして A列の昇順で並び替えています。(実際はA列のみで良かったのですが、) そのデータを利用して、Sheet2{通知」Sheetに会員番号の小さい順に表示させています。 Sheet1に手を加えてよいのであれば作業用のSheetは不要でした。m(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! >(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

maemukide
質問者

お礼

ありがとうございます!

maemukide
質問者

補足

もし可能でしたら、Sheet3を作業用として使用する意味をご教示いただければ幸いです。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

一覧シートの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関数が所定の計算を終えるまでに時間がかかってしまい、適切に印刷されない不具合が出る場合があります。  その場合は*の行を生かします。

maemukide
質問者

お礼

ありがとうございます。

関連するQ&A

  • マクロでVLOOKUPを使用した複数シートのデータを一覧シートへ

    VLOOKUP関数を使用してシートを跨いでデータを一覧へもってくることができないようなので、 マクロを使用して以下のような作業をしたいです。 【Sheet1】:データベース(1)    A列  B列 1行 0001  あ 2行 0003  う 【Sheet2】:データベース(2)    A列  B列 1行 0002  い 2行 0004  え 3行 0005  お というデータから 【Sheet3】:一覧    A列  B列 1行 0001  あ 2行 0002  い 3行 0003  う 4行 0004  え 5行 0005  お を作成したい。 データベース(1)(2)は各々で全て手入力をし、 一覧のA列は予め入力しておき、B列の情報だけを一覧シートにもってくるという内容です。 (実際はセル数もシート数ももっと多いです) Application.WorksheetFunction.VLookup()を使うのかな? とは過去の質問から、なんとなく想像はつくのですが 素人なもので、例文を見てもよくわかりません・・・。 ご教授いただけると大変助かります。 よろしくお願い致します。

  • excelでマクロを使用した連続印刷について

    A2セルから通し番号、氏名、住所等のデータが入力されている「データ」シートがあり、 VLOOKUPを使用してB3セルに「データ」シートのA列にある「通し番号」を 入力すると氏名・住所等が反映される「印刷」シートがあります。 例えば「データ」シートのC列(住所)に「東京都」という文字列が 含まれている宛名のみを連続で印刷したい場合、 どのようなマクロになりますでしょうか? (マクロ内に「東京都」と指定する方法と、 シート内の特定セルに入力した文字列で指定する方法が ありますでしょうか?) wordでの差し込み印刷や、宛名ソフト等の使用は考えておりません。 よろしくお願いいたします。

  • エクセルでマクロを作りたいのですが上手くいきません

    エクセルで会社で使うファイルを作成していますが、ファイルサイズが大きくなりすぎたので、こういうマクロが作れないかと調べていたのですが、やり方がわからないので困っています。 わからないのは、入力シートのA列にデータを入力して、シート2のB列に自動的に表示する ことを自動的にやってくれるマクロです。 今はIF関数をシート2に入力している状態ですが、セルに関数を入れる方法だとファイルサイズが大きくなりすぎてしまいます。 (IF関数をあらかじめ入力しておくセル数がとてもたくさんある為) なお、入力シートA列がブランクの場合は、シート2のB列には何も表示されないようにしたいです。 大変困っております。よろしくお願いします。 

  • エクセルです。至急教えてもらえませんか!!

    はじめまして。よろしくお願いします。 エクセルである名簿を作っています。 <sheet1> A列に会員番号、B列に氏名、C列に住所・・・・というような表にしています。 <sheet2> sheet2のあるセルに<sheet1>の会員番号を入力するとその会員のデータが決められた様式ででてくるようにしました。 今から、この会員全員分のデータを全て<sheet2>の様式で印刷したいのですが、手作業で会員番号を入力して、印刷をしてというやり方だとかなり時間がかかりそうです。また他にも今から仕事があるので、何かよい方法を教えてください。マクロでできるのだろうとは思うのですが、昔使ったことが少しあるだけで全然覚えていません。よろしくお願いいたします。 *会員番号順に並んでいますが、数はとんでいます。例えば、1、5,19,28,29,50・・・・という具合です。

  • 完全一致したら代入するマクロを教えてください

    エクセルのSheet1のa列にある文字列と、Sheet2にあるa列にある文字列と完全一致したら、前者のセルの右隣に後者のセルの右隣の文字列を代入するマクロをお教えください。単純にvlookup関数を使えばいいのですが、VBAで行いたいのです。よろしくお願い申し上げます。

  • マクロの書き方2

    マクロの書き方2 tom04さま、本当にありがとうございました。めぐみです。 すみません、先程の質問の続きになってしまいます。 Sheet2にのA列は時々同じ番号が2つ,3つあることがあります。 Sheet2に同じ番号があった場合は、Sheet1のダブっている番号の横のB列セルを黒くしたいです。 そのセルの中はSheet2の情報が反映されてもされなくてもどちらでもかまいません。 ただ、Sheet2のA列に同じ番号があった場合にSheet1のダブっている番号の横のB列セルを黒くなるという機能が追加されていればそれで良いです。 例えば下記のように1行目と4行目に同じ番号が存在していたら、Sheet1のA列の702725の横のB列のセルが黒くなっていたらいいです。 ■Sheet2 A列  B列  C列 702725 X 702872 X 770074    0 702725    0 770223 Z 770474    0 770242 X 770264 X 770330    0 770347 X 770422 X 770468    0 770523 X 770577    0 770627 X 770672 X 770677    0 770720 X 770723 X 770725 Z 770727 X 恐れ入りますが何卒よろしくお願いいたします。

  • EXCEL マクロ 文字列を種類分けして並べ替え

    みなさんいつもいろいろ教えていただきありがとうございます。 マクロ初心者の者です。 さて、早速ですが以下の内容を実現できるマクロを 教えていただけませんでしょうか?     A 1 A********* 2 0********* 3 1********* 4 3********* 5 ****** 6 BAE****** 7 BSE****** ・A列に上記のような文字列が入力されています。  (※注文番号)(数十~最大100行くらいまで) *にはランダムに数字が入ります。 A列の並び順、数はランダムです ・B列にはA列からVLOOKUPを使って得た日付(納期)が入ります。 例(B1セル)⇒=VLOOKUP(A1,納期リスト,2,FALSE)   結果 2/20 と表示されている ・C列にはA列からVLOOKUPを使って得た、客先名が入ります。 例(C1セル)⇒=VLOOKUP(A1,納期リスト,3,FALSE)   結果 ***商店 などと表示されている ■この場合に、アルファベット3文字から始まるA6,A7の種類の  注文番号"以外"を削除し、B列の日付の昇順に、  残った注番を並べ替えたいです。 お手数ですが、ご指導よろしくお願いいたします。

  • マクロ構文作って下さい

    こんばんは 大変恐縮ですが 下記のマクロを作っていただけませんか? 僕にはまったく作れませんでした… 作業工程に自動に名前を入力したいのです その際、ある人は出来ない行程がある それを踏まえて頻度が低い順に行程に自動に名前(数字)入力する A B C D E F の六個の工程 1 2 3 4 5 6 の六人 1 2はA Bしか出来ない 5 6はE Fしか出来ない この条件で 一撃で自動に判断して名前(数字)を入力したいです セル位置や シート数はお任せです。

  • Excelの関数またはマクロを教えて下さい。

    Exsel2000の関数で、現在以下の関数まで出来たのですが、これを応用して検索値「A1」を2つのセル「A1&B1」にしたいのですが、どうすればよいのでしょうか?どなたか方法を教えて下さい。 =VLOOKUP(A1,Sheet1!$A$1:$E$2000,4) 上記の関数から判るように、これは 例えばSheet2のC1のセルにこの式を入れる場合、A1と同じ内容の値を、Sheet1のA列から検索して、そして同じ行のSheet1のD列の値をSheet2のC1のセルに返すという関数です。 これを応用して、「A1と同じ内容…のA1を、A1&B1の2つが一致するセルを検索して、同じ列のSheet1のD列の値をSheet2のC1のセルに返すという関数にしたいのです。 どなたかおわかりになる方がおりました宜しくお願いいたします。 また、マクロを使う方法でも良いのですが、当方マクロは詳しくないので出来るだけ判りやすくお願いいたします。

  • エクセルマクロ 「101」 ボタンをおして 「102」となるマクロ?

    エクセルです。 一つのセル(A4)に「101」と書いてあります。それをVlookup関数で他のシートから一致する情報を取り出しています。次に同じセルに「102」とうつと、同じように一致する情報を取り出しています。 そこで、一回、一回、セルに102や103と打つのではなく、ボタンを押すと次の番号にうつるようなマクロを組みたいと思ってます。 ただ、101~130 次は、201~231みたいになってます。 一つのマクロでなくても良いので、よろしくお願いします。 最初は、 Range("A4").select  セルA4を選択 だと思うのですが、この次から分かりません。

専門家に質問してみよう