A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ピボットテーブルで処理するのが標準的な方法ですが、
参考までに数式を使って処理する方法を。
以下、元データがSheet1の$A$1:$A$99にあり、Sheet2に抽出するとします。
(元データのシートは変更しません)
-----------------------------------------------------------------
●A案:作業列を使って数式で処理
1.Sheet2のA1セルを、
=IF(COUNTIF(Sheet1!$A$1:A1,Sheet1!A1)=1,COUNTIF(Sheet1!$A$1:$A$99,Sheet1!A1)+1/(ROW()+1),"")
として、99行目まで下方にフィル
2.Sheet2のB1セルを、、
=INDEX(Sheet1!$A$1:$A$99,1/MOD(LARGE($A$1:$A$99,ROW()),1)-1)
として、#NUM!が返るまで下方にフィル
※初出のデータについて、度数に行番号の逆数を加えた値を振る
※度数が大きいものから順に選び、端数の逆数(行番号)をとって、該当行の値を返す
-----------------------------------------------------------------
●B案:作業列を使わず数式一発で処理
1.B1セルを選択
2.数式バーに下記の数式を入力
=INDEX(Sheet1!$A$1:$A$99,1/MOD(LARGE(((MMULT((Sheet1!$A$1:$A$99=TRANSPOSE(Sheet1!$A$1:$A$99))*(ROW(Sheet1!$A$1:$A$99)>TRANSPOSE(ROW(Sheet1!$A$1:$A$99))),ROW(Sheet1!$A$1:$A$99)))=0)*(Sheet1!$A$1:$A$99<>"")*(COUNTIF(Sheet1!$A$1:$A$99,Sheet1!$A$1:$A$99)+1/(ROW(Sheet1!$A$1:$A$99)+1)),ROW()),1)-1)
3.Ctrl+Shift+Enterで確定
4.B1セルを#DIV/0!が返るまで下方にフィル
通常の数式はEnterキーで確定しますが、
こちらの数式は配列数式なので、CtrlとShiftを押しながらEnterで確定してください。
参考として書いてみましたが、複雑、長い、重い、の三重苦ですね。
また、MMULTを使っているので元データが5460を超える場合には対応できません。
-----------------------------------------------------------------
エラー処理については、必要に応じて、
・IFERROR関数をかぶせる(Excel2007)
・条件付き書式で白フォントにする
・ページ設定で印刷しないようにする(Excel2002以降)
・=IF(ISERROR(数式),"",数式)で、長さゼロの文字列を返す
・気にしない
その他ご自由に。
いずれもExcel2003で動作確認済。
No.1
- 回答日時:
(1)データ内容(りんごなど)のユニークな列(1回階しか現れない列)を同一シートに作る。
フィルタオプションで「重複するレコードは無視する」を使う。
参考
http://q.hatena.ne.jp/1135141460の2番回答
(2)Countif関数で件数を出す。
(3)(1)の列+(2)の列でソートする
ーー
色々注文をつけているようだが、上記で不満な点は何かな。
ーー
フィルタを使わないなら
第1行は空白にして
例データ A2:A11
A列 B列
a1
b2
a
a
a
b
c3
a
b
c
B列は =IF(COUNTIF($A$2:A2,A2)=1,MAX($B$1:B1)+1,""
と入れて下方向に式を複写する。
これに対しSheet2ナリで、
=INDEX(Sheet1!A:A,MATCH(ROW()-1,Sheet1!B:B,0),1)
と入れて下方向に式を複写する。
結果
Sheet2
a
b
c
#N/A
以上imogasi方式でGoogle照会してもらえれば、類似質問が沢山出る
し#N/Aの消し方もわかると思う。
しかしエクセルは操作のソフトであり、関数でやるのはどうかと思うが、何でも関数の質問者も多い。
(2)またピボットテーブルででもできる
(3)関数FREQUENCYでは文字列の出現頻度は無理のよう。
(4)VBAでもそれほどロジックは難しくない。
初回の出現時にセルに書き出し(表)件数は1とし、毎回(行のデータについて)セルのその表を調べて、該当すれば件数を+1していく。その後はソートする。
この回答への補足
今回質問させていただいたのは、
多数のデータシートごとに集計するにあたって、
元のデータシートをできるでけ変更せずに、
(個々のデータシートにデータ列を作るのは非常に手間がかかり、
かつミスを生じる原因となるので...)
なるべく簡単かつ確実に集計結果を参照できないか
と考えたためです。
関数式を希望したのは、このような理由からでした。
どうもありがとうございました。
(1)とても参考になりました。
(2)ピボットテーブルの使い方も学習してみようと思います。
(3)数字でしたら可能なようですね。当初、この方法でできないかと考えていました。
(4)VBAの知識はまったくありませんので、またの機会にしたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】functionプロシージ...
-
googleのスプレッドシート
-
エクセル IF計算式?でしょうか?
-
エクセル折れ線グラフについて...
-
Excelで数値を時間数に変換する...
-
Excelの警告について
-
EXCELで数値が異なった数字を足...
-
エクセル、LibreOffice Calcプ...
-
【マクロ】for nest について ...
-
エクセルを使用して、円周率を...
-
Excelについて
-
エクセルの数式バーのフォント...
-
Excelについて。Excelに縦1列に...
-
エクセルでファイルの最終更新...
-
【マクロ】関数をセルに入力す...
-
【マクロ】AブックからBブック...
-
エクセルマクロを教えてほしい...
-
【マクロ】マクロが割当てされ...
-
エクセルのセルの書式ユーザー...
-
エクセルをエクセレントに究める
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの数式バーのフォント...
-
エクセルでファイルの最終更新...
-
2列に入っているデータを1列...
-
データチェックを行うエクセル...
-
再質問です。マクロの修正箇所...
-
エクセルで 自動的に◯や数字を...
-
数字入力後他の文字等が表示さ...
-
Excel 小さくなったスクロール...
-
F9キーについて。
-
【ExcelVBA】ダブルクォーテー...
-
Excelに詳しい方! B列が「日...
-
セルの数を求めたい
-
Excelを無料で使うには? パソ...
-
IFとIFS関数
-
【Excel】別シートから条件に合...
-
EXCELの散布図で日付が1900年に...
-
ある表にフィルターをかけて出...
-
【ExcelVBA】名前を付けて保存→...
-
Excelセルを跨いで合計を出す方法
-
エクセルのツールバーから数値...
おすすめ情報