No.1ベストアンサー
- 回答日時:
こんばんは!
【例2】の部分でB列だけに番号を表示させなければならないとなると、関数では難しいと思います。
番号を複数列に表示しても良いのであれば関数で可能です。
しかし、実際問題として重複数がいくつあるか決まっていないと思いますので・・・
VBAでの一例です。
Sheet1のデータをSheet2にまとめるようにしてみました。
Sheet1のデータはA~C列(1行目はタイトル行)にあるとしています。
画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub test() 'この行から
Dim i, j As Long
Dim vl As Variant
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("sheet1") '←Sheet名は実際のSheet名に!
Set ws2 = Worksheets("sheet2") 'こちらのSheet名も適宜変更
For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row
If WorksheetFunction.CountIf(Range(ws1.Cells(2, 1), ws1.Cells(i, 1)), ws1.Cells(i, 1)) = 1 Then
ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) = ws1.Cells(i, 1)
End If
Next i
Dim str, buf As String
For j = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row
If ws1.Cells(i, 1) = ws2.Cells(j, 1) Then
str = ws1.Cells(i, 2)
buf = buf & str & ","
vl = vl + Cells(i, 3)
End If
Next i
ws2.Cells(j, 2) = Left(buf, Len(buf) - 1)
ws2.Cells(j, 3) = vl
buf = ""
vl = 0
Next j
ws2.Columns("A:C").AutoFit
End Sub 'この行まで
こんな感じではどうでしょうか?m(__)m
No.2
- 回答日時:
金額だけなら、SUMIFやSUMPRODUCT関数で簡単に出来る。
ただし氏名の重複のないリストを1つの列のセルに作るのはやさしい関数ではない。
これも質問表現には入っていない点だが、軽く見てはいけない。
フィルター「フィルタオプションの設定」の「重複するレコードは無視する」、をお奨めする。
ーー
問題は鈴木の2,3,4,6を1セルに出すことだが、関数では難しい(難しい関数の組み合わせになる)と思う。エクセル関数の型破りの質問だ。
どうしても必要なら、私ならVBAで処理する。
例データ
A列ーE列
氏名番号金額
山田1¥120山田1
鈴木2¥150鈴木2,3,4,6
鈴木3¥200山本5
鈴木4¥100
山本5¥100
鈴木6¥100
E2セルに =gaitou("A",D2)”A"は氏名の「ある列の列番号、D列は氏名のあるセル(gaitouはユーザー関数)
下方向に式を複写
結果銃器E列
ーー
その前に
標準モジュールに
Function gaitou(a, b)
d = Cells(65536, a).End(xlUp).Row
For i = 1 To d
If Range(a & i) = b Then
s = s & Cells(i, "B") & ","
End If
Next i
gaitou = Left(s, Len(s) - 1)
End Function
を作っておく。
ーー
合計数は平凡なことだから略。
上記では番号の列がB列にあることを仮定している。
No.3
- 回答日時:
今仮に、【例1】で「氏名」と入力されているセルが、Sheet1のA1セルで、Sheet3のA列~C列を作業列として使用し、Sheet2に【例2】を表示するものとします。
まず、Sheet3のA2セルに次の数式を入力して下さい。
=IF(COUNTIF(Sheet1!$A$1:$A2,Sheet1!$A2)=1,ROW(Sheet1!$A2),"")
次に、Sheet3のB2セルに次の数式を入力して下さい。
=IF(Sheet1!$A2="","",Sheet1!$A2&COUNTIF(Sheet1!$A$1:$A2,Sheet1!$A2))
次に、Sheet3のC2セルに次の数式を入力して下さい。
=IF(Sheet1!$A2="","",IF(COUNTIF(Sheet1!$A$1:$A2,Sheet1!$A2)=1,Sheet1!$B2&"",VLOOKUP(Sheet1!$A2&COUNTIF(Sheet1!$A$1:$A2,Sheet1!$A2)-1,$B:$C,2,FALSE)&","&Sheet1!$B2))
次に、Sheet3のA2~C2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。
次に、Sheet2の
A1セルに 氏名
B1セルに 番号
C1セルに 金額
と入力して下さい。
次に、Sheet2のA2セルに次の数式を入力して下さい。
=IF(ROWS(A$2:A2)>COUNT(Sheet3!$A:$A),"",INDEX(Sheet1!$A:$A,SMALL(Sheet3!$A:$A,ROWS(A$2:A2))))
次に、Sheet2のB2セルに次の数式を入力して下さい。
=IF($A2="","",VLOOKUP($A2&COUNTIF(Sheet1!$A:$A,$A2),Sheet3!$B:$C,2,FALSE))
次に、Sheet2のC2セルに次の数式を入力して下さい。
=IF($A2="","",SUMIF(Sheet1!$A:$A,$A2,Sheet1!$C:$C))
次に、Sheet2のA2~C2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。
これでSheet2に【例2】の表が表示されます。
No.4
- 回答日時:
番号の表示が一番難しいところですね。
作業列を作って対応してはどうでしょう。元の表がシート1に有るとして1行目は項目名がA列からC列にあるとして、D2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(A2="","",MATCH(A2,A:A,0)+COUNTIF(A$2:A2,A2)/1000)
E2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,A2&","&B2,INDEX(E$1:E1,MATCH(ROUNDDOWN(D2-0.001,3),D$1:D1,0))&","&B2))
F2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=COUNTIF(A:A,A2),MAX(F$1:F1)+1,""))
なお、D,E,F列が目障りでしたらこれらの行を選んで右クリックし、「非表示」を選択すればよいでしょう。
お求めの表はシート2に表示させるとしてA2セルには次の式を入力してC2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。
=IF(ROW(A1)>MAX(Sheet1!$F:$F),"",IF(COLUMN(A1)=1,INDEX(Sheet1!$A:$A,MATCH(ROW(A1),Sheet1!$F:$F,0)),IF(COLUMN(A1)=2,SUBSTITUTE(INDEX(Sheet1!$E:$E,MATCH(ROW(A1),Sheet1!$F:$F,0)),$A2&",",""),IF(COLUMN(A1)=3,SUMIF(Sheet1!$A:$A,$A2,Sheet1!$C:$C)))))
No.5
- 回答日時:
回答No4です。
先の場合にはシート2の結果では山本の下にスズキのデータが表示されます。
それをお示しのような結果に、つまり鈴木の後に山本の結果を表示させる場合にはシート1のF2への入力の式は次の式にしてください。
=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,INT(MAX(F$1:F1))+1,IF(COUNTIF(A$2:A2,A2)=COUNTIF(A:A,A2),INDEX(F$1:F1,MATCH(A2,A:A,0))+0.1,"")))
その上でシート2のA2セルには次の式を入力してC2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。
=IF(ROW(A1)>MAX(Sheet1!$F:$F),"",IF(COLUMN(A1)=1,INDEX(Sheet1!$A:$A,MATCH(ROW(A1),Sheet1!$F:$F,0)),IF(COLUMN(A1)=2,IF(COUNTIF(Sheet1!$A:$A,$A2)=1,SUBSTITUTE(INDEX(Sheet1!$E:$E,MATCH(ROW(A1),Sheet1!$F:$F,0)),$A2&",",""),SUBSTITUTE(INDEX(Sheet1!$E:$E,MATCH(ROW(A1)+0.1,Sheet1!$F:$F,0)),$A2&",","")),IF(COLUMN(A1)=3,SUMIF(Sheet1!$A:$A,$A2,Sheet1!$C:$C)))))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Excel(エクセル) (教えて下さい)ExcelのSUMIF又はSUMIFSを使って合計値の算出 4 2023/07/24 11:23
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- 戸籍・住民票・身分証明書 銀行印は、苗字と違ってもいいのですか? 5 2023/04/04 21:22
- その他(悩み相談・人生相談) 名前を呼んだり、苗字を呼んだりする心理。 2 2022/12/11 17:48
- その他(Microsoft Office) outlookで宛先が異なるメールを一括送信する方法 outlookで200人それぞれをtoに指定し 2 2023/08/03 21:24
- PHP MySql PHP 2つのテーブルをJOINで結合 user_idで抽出 1 2023/01/03 14:04
- Visual Basic(VBA) 先ほど、回答者様によって教えていただいたのですがどうしたらいいか分かりません。 ユーザーフォーム上に 2 2023/02/21 22:25
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
関連するカテゴリから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 フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報