エクセルで分類付けする方法

このQ&Aのポイント
  • エクセルで大量のデータを分類付けする際に、関数を使うとエクセルが応答なしになることがある
  • マクロを使って一気に分類付けを行う方法を教えてほしい
  • 具体的な分類付けの方法と条件を教えてほしい
回答を見る
  • ベストアンサー

エクセルで分類付け(マクロ)

こんばんわ。 http://oshiete1.goo.ne.jp/qa5404464.html ↑でエクセルの分類付けについていろいろ教えていただきました。 今回はまた別のエクセルで似たような分類付けをするのですが、 上記URLで教えていただいた関数で行うと件数が多すぎてエクセルが応答なしになることがあります。大体5万件以上のときが多いです。 現状の作業をマクロで行いたいのでアドバイスをください。 シートの構成ですが、1シート(シート名は作業用)のみにデータはまとまっています。 A列は製品番号 B列は製品名(ハードディスクやメモリなどPC周辺機器全般です) C列は分類名として関数を使ってB列の分類付け。 となっています。各列の1行目は見出しです。 分類数は現状20種類以上です。 また今回のデータには未分類扱いのデータもあります。 それは削除せずに分類名を未分類をしなければなりません。 教えてほしいのは、 (1)D列から右側の作業列を使わずにマクロで一気にC列にB列の分類名を入力するやり方。 (2)分類名と同じシートを作成して各シートに値をコピペ(A列とB列のみ) 例えばCPUの分類ならシート:CPUに値をコピペするといった具合です。 ===C列に入れる分類名と分類条件=== (1)分類名:未分類 分類条件:B列に"AAA"、"BBBB"、"CCCCC"という値がある。10種類あります。 "AAA"を含むでなく、完全一致の場合は未分類にします。 (2)分類名:CPU 分類条件:分類名が未分類でなく、B列に"GHz"か"AMD "か"Intel(R)"を含む。 (3)分類名:HDD 分類条件:分類名が未分類でなく、B列に"ハードディスク"か"ハードドライブ"を含む。 (4)分類名:メモリ 分類条件:分類名が未分類でなく、B列に"DDR"を含む、"メモリ"を含む。 (5)分類名:FDD 分類条件:分類名が未分類でなく、B列に"フロッピ"を含む。 (6)分類名:DVDROM 分類条件:分類名が未分類でなく、B列に"DVD-ROM"を含む。 (7)分類名:DVDスーパーマルチ 分類条件:分類名が未分類でなく、B列に"スーパーマルチ"を含む、"ブルーレイ"は含まない。 (8)分類名:ブルーレイ 分類条件:分類名が未分類でなく、B列に"ブルーレイ"を含む、"スーパーマルチ"は含まない。 (9)分類名:ブルーレイスーパーマルチ 分類条件:分類名が未分類でなく、B列に"ブルーレイ"を含む、"スーパーマルチ"を含む。 (10)分類名:CDRW 分類条件:分類名が未分類でなく、B列に"RW"を含む、"コンボ"は含まない。 (11)分類名:コンボ 分類条件:分類名が未分類でなく、B列に"コンボ"を含む。 (12)分類名:DAT 分類条件:分類名が未分類でなく、B列に"DAT"を含む、"カートリッジ"は含まない。 (13)分類名:OS 分類条件:分類名が未分類でなく、B列に"Windows"を含む、"リカバリ"は含まない。 (14)分類名:グラフィックス 分類条件:分類名が未分類でなく、B列に"NVIDIA"を含む、"RADEON"を含む、"グラフィック"を含む。 (15)分類名:モニター 分類条件:分類名が未分類でなく、B列に"ハード"を含まない、"型"を含む、"インチ"を含む。 (16)分類名:パラレル 分類条件:分類名が未分類でなく、B列に"パラレル"を含む。 (17)分類名:1394 分類条件:分類名が未分類でなく、B列に"1394"を含む。 (18)分類名:入力装置 分類条件:分類名が未分類でなく、B列に"キーボード"を含む、"マウス"を含む、"パッド"は含まない。 (19)分類名:電源 分類条件:分類名が未分類でなく、B列に"電源"を含む、"標準"は含まない。 (20)分類名:規格 分類条件:分類名が未分類でなく、B列に"エネルギー"を含む。 (21)分類名:保証 分類条件:分類名が未分類とモニターでなく、B列に"年"を含む、"時間"を含む ===ここまで=== 上記の分類付けに当てはまらないものもあるのですが、それは空白のままにします。どのような分類にするかは検討中です。 記録マクロでやるにも編集が難しくて自力ではすぐには無理そうでした。 お手数ですがよろしくお願いします。

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

  • ベストアンサー
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.3

問題が2つあります。 1 分類が複雑 2 件数が多い >記録マクロでやるにも編集が難しくて自力ではすぐには無理そうでした。 解決法はあるのですが、分かってくれるかどうかこれが3つ目 一応の回答らしきものだけ提示します。 1ワークシートを使って分類名決定する。 作業用のワークシートを用意します B1を”製品名”を入れるセルにします 4行目 B,C,Dに"GHz"か"AMD ""Intel(R)" 以下5行目以降同様に ○または×を含む 場合BからF列に入れます ○、×を含みかつ△を含まない ○、×をBからF列△をG~K列 ○、×を含みかつ△を含む ○、×をBからF列△をG~K列 以降未分類以外を21分類まで入力 A33から下に1から25と連番 B34に=IF(B4="",FALSE,NOT(ISERROR(SEARCH(B4,$B$1)))) これを横に10列(K列)までコピー L34に=OR(B34:F34) M35に=OR(G34:K34) O列は=IF(N34,AND(L34,NOT(M34)),AND(L34,M34)) 以上をB列からO列を53行目までコピー N列はA列の番号を見ながら ○を含みかつ×を含まないという条件のとき=true() ○を含みかつ×を含むという条件のとき=false() これでO列の該当する分類の行がTRUEになります(未分類は別) P列は分類名を入力("未分類"、”CPU"など25は” ”(全角の空白)) E60から下に未分類の項目"AAA"、"BBBB"、"CCCCC"などを入力 B59に =MATCH($B$1,$E$60:$E$69,0) ’未分類になかったら#N/Aとなる B60に =IF(ISERROR(B59),IF(ISERROR(B60),25,B60),1) true1がある列の番号が表示される。 B61に =IF(ISERROR(B59),IF(ISERROR(B60),25,B60),1) B59、B60を参照して大刀する行番号が表示される(該当なしは25) B62に=VLOOKUP(B61,A33:P57,16) これでB62に分類名が表示される。 かなり広い表なので提示できませんが忠実に作ってもらえれば分かると思います。 後はマクロになりますが 一件ずつ作業用シートのB1に製品名を転記してB62の分類名を取得する という作業を繰り返す。 速度のためには再計算を止めて範囲指定再計算をする工夫も必要。

top12345
質問者

お礼

お礼が遅くなり申し訳ありません。 実際にやってみましたところ、上記の分類条件でもひっかからないパターンの製品がちらほらありまして、分類条件が絞りきれない状態です。 社内で検討したところ、一部はメーカーのサイトで確認しないといけない項目もあるようなので、しばらくは分類付けは手作業になりそうです。 せっかくすごいやり方を教えていただいたのに残念ですが、他の作業でも使うことがあるかもしれないので大変ありがたいです。 考え方の参考になりました。 本当にありがとうございました。

その他の回答 (2)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

この処理は一回だけ処理するようなものでしょうか、それとも毎月、毎週に行う処理なのでしょうか? 今回一回だけなら面倒でも手動でautofilter辺りでやるのがいいと思います。 また毎週のように行うというのであればマクロでやるしかないのですが 条件が複雑なうえ今後も分類が変わる可能性も見えるのでディシジョンテーブルのようなもので条件整理の必要がありそうです。 ただ、分類コードみたいなものを導入すべき事例のように思います。

top12345
質問者

お礼

週に1、2回の作業になります。 新しく始まったばかりの作業なので、まだはっきりとした条件定義などは定まってない状態です。

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

コードがある程度の件数までは正常に動き5万件以上でおかしくなるというのはコードの組み方にもよるでしょうがエクセル2003などでしたら行は65536行までですのでその制限をオーバーすることも考えられますね。

top12345
質問者

お礼

やはりきちんとマクロの仕組みがわかっていないと難しいですね。 ありがとうございました。

関連するQ&A

  • エクセルのマクロについての質問です。

    エクセルのマクロについての質問です。 長文申し訳ございません。 Excelマクロが何度作り直してもうまく作動せず非常に困っております。 (1)ファイルAのシート1のDB列3行目に1の値をいれます。 (2)ファイルAのDC列172行目の値をファイルBのシート名が「1」のシートのD列4行目に入れます。 (3)ファイルAのDC列2733行目の値をファイルBのシート名が「1」のシートのD列6行目に入れます。 (4)ファイルAのDC列3128行目の値をファイルBのシート名が「1」のシートのD列7行目に入れます。 (5)ファイルAのシート1のDB列3行目に1.2の値をいれます。 (6)ファイルAのDC列172行目の値をファイルBのシート名が「1.2」のシートのD列4行目に入れます。 (7)ファイルAのDC列2733行目の値をファイルBのシート名が「1.2」のシートのD列6行目に入れます。 (8)ファイルAのDC列3128行目の値をファイルBのシート名が「1.2」のシートのD列7行目に入れます。 (9)以上のようにファイルAのシート1のDB列3行目に入れる値を0.2ずつ増やしていき、その値に対応したファイルBのシートに上記のように値を入れていくという動作を20まで繰り返す。 以上のようなマクロを作る事は可能でしょうか? マクロについて勉強はしているのですが上手く使いこなせず苦労しております。 長文の質問で大変申し訳ございませんがよろしければ皆さまのお知恵をお貸しください。 宜しくお願い致します。

  • エクセル 抽出マクロについて

    はじめまして。マクロ初心者です。 エクセルで抽出結果を別シートにコピーしたいのですが、 抽出条件が2列にわたっています。 A     B      C      D 日付   タイトル   分類(あ)  分類(い) 11/22   テレビ    3      2 12/15   ラジオ    1      4 11/18   雑誌     2      5 …というような感じです。 例えば分類が「2」のものを抽出したい時に、 ●シート1のあるセルに「2」と入力してマクロを実行。  ↓ ●シート2に以下のように結果をコピーして表示。 A       B 日付     タイトル 11/22     テレビ 11/18     雑誌 という具合にしたいのです。(C列、D列は表示しない) データはシート3に入力されていて、今後どんどん増えていく予定です。 エクセルは2007です。 本やホームページを参考に試行錯誤したのですが、うまくいきません…。 どなたかご回答よろしくお願いいたします。  

  • エクセルマクロ

    全くの素人です。 200人のお得意先に案内状を送付します。 sheet1 A列1~A列200に会社名、 B列1~200までに、代表者の名前を入力しています。 sheet2に案内状があります。 会社名と名前だけ変えて200回するのもひと苦労ですので、マクロを使えればと思います。 1マクロに記憶する 2A列1・B列1をコピー 3sheet2に貼り付け4印刷 5マクロ記憶終了 マクロを実行するとA列1・B列1ばかり印刷されます。 A列2・B列2 A列3・B列3 と言うように順番に下段を印刷させる設定はどのようにすれば良いのでしょうか

  • 《エクセル》リストから同じ分類のデータのみコピーする

    いつもお世話になります。 別のシートに、下記の形のリストがあります。  列A   列B   列C   列D (商品名)(大分類)(中分類)(売上金額)  商品A   あ    A    1000  商品B   あ    B    900  商品C   い    A    800  商品D   あ    A    700  商品E   あ    C    600  商品F   あ    F    500 マクロを組んで、このリストの大分類が"あ"、中分類が"A"に該当する商品名と売上金額のみをコピーして、今開いているシートの列A・列Bに連続したデータとして貼り付けたいのですが、うまくいきません。 ご教授宜しくお願い致します。

  • エクセル マクロ 時間

    1)フォームにて時間を表示する。コンボボックス2つ作る。コマンドボタン(記録)を1つ作る。 2)1つのコンボボックスには時を選択させる。リストはリストはSheet2に01・02・03・・・とA列に00まで作る。 3)もう1つのコンボボックスには分を選択させる。リストはSheet2に01・02・03・・・とB列に00まで作る。 4)フォームの記録ボタンを押すと、sheet1のA2に(例 23:34)と表示させたい。 マクロの記述を教えてください。

  • エクセルのマクロを教えてください。

    いつもお世話になっております。 SH1・SH2・SH3・SH4の4枚のシートからなるエクセルファイルがあります。 SH1において、コンボボックスを設け、 リンクするセルをA1として、 VLOOKUP関数と組み合わせて B1にSH2以下のシート名を返す仕組みを作りました。 やりたいことは以下のことです。 コンボボックスにマクロを仕掛け、 コンボボックスで選んだシート名に応じて、  そのシートのA1:B10のデータを SH1のC1:D10に貼り付ける。 ※たとえばSH3を選んだらSH3!A1:B10を コピーして、SH!C1:D10に貼り付ける。 (クリップボードを使用しなくても構いません) よろしくお願いいたします。

  • EXCELのマクロで。。。

    シートAのセルC2の値(数字)を シートBのE、F、Gの各列のうち空いている一番左のセルで、かつ、D列に何か書いてある一番下の行のセル に転記したいです。 たとえば、シートBが図のような場合にはF28です。これが毎回、変化します。 マクロの記述を教えて下さい。よろしくお願い致します。

  • エクセルのマクロについて質問です。

    エクセルのマクロについて質問です。 マクロを発動した時に、あるセルに入力してある数値を参照し、その行のX列目に数値を張り付けるものを作成しようとしています。 例えば シート「1」の A1に日付を入力 B1にある数字を入力 シート「2」の A列にA1→1~A31→31の日付が入力されている時 マクロ発動時にシート「1」A1の日付と一致する シート「2」のB列にシート「1」のB1の値を貼り付け ↑たとえばシート「1」のA1が1日でB1が500だった場合 シート「2」の1日(A1)と同じ行でB列(B1に500を 貼り付けるものです。 かなり下手な説明だと自覚しておりますが、解読できる方 どうかご教授ねがいます。

  • 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のセルに返すという関数にしたいのです。 どなたかおわかりになる方がおりました宜しくお願いいたします。 また、マクロを使う方法でも良いのですが、当方マクロは詳しくないので出来るだけ判りやすくお願いいたします。

  • エクセルでのマクロを教えて

    下記のようなものをみたすマクロは組めますか? ファイルにシートが何種類かあります。 sheet1には各店の集計データーがあります。 その中にA列には集計の項目名がAZ列まであり 1行目には店舗名が10種類あります。 sheet2からはsheet名をsheet1に記入されている1行目にしている店舗名にしてあります。 またA列には集計の項目名がありますが sheet1にある項目と全く同じではなく 項目は少なくなっています。 また、sheet2からの店舗名にはsheet1の集計表にはない 店舗名もあります。 このsheet1のデーターをもとに sheet2の1行目の項目と一致する項目の値や数字を sheet1からコピーするというものです。 よろしくお願いします。

専門家に質問してみよう