• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロ●条件抽出と定型書式への書出し)

エクセルマクロで条件抽出と定型書式への書出し

このQ&Aのポイント
  • エクセルマクロ(VB)を使用して、条件抽出と定型書式への書き出しを行いたいです。
  • 条件入力フォームの条件からSheet1のデータをSheet2に抽出し、Sheet3の定型フォームに書き出します。
  • 条件入力フォームからSheet2への抽出転記はできそうですが、定型フォーム(Sheet3)への書き出し方法がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

その他項目多数が有ってそれらをどの様に取り扱って行くかわ別の問題としてここでは説明します。 シート1ではA1セルからD1セルまでに項目名の売上月から原価が、各データは2行目から下方にあるとします。 ところで検索のための条件ですがシート2でそれらの条件を入力します。 シート2のA1セルには販売月ー開始の項目名を入れB1セルに2010/4のように入力します。 A2セルには販売月ー終了と項目名を入れB2セルに2010/4のように入力します。 A3セルには商品名1と入力し、B3セルには魚などと入力します。 A4セルには商品名2と入力し、B4セルには肉などと入力します。 A5セルには販売価格と入力し、B5セルではリストの形で1000、2000,5000、空白などが選べるようにします。 A6セルには原価と入力し、B6セルではリストの形で500,1000、空白が選べるようにします。 そこでこれらの条件を受けてシート1では作業列を設けシート1の例えばJ2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(A2>=Sheet2!B$1,A2<=Sheet2!B$2),IF(AND(Sheet2!B$5<>"",Sheet2!B$6<>""),IF(AND(OR(B2=Sheet2!B$3,B2=Sheet2!B$4),C2=Sheet2!B$5,D2=Sheet2!B$6),A2*10000+COUNTIF(A$2:A2,A2),""),IF(AND(Sheet2!B$5<>"",Sheet2!B$6=""),IF(AND(OR(B2=Sheet2!B$3,B2=Sheet2!B$4),C2=Sheet2!B$5),A2*10000+COUNTIF(A$2:A2,A2),""),IF(AND(Sheet2!B$5="",Sheet2!B$6<>""),IF(AND(OR(B2=Sheet2!B$3,B2=Sheet2!B$4),D2=Sheet2!B$6),A2*10000+COUNTIF(A$2:A2,A2),""),IF(AND(Sheet2!B$5="",Sheet2!B$6=""),IF(OR(B2=Sheet2!B$3,B2=Sheet2!B$4),A2*10000+COUNTIF(A$2:A2,A2),""),"")))),"") このほかにシート1のK2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",IF(COUNTIF(B$2:B2,B2)=1,MAX(K$1:K1)+1,INDEX(K$1:K1,MATCH(B2,B$1:B1,0)))) シート1のL2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(K2="","",A2*10000+K2) そこでシート2の条件B1からB6のデータを満足する抽出のデータをシート2の9行目から下方に表示させるとしてシート2のA8セルには売上月、B8セルには商品名、C8セルには販売価格、D8セルには原価(円)と項目名を入力し、A9セルには次の式を入力した後でD9セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>COUNT(Sheet1!$J:$J),"",IF(INDEX(Sheet1!$A:$I,MATCH(SMALL(Sheet1!$J:$J,ROW(A1)),Sheet1!$J:$J,0),COLUMN(A1))=0,"",INDEX(Sheet1!$A:$I,MATCH(SMALL(Sheet1!$J:$J,ROW(A1)),Sheet1!$J:$J,0),COLUMN(A1)))) なお、A9セルから下方のセルを選択して右クリックし、「セルの書式設定」から「表示形式」の「ユーザー定義」で yyyy/m と入力します。 なお、シート3を作成するために必要な作業列としてシート2のJ9セルには次の式を入力して下方にオートフィルドラッグします。 =A9&B9&C9 シート3は定型フォームでA1セルに売上月、B1セルに商品名、C1セルに数量、D1セルに原価計の項目名を入力します。 A2セルには次の式を入力したのちにB2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>COUNT(Sheet1!$L:$L),"",INDEX(Sheet1!$A:$C,MATCH(SMALL(Sheet1!$L:$L,ROW(A1)),Sheet1!$L:$L,0),COLUMN(A1))) C列およびD列にデータを入力するために作業列としてシート3のJ2セルには次の式を入力して下方にオートフィルドラッグします。 =A2&B2&C2 その後にC2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(J2="","",IF(AND(COUNTIF(J$2:J2,J2)=1,COUNTIF(Sheet2!$J:$J,J2)>0),COUNTIF(Sheet2!$J:$J,J2),"")) D2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(D2="","",SUMIF(Sheet2!J$9:J$10000,J2,Sheet2!D$9:D$10000)) それぞれのシートで作業列が目障りでしたらその列を選択して右クリックし、「非表示」を選択すればよいでしょう。

iceblue88
質問者

お礼

VBで考えているのですが、もし自分で無理な場合は、アドバイスいただいた方法でやろうと思います。とても早くご解答いただきありがとうございます。まだ思案中でございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

#2です。 写真が古かったのと条件表の文字がつぶれているので再投稿

iceblue88
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

抽出ができるなら、作業列がいらなくなるが数式で出してみた 販売月=売上月 として条件表を書いてみた(添付図参照) また、シリアル値として入力している なお、原価欄は入力していない 作業列1 E2セルに =A2&B2&C2 作業列2 条件表に合致する項目なのかを検証した F15セル 0 F16セル =DCOUNT($A$15:$C16,,$A$11:$E$13) 下へオートフィル 数量 =IF(F15=F16,0,COUNTIF($E$2:$E$9,A16&B16&C16)) 下へオートフィル 原価 =IF(D16=0,0,SUMIF($E$2:$E$9,A16&B16&C16,$D$2:$D$9)) 下へオートフィル 空欄処理は書式設定、または、VBAで処理できると思います。

iceblue88
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

(1)Sheet1からSheet2作成 多条件の抜き出しで、エクセルVBA程度では難しいと思いますが、どのようにした、または仕様としてますか? 私の考えるところでは、フィルタオプションの設定をVBA化して使うのを思いつきますが。 これも原データと条件、抽出結果が別シートに亘る場合注意が必要です。 (2)Sheet2からSheet3の作成。 掲示データ例の数がアンバランスで聞きたいことがよく伝わらない。 (1)行数はSheet2<Sheet3のように増えることはありますか。 (2)列数的に計算項目は別にして(例 単価X数量=総金額の用なのは別にして)在りますか。 (3)Sheet3では中間集計行的なものは増えてますか これら(1)(2)(3)のようなことを説明して無いのでよくわからない。 データ例を挙げるのも大切だが、やることで特徴的な事項も説明を加えること。 私から言うとSheet2からSheet3咲くせいなど、データの代入だけの問題で質問に当たらない(>どなたかお知恵を拝借できますでしょうかー>知恵というものは要らない)と思うが、反論をしてください。

iceblue88
質問者

お礼

私の説明の仕方が悪かった部分もあるので、もう一度検証してみます。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのマクロ作成で困ってます

    マクロ初心者です。 ”Sheet1にあるデータについて、複数条件で抽出後、Sheet2の表に転記” という動作をマクロで組みました。 ここまでは良かったのですが、Sheet2に転記する際、下記の様にさらに条件を付加したいと思っています。 やりたいこと(ア) Sheet1で条件によりたとえば10個のデータを抽出できたとし、 1~6個目までは、Sheet2の1行~6行に転記、 7~10個目までは、Sheet2の11行~14行に転記。 ※”6個目まで1~6行に転記”というのは決まっているのですが、  この10個というのは、例であって、5個だったり、14個だったり、  抽出したデータにより異なるので、変数です。 やりたいこと(イ)   Sheet1から、さらに別の条件で抽出したデータを、  やりたいこと(ア)の10個目を転記した行のあとすぐ(例でいうと15行目)から転記したい。  ※やりたいこと(ア)で抽出した条件が6個以下だった場合、11行目から転記。 以上の2つです。 条件の抽出までは出来るのですが、 (ア)の7個目から別のところに転記 (イ)の別の条件で抽出したデータを(ア)の次(6個以下の場合は11行目)から転記 をどうやって組んだら良いかわかりません。 もし分かる方がいらしたら、 どのようなコマンド(?)を使ったら良いのか、 ご教示いただけると助かります。 よろしくお願いします!

  • エクセル 条件付書式設定の数式

    ご教授願います。 エクセルにてSheet1のC列での関数に関して教えていただきたいです。 関数かVBAでの対処方法を宜しくお願いいたします。 したい処理: (1)販売記録で、Sheet1で新規登録時、販売価格は、Sheet2のリストから取得。 (2)Sheet2の価格を変更した際、Sheet1の販売履歴(入力済)の価格は変更させない。過去の登録時のままの価格。 (1)と(2)を同時に満たす方法を宜しくお願いいたします。 商品名はプルダウンリスト化しています。 数量 は 手入力のままでOKです。 販売価格・仕入価格共に、自動表示にしたいです。 Sheet1の商品名が空白でない場合、sheet2の商品一覧リストから同名商品の販売価格を同行のCにいれる。 さらに、条件としてSheet2の価格は変動する為、 条件として、Sheet1の数量 D列 が ""なら Sheet2から価格をもってくる。  D列が ""ではない場合、過去の販売履歴時の、価格のまま。 という操作をやってみようとして、つまりました。 Sheet1     Sheet2の価格変更前 | A  | B  | C  | D | E   |・・・ 1|日付  |商品名|販売価格|数量 |仕入価格|・・・ 2|7/1 |商品A |1000 | 1 | 500 |・・・ 3|7/1 |商品B |1200 | 1 | 600  |・・・    :    :   :   :   : Sheet2    販売価格を変更    商品名・仕入単価・販売単価が全商品分 | A  | B  | C  | 1|商品名 |仕入価格|販売価格| 2|商品A |500 | 1000 | ←例えばC2 を 1100 に変更 3|商品B |600 | 1200  |    :    :    : 90|商品X |800   | 1500  | Sheet1     Sheet2の価格を7/9時点で変更した場合、   7/1の販売価格は、以前のままで、         以後の登録時7/10のようになってほしい | A  | B  | C  | D | E   |・・・ 1|日付  |商品名|販売価格|数量 |仕入価格|・・・ 2|7/1 |商品A |1000 | 1 | 500 |・・・ 3|7/1 |商品B |1200 | 1 | 600  |・・・    :    :   :   :   : 20|7/10 |商品A |1100 | 1 | 500 |・・・ 実際 C2に入れ、試みた作業ですが、 =IF($B2="","",VLOOKUP($B2,Sheet2!$A$2:$C$100,2,FALSE)) コレですと、Sheet2の価格が変更された場合、Sheet1の価格にももちろん反映され、過去の販売単価が消えちゃいます。 さらに条件付きでの方法やVBAでの方法などありましたら、 宜しくお願いいたします。

  • エクセルの抽出に関するマクロ

    (1)OSはVistaです。 (2)エクセル2007を使用しています。 (3)シートは「会員情報」「抽出条件」「抽出結果」の3枚です。 (4)「会員情報」シートのA5からR588までデータ(氏名、住所、電話番号など)が入っています。A5からR5は、タイトル行(フィールド)です。R列は「フォームコントロール」で挿入したチェックボックスです。。 (5)「抽出条件」シートには、会員の種類による抽出ができるような条件(正会員、準会員、協賛会員など)が設定してあります。 (6)「抽出結果」シートには、抽出された結果がコピーされます。 「会員情報」シートのデータを、「抽出条件」シートで指定した条件で抽出し、「抽出結果」シートにコピーするマクロは成功しました。 チェックボックスにチェックを入れた会員を抽出し、その方たちの郵便用ラベルを作成するのが最終目標ですが、今は「会員情報」シートのチェックボックスを使った抽出とその結果のコピーができないところでストップしています。チェックボックスを使った抽出とその結果のコピーのマクロを教えてください。

  • エクセル 複数の条件を抽出

    エクセルで複数の条件を抽出する方法について教えてください。 sheet2には以下の表があります。 A列  商品名1 B列  商品名2 C列  評価1 D列  評価2 sheet1には複数のデータがあり、そのデータを使って商品名と評価を出しています。 (商品名は手入力して、評価は関数を使って数値を出しています。) ここから、評価1がある値以上かつ評価2がある値以上の商品名1と商品名2をsheet3に抽出したいのです。(実際にやりたいのは、評価1が2%以上かつ評価2が0.9以上という条件です。) sheet3に出したいのは見やすいと思ったからで、どうしてもというわけではありません。 商品名が分かれているのはsheet2で作業がしやすいように分けています。必要であれば統合します。 評価1は書式設定で%表記にしています。 一応自分なりに調べてはみたものの、全くの初心者な為わかりませんでした。 初心者でもわかるように教えていただければありがたいです。

  • エクセル 複数条件による検索・抽出 マクロ

    ユーザーフォームに5つのTextBoxを用意しまして、TextBox1に取引先会社名、TextBox2に商品名を入れると、(できれば自動的に)TextBox3に単価、TextBox4に商品番号、TextBox5に材料名が入るようなマクロを組みたいと考えております。 当社は、取引先相手が一次卸か二次卸かで、同じ商品でも単価が変わってくるので、二つの条件が必要となり、初心者の私には、どのようなマクロを組めば良いのかわかりません。 できれば、ユーザーフォームを立ち上げるSheet1とは、別のSheet2などに各会社名・対応する商品名、そして各々の単価などの表を作りたいと考えております。 分かりにくい質問かと思いますが、宜しくお願いします。 上記に書いた方法以外に、もっと良いアイデアなどありましたら、是非とも宜しくお願いします。

  • クエリの抽出条件

    クエリの抽出条件を手入力では無く、コンボボックス方式で プルダウンでリストを選びたいと思い下記の抽出条件を入力 [Forms]![フォーム名]![コンボ名] しかし、パラメータ入力時の名前が、Forms!フォーム名!コンボ名と変わるのみで プルダウンになりません クエリを過去のデータ検索のみで使用したいと思ってます。 ネットをくぐると、メインフォームを開いてとありますが、それでも駄目です。 また、クエリー検索だけで、メインフォームを開かないでプルダウン方式には 出来ないものでしょうか よろしくお願い致します

  • エクセル2000フィルター抽出条件式について

    フィルター抽出条件がうまく抽出出来ません教えてください。 抽出条件式 別シートで作っている。(Bシート)  巡視日      巡視日 >=2002/05 <=2002/07 条件式の意味 2002年5月以上で2002年7月以下のデータを抽出する。 2002年5月以上のデータは抽出できるが、2002年7月が抽出されない 2002年5月と2002年6月しか出てこない。 データベース(Aシート) C列 巡視日 4月8日 5月11日 5月11日 6月5日 7月4日 7月4日 エクセル操作(データ→フィルター→フィルターオプション設定)で 検索条件範囲を 巡視日      巡視日 >=2002/05 <=2002/07 指定してやるとデータベース(Aシート)のC列の抽出が 2002年5月以上のデータは抽出できるが、2002年7月が抽出されない 2002年5月と2002年6月しか出てこない。 何故でしょうかよろしくお願いします。

  • エクセル、条件をつけてのデータ反映計算式

    エクセルにて、条件をつけてのデータ反映計算式をお教え下さい。 ※過去質問など検索しましたが、ピッタリあうものをさがす事ができず、 自己解決できなかった質問させていただきます。 【内容】 ・シート1とシート2の品番が一致している事が条件。 ・シート2にある「D 原価」を、シート1「E (空欄)」に反映させたい。 シート1 A 商品名 B 売価 C 品番 D 個数 E (空欄) シート2 A 商品名 B 売価 C 品番 D 原価 【追加質問】 ・今回異なるシートを検索対象としましたが、 別データ(ブック)を対象にして、検索できますでしょうか。 ・「シート1とシート2の品番が一致している事が条件。」とは別に、 「(もしくは)シート1とシート2の商品名が一致している事が条件。」を 加えることはできますでしょうか。 以上です。どうぞよろしくお願いします。

  • EXCELのマクロについて教えてください。

    初心者です。 「商品コード」と「販売個数」から成る表があるとします。 「販売個数」が10個以上の商品について、当該「商品コード」の内容を別のシートに転記できるようにしたいと思っています。 どのようなマクロを書けばよいか教えてください。 宜しくお願いします。

  • エクセルの条件付き書式について。

    エクセル初心者です。 条件付き書式について教えてください。 例えば、 商品名 仕入単価 販売価格 利益率   A    100円  150円   50% B    200円  240円   20% という表があったとします。 このとき、利益率が【30%】を超える【商品名】を 赤文字で表示したい場合は どのような手順を踏めばいいでしょうか? 上記では【A】という文字を赤文字で表示させたいです。 初歩的な質問で申し訳ありませんが、 宜しくお願いいたします。

専門家に質問してみよう