人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルで項目名を指定せずに数を数える方法をおしえて下さい。

A B C D
1 いちご りんご ぶどう めろん
2 りんご みかん めろん いちご
3 みかん いちご みかん みかん
4 すいか いちご

このような表を別のシート、もしくは別の列に

4 いちご
4 みかん
2 めろん
2 りんご
1 すいか
1 ぶどう

このように数えたいです。項目名を「いちご」等指定することなく、
例えば「さくらんぼ」という項目が新たに入っても対応するようにしたいです。
よろしくお願いします。

●質問者: eco_clover
●カテゴリ:コンピュータ 学習・教育
✍キーワード:いちご さくらんぼ すいか ぶどう みかん
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● くまいみずき
●27ポイント

A B C D

1 いちご りんご ぶどう めろん

2 りんご みかん めろん いちご

3 みかん いちご みかん みかん

4 すいか いちご


と入っていて、


A B C D

11 いちご

12 みかん

13 めろん

14 りんご

15 すいか

16 ぶどう


といった形で、B列に個数を求めたい場合

B列にcountifという関数を埋め込めばできますよ。

例えば、B11の場合


=COUNTIF($A$1:$D$4,A11)


とすれば、いちごの数を数えてくれます。

$A$1:$D$4 がカウントする範囲の指定。

A11 がカウントする項目の条件の指定です。


B11に関数を埋め込んだら、あとは下のセルにコピーすれば数えられます。

また、A列の名称を変更すれば、自動的に数を数えなおしてくれますよ。

◎質問者からの返答

丁寧な回答ありがとうございます。

そうすると、A列に入る項目(いちご等)は自分で拾い出さなければならないということですね。

表から重複しない項目の拾い出しを行なうところから自動で行なうことはできないでしょうか?


2 ● きゃづみぃ
●27ポイント
Sub Macro1()
 s1 = "Sheet1" '対象があるシート
 s2 = "Sheet2" '結果をのせるシート
 
 r1 = 1 '開始 行
 c1 = 1 '開始 列
 r2 = 4 '終了 行
 c2 = 4 '終了 列
 
 a = 0
 
 For b1 = r1 To r2
 For b2 = c1 To c2
 c = Worksheets(s1).Cells(b1, b2)
 If c <> "" Then
 f = 0
 For d = 1 To a
 If Worksheets(s2).Cells(d, 2) = c Then
 Worksheets(s2).Cells(d, 1) = Worksheets(s2).Cells(d, 1) + 1
 f = 1
 Exit For
 End If
 Next d
 If f = 0 Then
 a = a + 1
 Worksheets(s2).Cells(a, 1) = 1
 Worksheets(s2).Cells(a, 2) = c
 End If
 End If
 Next b2
 Next b1
 
 'ソートする。
 Worksheets(s2).Columns("A:B").Sort Key1:=Range("A1"), Order1:=xlDescending, Key2:=Range("B1"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal

End Sub

マクロを作ってみました。

変更箇所は

s1 = "Sheet1" '対象があるシート

s2 = "Sheet2" '結果をのせるシート

r1 = 1 '開始 行

c1 = 1 '開始 列

r2 = 4 '終了 行

c2 = 4 '終了 列

です。

集計は 別シートに出すようにしましたので、そのシート名と 表があるシート名を指定してください。

あと それぞれ行数と列数も 指定してください。


3 ● SALINGER
●26ポイント

Nigitamaさんの言われてるDictionaryオブジェクト使ってみますと・・・

Sub UseDic()
 Dim s1, s2 As String
 Dim myDic As Object
 Dim myKey, myItem
 Dim v1, v2
 Dim i As Long
 
 s1 = "Sheet1" '対象があるシート
 s2 = "Sheet2" '結果をのせるシート
 
 '集計前の表を指定してください。
 v1 = Worksheets(s1).Range("A1:D4").Value
 
 Set myDic = CreateObject("Scripting.Dictionary")
 
 For Each v2 In v1
 If Not v2 = Empty Then
 If Not myDic.exists(v2) Then
 myDic.Add v2, 1
 Else
 myDic(v2) = myDic(v2) + 1
 End If
 End If
 Next
 
 myKey = myDic.Keys
 myItem = myDic.Items
 For i = 0 To UBound(myDic.Keys)
 Worksheets(s2).Cells(i + 1, 1).Value = myKey(i)
 Worksheets(s2).Cells(i + 1, 2).Value = myItem(i)
 Next
 
 'ソートは一緒
 
 Set myDic = Nothing
End Sub
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ