日付ごとにフォルダ分けされていて、都道府県ごとの名前でファイルになっていて中身は地名がデータになっています。
全日の合計でそれぞれの地名が合計でどれだけ重複しているかをカウントしたいのです。
そのままそれぞれのファイルとしてはできないかと複数のシートとしてピボットテーブルかカウントイフを使うべきなのかと思っているのですが、それでいいのか、具体的にどうすればいいかなど助言を求めます。
数字ではなく文字列なので、そこも少しややこしい、、
県・市・町などで横並びのセル分けされているので、そこの扱いもどうしようかと考えているのですが。個別にやれば別に困らないのですが、まぁ同じ地名って別の県にはありますし、セルを同一としてみればいいでしょうか。
よろしくお願いします。
コメント(8件)
でも、集計は手探りのところがあるから、表計算ソフトを使ってあれこれいじりたい、というのも分かります。
バラバラの CSV ファイルを直接集計することはできないので、半自動化するとしたら、こんなアプローチかな、と思います。
- OpenOffice とは別の言語で、バラバラの CSV をひとつの CSV に結合するスクリプトを書く。
それを Calc で取り込んで、ピボットテーブルで集計する。
- OpenOffice Basic で、バラバラの CSV を Calc のひとつのシートに順番に読み込むマクロを書く。
そのシートに対してピボットテーブルを作り、集計する
# OpenOffice Basic で集計までするマクロも書けますが、それだったら Ruby とかの方が簡単に書けそう
住所については、文字列として結合したセルをひとつ作って、それを対象に集計するのが良いと思います。
実は、以前教えて頂いていたあのプログラムとは別に、clsのファイルデータがありまして、、
集める段階からならばおっしゃる通り一貫してやってしまえばいいのですが、別の目的で集まっているデータを別の段階で処理しないと、、
ということから、全く別のことから普通に操作を知りたいということでした。
わかりづらかったですね、、ただ前回の続きではないですが、技術そのものは繋がるなぁと自分でも思っていました。
マクロ組むまでもなく普通に関数でできるはずなんですが、いろいろやってみてどうも正常に処理されないため正確に処理する方法を最初から訊いてみました。
いろいろ調べてどうにも数字なら容易なのですが。
それを、Excel ではなく OpenOffice Calc を使って集計したいと。
OpenOffice Calc は知らないんですが、複数の(それも、多分、大量の)Excel のデータを対象にピボットテーブルは使えない(Calc ならパイロットテーブル?)と思います。
countif 関数は普通に使えると思いますが、
・条件に相当する住所の一覧がないと調べられない
・ひとつのセルの内容で一致を調べるので、県・市・町を結合したセルが欲しいところ
バラバラになった Excel のシートをひとつにまとめたいところですね。
それにはやっぱりマクロかな...
ちなみに、Ruby や Perl には Excel のデータファイルを直接参照できるようなライブラリもあったりします。
google driveとsky driveもあるなぁと試しているところです。
そちらで気付いたのですが、範囲・条件での条件ではひとつのセル・言葉を特定しないといけないのですね。CountIFです。
つまりひとつずつであり、行・列や範囲としてはできない。
また値が入っているセル同士では両方のデータを残したままセルの結合ができないんですね。
通常の関数では難しいなと感じました、、、
こういう制限があるから通常の使い方なんだなと改めて思いながら、いろいろ試しています。
イメージとしては、条件部分を範囲でやるということだから、入力されている範囲内のデータをそこにあるデータ全てで数え直すという感じなので、マクロのような使い方でないとできないか、、
関数に無理やり範囲入れたら「1」となりましたw 同じ範囲内に複数繰り返しあればこの数字も変わりますね。
ちなみに同じシート内であれば列でそれぞれセルの数字ずらして数えるだけならばCountIFでできますが。
これならシート結合して数える方が容易でしょうかね、、全部からまた必要カ所だけ切り取るとして。
しかしRubyやPerlでデータを抜きだせるならば、そちらで繰り返し処理のようにする方がいいのでしょうか。
シートやセルの扱いはプログラミングをどうするんだろうと普通より特殊にも思いますが、こうなるとむしろそっちが普通にも思えてきます。
まぁまだまだいろいろ思い付きやってみます当然ですが。
countif 関数の話。
複数の範囲と条件は、Excel だったら counifs 関数というのがあります。最後に s がついたやつ。
これと同じことをやるなら、sumproduct 関数を使えば良いらしいです。
https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=17900
もしくは、値を連結した列を別に作っちゃう。
セルの範囲指定で結合、ではなく、空いてる列に =A2&B2&C2 みたいに、文字列の連結の式を入れる。
この列に対して、countif です。
この関数は公式以外にもいろいろ使い方があるようで、とりあえず検索したらいろいろヒットしたので使い方からもヒントないかと調べています。
他にも組み合わせがないかも考えてみます。
それぞれシート別にしてもやり方わかりましたが、やはり根本的なところが難しい、、
基本的な使い方として、数種類の名前の個数や~以上以下など数字の個数ならカウントが容易ですが、複数の住所録を別シートとして、地名の重複をカウントすることになるので、カウントするための地名は住所録の名前を範囲で指定、できるのか、、、
やはり条件そのものをそんなに広く範囲指定している例はなかなかない。
ぅーん、発想がもう少しなのかもしれないですね、、、