連想配列が1つのセルにまとめれません!
500行500例の値があります!
一行に何の値が何件あるか集計したいのです。
A列に一行一行 1が1件2が2件3が3件4が4件5が5件
↓の行A列に 10が1件20が2件30が3件40が4件50が5件
以下この処理を500行を左端のA列にまとめて置きたいのです。
ご教示頂けたら幸いです。
下のソースだと、A列にまとめれません!
よろしくお願いいたします。
ソース
Sud countNumbers()
Dim i As Integer
Dim sline As Integer
sline = 1
Set sd = CreateObject(″Scripting.Dictionary″)
Application.ScreenUpdating= False
For i = 5 To 500
sNo=Worksheets(1).Cells(sline,i).Value
sd(sNo) = sd(sNo) + 1
Next
Application.ScreenUpdating = True
i = 1
For Each sn In sd
Worksheets(1).Cells(1,i).Value = sn & ″が″ & sd(sn) & ″件″
i = i + 1
Next
Set sd = Nothing
End Sub
この値を配列に貯めて、1つのセルに参照したいのですが!
上手くいきません…
宜しくお願いします。
No.5ベストアンサー
- 回答日時:
コードから推測してデータはE列以降を使用し、且つE1~Eの最終行までのカウントを
A列の同行に書き出すものと推測します。
Sub try()
Dim myDic As Object
Dim key As Variant
Dim st As String
Dim r As Range, rr As Range
Dim v As Variant
Set myDic = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating= False
For Each r In Range("E1", Cells(Rows.Count, 5).End(xlUp))
For Each rr In Range(r, Cells(r.Row, Columns.Count).End(xlToLeft))
If Not myDic.Exists(rr.Value) Then myDic.Add rr.Value, Array(rr.Value, "が", 0, "件")
v = myDic(rr.Value)
v(2) = v(2) + 1
myDic(rr.Value) = v
Next
st = ""
For Each key In myDic.Keys
st = st & " " & Join(myDic(key), "")
Next
r.Offset(, -4).Value = Trim(st)
myDic.RemoveAll
Next
Application.ScreenUpdating = True
Set myDic = Nothing
End Sub
ご参考になれば。
すいません、ありがとうございます。今週ためしてみます!
図々しいのですが参考書のオススメってどういったのがいいかご存知でしょうか?
No.3
- 回答日時:
サンプルデータを見ていないからはっきり言えませんが、内容の印象からすると、度数を求めているように思えます。
まあ、Dictionary オブジェクトはあえて使いたいならともかく、それほど使う必要性はあるとは思えません。Excelをお使いのようですから、COUNTIF で計算してしまえばよいと思います。
例
度数
0 分布度数は任意
20
40
B2
数式 iData : 名前登録で、A5:~データの末尾まで
=COUNTIF(iData,"<="&A3)-COUNTIF(iData,"<"&A2)
No.2
- 回答日時:
あと気になるのは
> 1が1件2が2件3が3件4が4件5が5件
取得した値を昇順に並び替える必要の有無ですね。
VB.NETならSortedDictionary クラスがありますので気にはしませんが、
Dictionary オブジェクトではそれは無理になります。
どうしても順序を並べ替えるというのであれば、その部分を追加になるでしょう。
No.1
- 回答日時:
>左端のA列にまとめて置きたいのです。
セルの内容を書き換えてしまいたい?
⇒同一のSheetを指定してますよね?
それに書き出す前に現在あるデータをクリア(削除)してないですし。
A列に纏めると書きながら
>Worksheets(1).Cells(1,i).Value
列は変更してますよ?
これだとA列ではなく『1行目に』書き出すって事になりますが?
基本的にDictionaryに『そのキーが既に存在するか存在しないか』で、
処理は変わりますよ。
あとDictionaryに放り込む際には
>Application.ScreenUpdating= False
は、いらないでしょ。
通常Sheetに書き出す際に止めたいのですし。
>For Each sn In sd
色々変数の宣言を飛ばしている点も気になりますけど、
DictionaryからKeyを取り出すなら sd.Keys ではないかな?
元のSheetの状態と期待する結果のSheetの状態がわかれば、
さほど問題ではないように思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
VBA 何かしら文字が入っていたら
-
IIF関数の使い方
-
VBAコンボボックスで選択した値...
-
VBAのFind関数で結合セルを検索...
-
【Excel VBA】 B列に特定の文字...
-
複数の列の値を結合して別の列...
-
VBAを使って検索したセルをコピ...
-
Cellsのかっこの中はどっちが行...
-
セルに値が入っていた時の処理
-
オートフィルタをマクロで作成...
-
文字列の結合を空白行まで実行
-
空白セルをとばして転記
-
Excel マクロ VBA 別シートのセ...
-
VBA A列にありB列にないものま...
-
Changeイベントでの複数セルの...
-
DataGridViewに空白がある場合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
【VBA】2つのシートの値を比較...
-
VBA 何かしら文字が入っていたら
-
IIF関数の使い方
-
VBAを使って検索したセルをコピ...
-
Changeイベントでの複数セルの...
-
VBAの構文 3列置きにコピーし...
-
VBAのFind関数で結合セルを検索...
-
【Excel VBA】 B列に特定の文字...
-
VBAで指定範囲内の空白セルを左...
-
VBAでのリスト不一致抽出について
-
セルに値が入っていた時の処理
-
VBAコンボボックスで選択した値...
おすすめ情報