Excelの表で、(A)列にデータ名、(B)列にデータ値が入力されているとして、
1.(C)列に(B)列のデータ値の種類を昇順で表示、
2.(D)列に(C)列のデータ値を持つ(A)列の文字を表示、
3.(E)列に(D)列のデータ種類の数を表示
という3つの内容を実現したいのですが、(1つでも)
ご存知の方、教えて下さい。よろしくお願いしますm(__)m
【イメージ】
| (A) (B) (C) (D) (E)
―――――――――――――――――――
(1)| A 10 10 A、D、E 3
(2)| B 20 20 B、G 2
(3)| C 30 30 C、F 2
(4)| D 10
(5)| E 10
(6)| F 30
(7)| G 20
No.3ベストアンサー
- 回答日時:
(データ)A1:
A列 B列 C列 D列 E列 G列
(空白行)
A10110A、D、E3
B20220B、G2
C30330C、F2
D1050H1
E10
F30
G20
H504
(関数式)C列
C2に=IF(COUNTIF($B$2:B2,B2)=1,MAX($C$1:C1)+1,"")
といれて、C3以下最下行まで式を複写する。
結果は上記C列の通り
(関数式)D列
D2に=INDEX($B$2:$B$100,MATCH(ROW()-1,$C$2:$C$100,0),1)といれて、D3以下C列の最大値まで式を複写する。$B$100の100はデータ数より多ければよい。
結果上記D列の通り。
(関数式)F列
F2に=COUNTIF($B$2:$B$100,D2)といれf3以下にD列の最下行まで式を複写する。
結果上記F列の通り。
問題はE列だが、複雑になりそうなので、考えて出来れば、別回答にします。
この回答への補足
ご回答有難う御座います。もう一つ知りたいのですが、D列のデータは昇順に表示することは、出来ないのでしょうか。よろしくお願いします。m(__)m
補足日時:2004/12/12 13:52No.5
- 回答日時:
ANo.2の続きです。
E列の1つのセルにA、D、Eなどと表示することはやっぱりマクロを使わないと出来ないようですが、G列以降に1列に1つずつ該当するデータの種類を表示することは可能です。
F1セルに以下の式を入力して、F2以下にコピーします。
=IF(E1>0,INDEX($A$1:$A$20,MATCH($C1,$B$1:$B$20,0),1),"")
ifでE1セルの個数が1以上の場合に表示する判定をしています。あとはMATCH関数でC列の数値に合致するA列の種類を表示します。これで、最初の1つ目の種類は表示されます。上記の式では範囲を1~20行までのしていますので、必要に応じて設定してください。
次にG1セルに以下の式を入力し、G2以下および、H,I・・・と以降の列に予測される種類の数分だけコピーします。
=IF($E1-COUNTA($F1:F1)>0,INDEX(INDIRECT("$A$"&TEXT(MATCH(F1,$A$1:$A$20,0)+1,"###")&":$A$20"),MATCH($C1,INDIRECT("$B$"&TEXT(MATCH(F1,$A$1:$A$20,0)+1,"###")&":$B$20"),0),1),"")
少々式が複雑ですが、INDIRECT関数で自分より前にある種類をのぞいた残りの行でのF1セルと同じことをしています。
例えば、G1せるでは、F1セルにすでに"A"が表示されていますので、このAがある1行目+1から範囲をさだめて、
=IF($E1-COUNTA($F1:F1)>0,INDEX($A$2:$A$20,MATCH($C1,$B$2:$B$20,0),1),"")
という式になります。
あとどうしてもE列に表示したいときは、F列以降の文字を連結する式をE列に書いておけば(例えば =F1&G1&H1&I1 とか)、ほぼ質問の内容になるかと思います。
No.4
- 回答日時:
#3です。
#3で予告した、質問のD列の回答を上げます。
式が長くなって、いっそVBAでやりたい誘惑に駈られますが。
(データ)
A列 B列 C列 D列 E列
(空白行)#3と合わす為でなくても良いが式が変わる
A101000110ADE
B202000120BG
C303000130CF
D101000250H
E1010003
F3030002
G2020002
H5050001
(関数式)C列
C2に=B2&LEFT("00",3-LEN(COUNTIF($B$2:B2,B2)))&COUNTIF($B$2:B2,B2)
といれて最下行まで式を複写する。結果は上記C列の通り。
(D列)
#3で回答した方法で出す。
(関数式)E列以右
E2に=IF(ISERROR(INDEX($A$1:$A$100,MATCH($D2&TEXT(COLUMN()-4,"000"),$C$1:$C$100,0),1)),"",INDEX($A$1:$A$100,MATCH($D2&TEXT(COLUMN()-4,"000"),$C$1:$C$100,0),1))
といれる。適当に右方向に式を複写する。Z列まで複写した
とすると、E2:Z2を範囲指定して、Z2で+ハンドルを出し
D列の最下行まで引っ張る。
結果は上記のE,F、G列・・の通り。
B列の10,20,30・・の出現回数は999回以下の仮定となっています。001とかの連番を振る仕組みのため。9999回とかまでにも容易に変えられます。
この回答への補足
ご回答有難う御座います。教えて頂いた『#3』はできたのですが、『#4』のD列の設定で、D2に【=INDEX($B$2:$B$100,MATCH(ROW()-1,$C$2:$C$100,0),1)】を入力したのですが、#N/Aと表示されてしまいます。勝手なお願いで申し訳ないですが、原因を教えて頂けないでしょうかm(__)m
補足日時:2004/12/12 13:02No.2
- 回答日時:
質問の1.および3.は下記の方法で可能です。
2.については再帰できる関数というものがないので、関数ではかなり難しいと思います。これだけは#1で回答されているようにマクロを使うしかないと思いますが。
3.について
参照の都合上、こちらを先に書きます。
まず、E1セルにsmall関数を使って最小値を探し、それと同じ数値をcountif関数で数えます。
具体的には、
=COUNTIF([範囲],SMALL([範囲],1))
です。[範囲]にはデータのあるB列を指定してください。例→ B1:B7 とか、
E2は、
=COUNTIF([範囲],SMALL([範囲],SUM($E$1:E1)+1))
として、これをデータ数分だけ下にコピーしてください。small関数は第2引数で指定した順位のデータを返す関数なので、第2引数にすでにカウントした分+1を設定しています。
1.について
C1セルについては、最小値を得ればいいので、
=SMALL([範囲],1)
とします。
C2セルは、
=IF(E2=0,"",SMALL([範囲],SUM($E$1:E1)+1))
として、C3以下にコピーします。
if関数はエラーを表示させないためだけに使っています。
D列については、先に書きましたように関数では難しいと思います。
No.1
- 回答日時:
マクロを作ってみました
Public Sub 処理()
Dim base As Range, i, pos
Dim NumList, max, min, wk
Set NumList = CreateObject("Scripting.Dictionary")
max = -999999999
min = 999999999
Set base = Range("A1")
i = 0
Do While (base.Offset(i).Value <> "")
If Not NumList.Exists(base.Offset(i, 1).Value) Then '始めてでてくる数値を登録
NumList.Add base.Offset(i, 1).Value, base.Offset(i).Value
If max < base.Offset(i, 1).Value Then max = base.Offset(i, 1).Value
If min > base.Offset(i, 1).Value Then min = base.Offset(i, 1).Value
Else '重複する場合、連結する
NumList.Item(base.Offset(i, 1).Value) = NumList.Item(base.Offset(i, 1).Value) & "," & base.Offset(i).Value
End If
Range(base.Offset(i, 2), base.Offset(i, 4)).ClearContents
i = i + 1
Loop
pos = 0
For i = min To max
Do Until NumList.Exists(i)
i = i + 1
If i > max Then Exit Sub
Loop
base.Offset(pos, 2).Value = i
base.Offset(pos, 3).Value = NumList.Item(i)
wk = Split(NumList.Item(i), ",")
base.Offset(pos, 4).Value = UBound(wk) + 1
pos = pos + 1
i = i + 1
Next
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- その他(Microsoft Office) wordの差し込み印刷での日付表示 2 2023/08/15 16:51
- その他(Microsoft Office) Excel2019と365、2021 2 2023/07/08 06:22
- Excel(エクセル) Excelのテーブルについて 6 2023/07/07 08:37
- Excel(エクセル) エクセル 関数について 2 2022/10/10 07:56
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) Power Query でのデータの一括修正について 2 2022/05/10 02:00
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
Microsoft1Officeの互換ソフト...
-
Excel ピボットテーブルで日付...
-
エクセル関数を教えてください
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
LOOKUP関数を使えばいいのでし...
-
エクセル 白黒印刷で白線を印刷...
-
【関数】先頭だけにある、半角...
-
【関数】適切な文字数の数字を...
-
Excelのチェックボックスの使い...
-
エクセルでの作業計算方法について
-
Excelのpivotについて質問です
-
WPS OFFICEでの縦書きについて
-
時間によってファイル名が変わ...
-
エクセルのセルに同じ大きさの...
-
Aというブックの1というシート...
-
エクセルの順位別一覧表の自動...
-
西暦や和暦の表示をyyyymmdd表...
-
【マクロ】エクセルにかいてあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報