1行目が項目、
2行目以降にデータが入っています。
合計30万行位あり、B列の重複数をカウントしたいのですが、とても時間がかかります。
数式は、
=countif(B:B,B2)
で、重複してる行全てに同じ数字を入れる必要があります。
(昇順にして上から1ずつ増やしていくカウント方式では駄目。)
同じデータが6個ある場合は、6行とも”6”が入っている必要あり。)
行った工夫としては
=countif($B1:$B300000,B2)
しかし、カウントする列が3列もあるので大変です。
もっと早く結果を出す方法は無いでしょうか?
VBAでも構わないのですが、、、
A 回答 (18件中1~10件)
- 最新から表示
- 回答順に表示
No.18
- 回答日時:
No17です。
>大文字小文字が違っていても重複としてくれる方法は無いでしょうか?
>事前にLower関数で小文字化すれば良いので面倒なら大丈夫です。
Lower関数と同様の処理を行えばよいでしょう。
VBAのLCase、UCase関数がこれに該当します。
https://docs.microsoft.com/ja-jp/office/vba/lang …
No13の処理では、一番最初に元データを配列vに読み込んでいますので、直後に全体を小文字化をしてから処理をするようにすれば、補足でご質問のような比較も可能です。
ただし、全角文字を半角にするような場合には工夫が必要になると思います。
(処理が複雑になれば、段々時間がかかることになります)
No.17
- 回答日時:
No16です。
>1列だけ試してみたら1分かからず結果が返ってきました。
う~~ん。けっこう時間がかかりますね。
とは言っても、更に速くなりそうな方法はVBAの範囲では残念ながら思いつきません。
>せっかくなら自動で3回処理できないかなと。
列が不明なので、別に設定する方式にしておいただけですので、決まっているのならそれに対応させてしまえばよいでしょう。
(37列、38列)と(40列、41列)、(43列、44列)と規則性があるようなので、列の値を変数にして全体をループすればすむと思われます。
あるいは、現状のものをサブルーチン化しておいて、
Call Subroutine( 元の列, 記入列 )
のようにして呼び出すメインルーチンを付け加えても宜しいかと思います。
(3回だけなら、ループなど利用せずに直接3行書いても変わらないですね)
ありがとうございます。サブルーチン化するのが初めてなのでやってみます。
No.13での事、ここで書かせてください。
高速になってとても助かるのですが一点見つけました。
大文字小文字まで区別してしまうため、以下のような場合重複としてカウントしてくれませんでした。
Excelの関数だと両方とも「2」いう結果が返ってきました。
Beijing12349876 →1
BEIJING12349876 →1
大文字小文字が違っていても重複としてくれる方法は無いでしょうか?
事前にLower関数で小文字化すれば良いので面倒なら大丈夫です。
No.15
- 回答日時:
[No.10お礼]へのコメント、
サヨナラはしたけれど、…(*^_^*)
》 正直言うと、貴方の添付してくれた画像が小さくて…
早く言ってよオ~ッ!
それは仰るとおり、元は大きな画像であっても「本サービスの仕様」で縮小されチャウんですよね。でも、Win10Pro Ver.21H2を使用中の私は、該当図をマウスで右クリック⇒[新しいタブで画像を開く]⇒作成された該当タブ[M.jpg(500x271)]をマウスでツンツンした画像は馬鹿デカイので、Ctrlキーを抑えて[-](マイナス)キーをツンツンして、縮小せずには居られない⇒鮮明になる
という次第。
知らなかったでしょ?是非、オタメシあれ。(^_^)
ご親切にコメントありがとうございます。
仰る通りに本スレッドの添付画像を右クリックして新しいタブで開いてみましたが、小さい画像のまま別タブ表示されました^^;
それをCtrl+プラスキーで拡大すると、粗くはなりますが判別できるサイズにはなりました。ChromeでもEdgeでも同様でした。
新しいタブで画像を開と、投稿する時の画像サイズ等倍で表示できる機能なのでしょうかね。だとすると投稿時のサイズ次第かと。
あと一定サイズ以上は自動的に縮小されるみたいなのでその辺の影響かもしれませんね。
No.14
- 回答日時:
fujillinさんこんばんは
VBAからセルにアクセスすると遅いけど、ディクショナリーを使って集計、配列編集して一気に貼り付ければパフォーマンスを最大限に活かせる
流石ですm(_ _)m
No.13
- 回答日時:
こんばんは
>VBAでも構わないのですが、、、
VBAは必ずしも速くはありませんので、単体の計算だけで比べればエクセル本体の方が速いはずです。
(関数1箇所だけなら、範囲が広くても瞬時に結果がでます。)
ただし、同じ関数を大量のセルに設定すると同様の計算を何度も行うことになるので、時間がかかる可能性はありますね。
以下は、VBAで全体をまとめて同時に計算してしまう例です。
VBAの場合、セルにアクセスすると時間がかかるため、速度を優先するのにメモリの使用量が多い方法になっています。
マシンの性能や使用可能メモリの影響を受けますが、私の環境では、出力までを含めて300000行を処理するのに約1秒でした。
※ どこかの列に結果を出力するものと思いますが、なんの記載も無いので、ひとまずD列に出力するようにしてあります。
※ 何回投稿しても「投稿中エラー」が発生してしまうため、通常とは少し異なる記述法に変えてあります。
Sub Q13027572()
Dim d, v, t, n As Long, i As Long
Const c1 = "B" '← カウント対象データ列
Const c2 = "D" '← 出力列
Const dic = "Scripting.Dictionary"
n = Cells(Rows.Count, c1).End(xlUp).Row - 1
If n < 1 Then Exit Sub
Set d = CreateObject(dic)
v = Range(c1 & "2").Resize(n).Value
For i = LBound(v) To UBound(v)
t = v(i, 1)
If t <> "" Then
If d.Exists(t) Then d(t) = d(t) + 1 Else d.add t, 1
End If
Next i
For i = LBound(v) To UBound(v)
t = v(i, 1)
If t = "" Then v(i, 1) = "" Else v(i, 1) = d(t)
Next i
d.RemoveAll
Range(c2 & "2").Resize(n).Value = v
MsgBox "END"
End Sub
ありがとうございます。すごいです!
1列だけ試してみたら1分かからず結果が返ってきました。
正直、その列だけピボットテーブルで集計できるからOKと思ってましたが、
やっぱりマクロで自動化出来るならそれに越したことはありません。
ここまで具現化してしまったのでちょっと希望と欲が出てきました。
当方が実際に使っている集計表で列を確認したところ
カウント対象データ列と出力列の組み合わせが、以下の3パターンあります。
AK、AL
AN、AO
AQ、AR
ソースのConst c1、c2の箇所でを書き換えて3回回せば良いので問題ないのですが、
せっかくなら自動で3回処理できないかなと。
簡単に出来るのであればご教授ください。
No.11
- 回答日時:
こんばんは、
>VBAでも構わないのですが、、、
VBAの場合、ユニーク数が多い様であれば、それなりに処理時間がかかりそうかな・・CountIf 遅いので
ユニーク数が少なければ、・・・(どの位を想定?)
CountIfの回数を減らして、テスト的にB列の結果をC列に出力とかで
数百とかユニーク数があるなら・・時間のある時に
Sub test()
Dim i As Long, j As Long
Dim Rng As Range
Dim myList, aryData
Dim tmp(), ans()
With ThisWorkbook.Worksheets(1)
Set Rng = .Range(.Cells(1, "B"), .Cells(.Rows.Count, "B").End(xlUp))
myList = WorksheetFunction.Unique(Rng)
ReDim tmp(UBound(myList), 1)
ReDim ans(Rng.Rows.Count)
For i = 1 To UBound(myList)
tmp(i, 0) = myList(i, 1)
tmp(i, 1) = Application.CountIf(Rng, myList(i, 1))
Next
aryData = Rng.Value
For i = 1 To UBound(aryData)
For j = 1 To UBound(tmp)
If tmp(j, 0) = aryData(i, 1) Then ans(i - 1) = tmp(j, 1): Exit For
Next
Next
'キヤスメ
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
.Cells(1, "C").Resize(UBound(ans)).Value = WorksheetFunction.Transpose(ans)
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End With
End Sub
>ピボット集計 賛成です
>Vlookupで どうかな?
No.10
- 回答日時:
[No.5お礼]へのコメント、
私の添付図が「イマイチ理解できず」は(理解力の問題なので)仕方ないとしても、
貴方から「しかし、左端図の結果を得たい」なんてな頓珍漢なコメントを頂戴するようでは、ここでオサラバ、退散させていただきます。
ちなみに、私の左端図は結果でなくて、開始図ですよッ!
「左端図を最終的に右端図にする」って申し上げていたじゃな~いッ!
サ・ヨ・ナ・ラ(^_^)/~~~
正直言うと、貴方の添付してくれた画像が小さくて(これは本サービスの添付画像の仕様ですかね)、
更にはその時私が使用していたノートの液晶画面が小さくて、文字が潰れて読めた物じゃなかったんです。
作業に焦っていた当時、拡大して解読してる余裕はなかったので、自分の理解不足とお礼で書きました。
頓珍漢と思わせて失礼しました。
ありがとうございました。
No.9
- 回答日時:
[No.5お礼]へのコメント、
》 流れがイマイチ理解できず…
オヤオヤ、困ったモンですね。
私の方ではイマイチどころか、貴方が記述された箇処にサッパリポンなところがあります。
》 重複してる行全てに同じ数字を入れる
と確かに仰いましたよね?
=countif(B:B,B2)の戻り値が 1 以外は、日本語的に、全~部重複してる数を表してますよね?
C列が「 1 以外」の 2 以上の B列の同じ行全てに同じ数字 6 を入れるンじゃなかったの、日本語的に?!
No.4のお礼に書きましたが、
言葉で説明するより具体例を挙げた方が早いですね。
失礼しました。
やりたかったのはこういう事です。
ピボット集計した結果をVlookupで当てはめるのが一番効率良いと考えています。もっと良い方法あれば助かります。
----------
B列、C列
鈴木、6
佐藤、2
阿部、3
田中、2
鈴木、6
鈴木、6
井出、1
阿部、3
木下、1
鈴木、6
佐藤、2
田中、2
鈴木、6
阿部、3
鈴木、6
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 重複しているか否かをソートせずに判断する方法ありますか? 2 2022/07/06 21:16
- Excel(エクセル) エクセルでフィルタ後の列の重複を回避したい 6 2022/10/13 12:50
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) countif関数について質問 4 2022/06/14 12:11
- Excel(エクセル) Excelでの複数条件のカウントについて 1 2022/09/25 07:40
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- その他(Microsoft Office) SUMIFとCOUNTIFの違いについて 4 2022/09/29 14:13
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
【お題】 ・このサンタクロースは偽物だと気付いた理由とは?
-
【Excel】 SUMPRODUCT関数の高速化
Excel(エクセル)
-
Excelで重複データの件数ではなく、何番目かを求める方法
Excel(エクセル)
-
SUMIFに変わる(代用)数式を教えてください
Windows 7
-
-
4
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
5
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
6
エクセルファイルのシート毎の容量
Excel(エクセル)
-
7
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
8
EXCEL VBA マクロ 実行する度に処理速度がどんどん遅くなる原因が知りたい
Excel(エクセル)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
VBA public変数はどのようなことをしたら解放されますか?
Visual Basic(VBA)
-
11
VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。
Excel(エクセル)
-
12
別ファイルを開かず、INDIRECT関数を使用せずに、別ファイルのデータを求めたい
Excel(エクセル)
-
13
Excelで数値→文字列変換で指数表示になったものをいっぺんに直したい
Excel(エクセル)
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
Excel マクロ VBA プロシージャが大きすぎます のエラー対処方法
Visual Basic(VBA)
-
16
Excel:指定セル以下全てのセルの値の合計
Excel(エクセル)
-
17
VBAでEmpty値って何ですか?
Excel(エクセル)
-
18
エクセルで、重複データを除外して小さい値順に並べ替える関数
Excel(エクセル)
-
19
ワードの印刷設定は保存出来ませんか?
Word(ワード)
-
20
Excel VBAが徐々に遅くなる
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excel:別シートの値を飛び飛び...
-
Excelで2行単位のソートの出来...
-
複数の条件に合う行番号を取得...
-
エクセルで日付から日にちを削...
-
VBA 大きなtxtテキストファ...
-
Excel VBA 【QueryTables.Add】...
-
エクセルで、重複データを除外...
-
エクセルで1列に500行並んだデ...
-
Countifよりも早く重複数をカウ...
-
値を入力後、自動的にアクティ...
-
A1セルに入力したら、入力時間...
-
エクセルの複数のセルを一括で...
-
お肉の下のシートを煮込んでし...
-
Excelの入力規則で2列表示したい
-
EXCELで○ヶ月を○年○ヶ月に変換...
-
Excelでセルに入力されたカラー...
-
ある倍数だけを塗りつぶす方法 ...
-
複数の文字列のいずれかが含ま...
-
エクセルで表示されている数字...
-
excel:条件付き書式の適用範囲...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
エクセルで1列に500行並んだデ...
-
excel:別シートの値を飛び飛び...
-
複数の条件に合う行番号を取得...
-
エクセルで、重複データを除外...
-
Excelの30個ずつの平均値の出し方
-
Countifよりも早く重複数をカウ...
-
VBA 数式を最終行までコピー
-
エクセルVBA C列に特定の文字列...
-
500行の中から、多い順に抽出す...
-
エクセル2016にて、行挿入&コピ...
-
エクセルで横並びの複数データ...
-
エクセル~空白のセルのある行...
-
Excelで2つのデータの突合せを...
-
エクセルで重複データを削除す...
-
エクセルで時刻だけを抜き出す...
-
【Excel】小計単位で並べ替えを...
-
本日の日付を超えているものを...
-
エクセルで1つの会社名に対して...
おすすめ情報