• 締切済み

エクセルでの分類方法

エクセル詳しい方お願いします。 A B C D E 1フェラーリ シトロエン ランチア トヨタ 2日産 ヒュンダイ 3シトロエン フェラーリ トヨタ ランチア 4ホンダ クライスラー プジョー 5ヒュンダイ 日産 上記のように、列にはあるカテゴリーの中から(この場合は自動車メーカー)いくつかの語句が選ばれて入力されています。 この中から同じ内容が入力されている行をピックアップする方法を教えてください。上記では行1と行3には順序は違いますがフェラーリ、シトロエン、ランチア、トヨタがあります。行2と行5には日産、ヒュンダイがあります。これらの行をそれぞれ分類したいのです。 ・順序が違っても同じ内容が入力されている行を並べ替えてまとめる ・順序が違っても同じ内容が入力されている行の空白列に1,2,…とでるようにする(後でフィルタリング) ・もしくは、効率よく分類できるような入力方法 ご存知の方いらっしゃいましたら、是非ご助力ください。 実際には列に入る語句の種類は50種類程度、行は300行程度です。 よろしくお願いいたします。

みんなの回答

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.7

No.5です。 > A列からではなく(例えば)E列からの内容を行方向に並べ替えたいときはどのように書き換えたらよろしいでしょうか? 時間が無いので、回答だけ。 E~H列を並び替えるサンプルです。 Sub Sample()  For i = 1 To ActiveSheet.Range("E1").End(xlDown).Row   Range("E" & i & ":H" & i).Sort Key1:=Range("E" & i), Orientation:=xlLeftToRight  Next i End Sub

appleaudi
質問者

お礼

mt2008さん ありがとうございます。 何とかなりそうです。 ご親切に回答いただき感謝いたします。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.6

No.2 です >E列からの内容を行方向に並べ替えたいとき 列の最初と最後を列記号で設定できるようにしてみました ------------------------------- Sub MC1()   cs = "E" '列の最初   cx = "H" '列の最後   lx = 1   Do Until Cells(lx, cs) = ""     Range(Cells(lx, cs), Cells(lx, cx)).Select     Selection.Sort Key1:=ActiveCell, Order1:=xlAscending, Header:=xlGuess, _       OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _       :=xlStroke, DataOption1:=xlSortNormal     lx = lx + 1   Loop   Range(Cells(1, cs), Cells(lx, cx)).Select   Selection.Sort Key1:=ActiveCell, Order1:=xlAscending, Header:=xlGuess, _     OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _     :=xlStroke, DataOption1:=xlSortNormal End Sub ------------------------ ただし、このマクロでは、最後の並べ替えをするときに、A~D列は並べ替えられません A~D列をE列以降と連動させたい場合は、下から4行目  Range(Cells(1, cs), Cells(lx, cx)).Select を  Range(Cells(1, 1), Cells(lx, cx)).Select としてください

appleaudi
質問者

お礼

ASIMOVさん 試してみます。 ご親切に重ねて回答いただき、ありがとうございました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.5

ただ単に、横方向で並び替えを行いたいのでしたら、「並び替えオプション」で方向を「列単位」にすることで可能です。 300行もあるので、マクロを組んだ方が良いでしょうね。 以下のマクロは、列単位の並び替えを1行毎に行っています。 Sub Sample()  For i = 1 To ActiveSheet.Range("A1").End(xlDown).Row   Rows(i).Sort Key1:=Range("A" & i), Orientation:=xlLeftToRight  Next i End Sub

appleaudi
質問者

補足

ありがとうございます。 関数には全く弱く、ましてやマクロは全く使ったことが無いもので、もう少し教えていただけますか。 A列からではなく(例えば)E列からの内容を行方向に並べ替えたいときはどのように書き換えたらよろしいでしょうか? どうぞよろしくお願いいたします。

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

例えばA,B,C,D列の2行目からデータが入力されているとします。 E1セルには並べ替えるときに使用する番号とでも入力しておきます。 F列から横の列は作業列にします。 F1セルから横のセルにフェリーラ、シトロン、などとトヨタ系の車種を入力します。次に日産系の車種を、さらにホンダ系の車種・・・・などと車種名を入力します。 F2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(COUNTIF($A2:$D2,F$1)=0,"",MATCH(F$1,$A2:$D2,0)) 次にE2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",MATCH(1,F2:N2,0)) これで番号が振られますので、昇順で並べ替えをすればよいでしょう。

noname#130090
noname#130090
回答No.3

僕も作ってみたので上げるだけ上げておきます。 入力した「車種の記入ミス」も心配ですが、 「同じ行に2種以上の同車種名」があった場合 おかしな結果になるかもです。 2番目のシート(sheet2)に書き出されますので注意。 Public Sub car_kind()   Dim CarName As String   Dim i As Integer, j As Integer, k As Integer   For j = 0 To 300     Sheets(2).Range("A1").Offset(j + 1) = j + 1     For i = 0 To 50       CarName = Sheets(1).Range("A1").Offset(j, i)       If CarName = "" Then         Exit For         End If         For k = 0 To 50           If Sheets(2).Range("B1").Offset(, k) <> "" And _             Sheets(2).Range("B1").Offset(, k) = CarName Then             Sheets(2).Range("B1").Offset(j + 1, k) = j + 1             Exit For           ElseIf Sheets(2).Range("B1").Offset(, k) = "" Then             Sheets(2).Range("B1").Offset(, k) = CarName             Sheets(2).Range("B1").Offset(j + 1, k) = j + 1             Exit For           End If         Next k     Next i   Next j End Sub

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.2

行方向に、1行づつ並べ替えした後、全体をA列をキーにして並べ替えると、図の様になります ここまでできれば、関数でも、条件付き書式でも容易に分類出来ると思います 1行づつ300行を並べ替えるのは大変ですので、マクロにしてみました 「列の最大」が 5 になってますが、これを実際のデーターに合わせてください ------------------- Sub MC1()  cx = 5 '列の最大  lx = 1  Do Until Cells(lx, 1) = ""   Range(Cells(lx, 1), Cells(lx, cx)).Select   Selection.Sort Key1:=ActiveCell, Order1:=xlAscending, Header:=xlGuess, _    OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _    :=xlStroke, DataOption1:=xlSortNormal   lx = lx + 1  Loop  Range(Cells(1, 1), Cells(lx, cx)).Select  Selection.Sort Key1:=ActiveCell, Order1:=xlAscending, Header:=xlGuess, _   OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _   :=xlStroke, DataOption1:=xlSortNormal End Sub ---------------- 入力ミスなどで、「一致するべきものが一致しない」場合が心配ですが 片仮名の全角半角の違い程度でしたらexcelがうまく処理してくれそうです (図ではフェラリーの「フ」を全角と半角でやってみましたが、うまく判定されている様です)

appleaudi
質問者

補足

ありがとうございます。 (例えば)E列からの内容を行方向に並べ替えたいときはどのように書き換えたらよろしいでしょうか? どうぞよろしくお願いいたします。

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

50種類程度とありますが、その50種類が順序は違ってもすべて同じに入力されていなければ数えないことでよいのでしょうか? 入力ミスなどもあったりで、完全一致しないケースも多いと思いますが、どうでしょう。作成の目的は何ですか?

appleaudi
質問者

補足

こんにちは。 >50種類程度とありますが、その50種類が順序は違ってもすべて同じに入力されていなければ数えないことでよいのでしょうか? はい。同じ内容の行をまとめて分類したいのです。

関連する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列に"年"を含む、"時間"を含む ===ここまで=== 上記の分類付けに当てはまらないものもあるのですが、それは空白のままにします。どのような分類にするかは検討中です。 記録マクロでやるにも編集が難しくて自力ではすぐには無理そうでした。 お手数ですがよろしくお願いします。

  • Excel VBA セルの指定方法について

    Excell2013です。 次のような表(一部)があります。   日   項目      額       分類   12 ノート 250 3 この、250を、別表の分類3の列(H列)の12日の行(15行)のセルに、そこにすでに値があれば250との合計値として入力したいのです。 データによって日付も分類も違いますので、マクロで自動的に入力したいのですが、どうもよくわかりません。 このような場合のVBAでの入力先セルの指定のしかたをどうすればよいのかどなたかご教示ください。

  • 2つのファイルで大分類の項目が部分一致し小分類の項目が完全一致の数を出したい

    1つ目のエクセルファイルに 列・・・大分類の項目(例:テレビ修理) 行・・・小分類の項目(例:ねじ) 2つ目のエクセルファイルに 列・・・小分類や単価等の項目名 行・・・大分類の項目(例:テレビ修理(基本))や小分類の項目(例:ねじ)、単価(¥50)と横に並んでいます。 それで、 「テレビ修理」・・・1つ目の大分類と2つ目の大分類の項目と一部一致している。 「小分類の項目」・・・1つ目の小分類と2つ目の小分類の名前は完全一致 していたら「単価」(¥50)とセルに出したいのですが、関数の組み合わせ方がわかりません。 手入力しかないのでしょうか?知恵を貸してください。お願いします。

  • excelで検索結果の表示

    J8にD列の語句を入力すると、検索結果の所に同じ行のデータを表示させるような仕組みを考えているのですが、どうもよくわかりません。D列の語句はvlookup関数で出すことはわかりましたが、その両隣の行のデータを出すのがまだわかりません。OFFSET関数でいけるのかな?とも思ったのですが… 詳しい方おられましたらよろしくお願いします。

  • Excel VBAで抽出したデータを別シートに表示する方法。

     Excelで20分類された3000行くらいの商品DBシートから名前の定義を利用して分類別のリスト選択(入力規則)しています。  内容は分類シートで商品DBシートから分類列別で抽出し(関数で分類)分類列ごとに名前の定義を設定し入力シートでリスト化(入力規則)を行っております。  商品DBシートにデータを追加すれば自動的に分類シートに反映はされますが、各セルに関数が入っており、再計算が非常に時間がかかります。  VBAで効率よく分類、またはそれ以外の方法がありましたら、ご教授いただければと思います。  よろしくお願いいたします。

  • エクセルで2つの列のセルの内容の比較と取り出し方法

    はじめまして。 エクセルの使い方を教えてください。 2つのエクセルファイル(または同じファイルの異なった)列にあるセルの内容を比較してどちらにも共通する内容のセルまたはどちらにも含まれてないセルの内容を取り出して適当なところに置く。セルの内容は文字または数字とします。 又、共通するセルは、そのセルの背景に色をつけるなどを行う。列の長さは任意とします。実際の一列の長さは1000行を超えることもあります。    例 列Aはブランクも含めて8行、列Bは3行とします「質問する」とすると列が乱れてしまいますので列の境を¥で示します   ¥ 列A ¥  列B 行1¥ 3-4 ¥ 2-4-3 行2¥ 2-4-3¥ 5-1 : ¥ 4-1 ¥ 3-4 : ¥ 5-1 ¥ : ¥ 2-5 ¥   : ¥   ¥ : ¥ 3-4  ¥ 行8¥ 23  ¥ 演算の結果 色付けは此処ではできませんのでつけません。              -並べる順序は適当とします---    ¥列A  ¥ 列B  ¥ 共通セル¥不一致セル 行1¥ 3-2 ¥ 2-4-3  ¥ 2-4-3 ¥    3-2 行2¥ 2-4-3 ¥ 5-1 ¥ 3-4 ¥ 4-1 : ¥ 4-1 ¥ 3-4 ¥ 5-1 ¥ 2-5 : ¥ 5-1 ¥ ¥ ¥ 23 : ¥ 2-5 ¥ ¥ ¥ (Blank)    : ¥(Blank)¥ : ¥ 3-4 ¥ 行8 ¥ 23   ¥ 以上よろしくお願いします。 

  • excel印刷で改頁をする時に罫線を引きたいのですが、良い方法ありますか?

    excel印刷で20枚ほど印刷しています。 大分類・中分類・明細と言った感じの一覧表です。 大分類がA列で100行ほどを枠線で囲っています。中分類がB列で20行程を枠線で囲ってタイトルを入れています。 明細は一行づつで、罫線で囲っています。 セル結合はしていません。 そこで、印刷すると最終行の大分類・中分類で、下部線が印刷されない頁が出てきます。明細列は印刷されます。 (罫線自体excelに入ってないですから当然ですが。) 印刷する為に、罫線を入力すると画面での見た目が良くない為入れたくないです。 そこで、改頁前の最終行に罫線を印刷するような設定をしたいのですが、良い方法は無いでしょうか? <出来ればマクロは使いたくないです。> 宜しくお願い致します。

  • エクセルの日にちごとのアンケート集計の関数について

    シート名(アンケート) A列:日付 (12/1 12/2 など) F列:分類 (電話 パソコン  など) シート名(合計) A13には 12/1と記入されており 13行は 12/1の分類の集計を入力致します。 14行は 12/2の分類の集計を入力致します。 その際、13行のE(E13)には12/1の 電話の集計     13行のF(F13)には12/1の パソコンの集計     14行のE(E14)には12/2の 電話の集計 を入力する場合、どのような関数を使えばよろしいのでしょうか。 よろしくお願いします。  アンケートと合計は 同じBOOKのエクセルの中にあります。 ご教示いただけますでしょうか。

  • Excelで行列から検索する

    行に企業名、列に国名の入った表があります。この表から下記のように、(企業名、国名)となる値を検索したいのですが、どうすればよいでしょうか。 米国 英国 中国 トヨタ 10 15 20 日産 5 4 3 ホンダ 0 5 10 例 (日産、英国)=4 実際には国は100、企業は3000位あります。 よろしくお願いいたします。

  • エクセルで、「’」を一括で削除する方法ってありますか?

    助けてください! エクセルで、A列の数字すべてに「’」が入っています。 ’19990708 ’20001223 この「’」を一括で削除し、 19990708 20001223 に変更することは出来ますか? (行は3万行くらいあり、手処理で「’」を削除するのは無理なんです) または、A列は日付列なのですが、’19990708を1999/07/08と日付に認識させる関数などはありますか? left関数、mid関数、&と"/"など試してみましたが、「’」が取れませんでした。 (1999/07/08とした後、セルの書式設定→分類→日付→種類で7月8日や7/8と表示を変更させたいのです。) どんな方法でもいいので、どなたか解決方法を教えてください。 よろしくお願いいたします。

専門家に質問してみよう