プロが教える店舗&オフィスのセキュリティ対策術

以下にようにランダムな3桁の数字が並んでいるtxtファイルから、どの数字が何回出現したか、をスピーディに確認する方法はないでしょうか?

仕事でデータ分析のため上記の作業が必要なのですが、いつもはマニュアル作業で上から出てきた数字を片っ端からファイル内で検索かけて、終わった数字は空白に置き換えてファイルから消していくという方法でちまちまと集計しています。。

記録数が膨大な時はめちゃくちゃ無駄な作業に感じるので改善したいのですが、いい方法が思いつかず。。
txtをExcelに取り込んだりもしてみましたが、あまり変わりませんでした。

Excelの計算式でもマクロでも、その他プログラミングでも何でも良いのですが、良い方法はないでしょうか?

以前プログラミング教室に通っていたので、出来ることは確実だと思うのですが、当時の記憶がすべて飛んでしまいました。。

この分野に詳しい方、お知恵を拝借できますと幸いです!

例)
516
515
502
544
599
515
...

→この場合、515以外は一回出現、515は2回という情報を知れれば大丈夫です。

A 回答 (10件)

Excelならピボットテーブルで一撃なのにね。

    • good
    • 0

こんにちは。


MicrosoftのPower BIで出来ると思いますよ。
↓参考にどうぞ。

https://biz.techvan.co.jp/tech-powerbi/blog/powe …
    • good
    • 0

これは、パワークエリで「Σ」ボタンを押すだけでできますね。

    • good
    • 0

自分ならawkでコマンドライン一発かな…


awk '{hist[$1] +=1}END{for(a in hist){print a, hist[a]}}' 3桁数字のファイル.txt

結果は
502 1
515 2
516 1
544 1
599 1
    • good
    • 0

Sortすれば良いのでは?

    • good
    • 0

txtファイルの形、規模がいまいちわかりませんが コピーしてExcelのシートA1セルに貼り付けると 例のように行方向で改行コードでセル別に値が入りますか?



具体的な数式やコードを書いてよいのかわかりませんが・・・

入るとした場合(大前提)
Unique関数が使えるExcelバージョンの一例

A1にテキストを貼り付け
B1セルに=UNIQUE($A$1:$A$100)
C1セルに=COUNTIF($A$1:$A$100,$B1)
C1セルを下方向にフィルハンドル
(とりあえず100行)

これをVBAで行う場合
A1セルにペーストする シートのシートタグを右クリックして コードの表示をクリック
表示された場所に
Sub Numbers_count()
Dim intNumbers()
Dim Rng As Range
Set Rng = Range("A1", Cells(Rows.Count, "A").End(xlUp))
intNumbers = WorksheetFunction.Unique(Rng)
ReDim arrCount(UBound(intNumbers))
Dim k As Variant, n As Long
For Each k In intNumbers
arrCount(n) = WorksheetFunction.CountIf(Rng, k)
n = n + 1
Next
Range("B1").Resize(UBound(intNumbers)).Value = intNumbers
Range("C1").Resize(UBound(arrCount)).Value = WorksheetFunction.Transpose(arrCount)
End Sub

コピペ後 Numbers_count を実行
    • good
    • 0

No1です。

excel-vba(マクロ)になります。
以下のマクロを標準モジュールに登録し、実行してください。
実行すると、ファイル選択用のダイアログボックスが表示されるので、処理対象となるテキストファイルを選択してください。
そうすると、実行結果が、Sheet1に出力されます。(A列が数字、B列が出現回数)
(Sheet1は予め、用意しておいてください)
テキストファイルの拡張子は, ".txt" の前提です。

Option Explicit


Public Sub 出現数カウント()
Dim fname As String
Dim ws As Worksheet
Dim dicT As Object
Dim text As String
Dim key As Variant
Dim wrow As Long: wrow = 1
Set ws = Worksheets("Sheet1")
ws.Cells.ClearContents
Set dicT = CreateObject("Scripting.Dictionary")
fname = Application.GetOpenFilename("テキストファイル,*.txt")
If fname = "False" Then Exit Sub
Open fname For Input As #1
Do Until EOF(1)
Line Input #1, text
If dicT.exists(text) = False Then
dicT(text) = 1
Else
dicT(text) = dicT(text) + 1
End If
Loop
Close (1)
For Each key In dicT.keys
ws.Cells(wrow, 1).Value = key
ws.Cells(wrow, 2).Value = dicT(key)
wrow = wrow + 1
Next
If wrow > 1 Then
ws.Range("A1:B" & wrow - 1).Sort key1:=Range("B1"), order1:=xlDescending, Header:=xlNo
End If
MsgBox ("完了")
End Sub
    • good
    • 0

こんにちは



以下の手順ではいかがでしょうか。

1)エクセルで読み込み
 (A列に取り込めるとします)
2)A列をC列にコピペ
3)C列を選択し、「データ」-「データツール」-「重複の削除」を選択
4)D1セルに
  =COUNTIF(A:A,C1)
 を入力し、D1セルを選択状態で、右下のフィルハンドルをダブルクリック
 (入力した式が、下方にフィルコピーされます)

以上で、D列に出現回数が表示できます。


>以前プログラミング教室に通っていたので、出来ることは確実だと
>思うのですが、当時の記憶がすべて飛んでしまいました。。
何度も同じことを行うのでプログラム化したいというのであれば、上記の操作を「マクロの記録」で記録しておけば、ほぼ再利用可能なマクロを作成できます。
「ファイル内にある数字の出現回数カウント」の回答画像3
    • good
    • 0

自分ならExcelにコピーしてCOUNTIF使います


その後重複を削除して並べ替えるなり
集計用のファイルにvlook当てるなり
    • good
    • 0
この回答へのお礼

ありがとう

ありがとうございます!
どちらの関数も調べてみましたが、
使い方を考えれば上手く出来るかもしれないです。
ちょっとトライしてみます!

お礼日時:2024/03/19 12:47

rubyかpythonかperlのどれかがあなたのPCにインストールされていますか。


そうであれば、簡単です。
どれもインストールされていないなら、excel(vba)になります。
    • good
    • 0
この回答へのお礼

ありがとう

ありがとうございます。
現状はどのプログラミング言語もインストールしていないです。
学校で学んだのはJavaだったのですが、結構使えるようになるまで初期設定面倒だった記憶があり、上げて頂いた言語の中で無料で簡単な設定ですぐ使用できる言語はありますか?
でもExcelで出来るのなら、それが一番有り難いです!

お礼日時:2024/03/19 12:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A