OpenOffice Calc で複数のxls.csvファイル内にある住所データをカウントしたいと思います。


日付ごとにフォルダ分けされていて、都道府県ごとの名前でファイルになっていて中身は地名がデータになっています。
全日の合計でそれぞれの地名が合計でどれだけ重複しているかをカウントしたいのです。
そのままそれぞれのファイルとしてはできないかと複数のシートとしてピボットテーブルかカウントイフを使うべきなのかと思っているのですが、それでいいのか、具体的にどうすればいいかなど助言を求めます。
数字ではなく文字列なので、そこも少しややこしい、、
県・市・町などで横並びのセル分けされているので、そこの扱いもどうしようかと考えているのですが。個別にやれば別に困らないのですが、まぁ同じ地名って別の県にはありますし、セルを同一としてみればいいでしょうか。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2015/11/10 17:36:46
  • 終了:2015/12/10 17:40:03

回答(0件)

回答はまだありません

  • id:a-kuma3
    データの収集もプログラムでやってるので、集計もプログラムでやっちゃえば良いのに、とか思いました。
    でも、集計は手探りのところがあるから、表計算ソフトを使ってあれこれいじりたい、というのも分かります。

    バラバラの CSV ファイルを直接集計することはできないので、半自動化するとしたら、こんなアプローチかな、と思います。

    - OpenOffice とは別の言語で、バラバラの CSV をひとつの CSV に結合するスクリプトを書く。
    それを Calc で取り込んで、ピボットテーブルで集計する。
    - OpenOffice Basic で、バラバラの CSV を Calc のひとつのシートに順番に読み込むマクロを書く。
    そのシートに対してピボットテーブルを作り、集計する

    # OpenOffice Basic で集計までするマクロも書けますが、それだったら Ruby とかの方が簡単に書けそう

    住所については、文字列として結合したセルをひとつ作って、それを対象に集計するのが良いと思います。
  • id:FREEz
    ご回答ありがとうございます。
    実は、以前教えて頂いていたあのプログラムとは別に、clsのファイルデータがありまして、、
    集める段階からならばおっしゃる通り一貫してやってしまえばいいのですが、別の目的で集まっているデータを別の段階で処理しないと、、
    ということから、全く別のことから普通に操作を知りたいということでした。
    わかりづらかったですね、、ただ前回の続きではないですが、技術そのものは繋がるなぁと自分でも思っていました。
    マクロ組むまでもなく普通に関数でできるはずなんですが、いろいろやってみてどうも正常に処理されないため正確に処理する方法を最初から訊いてみました。
    いろいろ調べてどうにも数字なら容易なのですが。

  • id:a-kuma3
    対象にしたいデータファイルは、CSV でも OpenOffice Calc のファイルでもなく、Excel のデータなんですね。
    それを、Excel ではなく OpenOffice Calc を使って集計したいと。

    OpenOffice Calc は知らないんですが、複数の(それも、多分、大量の)Excel のデータを対象にピボットテーブルは使えない(Calc ならパイロットテーブル?)と思います。
    countif 関数は普通に使えると思いますが、
    ・条件に相当する住所の一覧がないと調べられない
    ・ひとつのセルの内容で一致を調べるので、県・市・町を結合したセルが欲しいところ

    バラバラになった Excel のシートをひとつにまとめたいところですね。
    それにはやっぱりマクロかな...

    ちなみに、Ruby や Perl には Excel のデータファイルを直接参照できるようなライブラリもあったりします。
  • id:FREEz
    すみません間違えていました、今見たら拡張子xlsだった、、
    google driveとsky driveもあるなぁと試しているところです。
    そちらで気付いたのですが、範囲・条件での条件ではひとつのセル・言葉を特定しないといけないのですね。CountIFです。
    つまりひとつずつであり、行・列や範囲としてはできない。
    また値が入っているセル同士では両方のデータを残したままセルの結合ができないんですね。
    通常の関数では難しいなと感じました、、、
    こういう制限があるから通常の使い方なんだなと改めて思いながら、いろいろ試しています。

    イメージとしては、条件部分を範囲でやるということだから、入力されている範囲内のデータをそこにあるデータ全てで数え直すという感じなので、マクロのような使い方でないとできないか、、
    関数に無理やり範囲入れたら「1」となりましたw 同じ範囲内に複数繰り返しあればこの数字も変わりますね。
    ちなみに同じシート内であれば列でそれぞれセルの数字ずらして数えるだけならばCountIFでできますが。
    これならシート結合して数える方が容易でしょうかね、、全部からまた必要カ所だけ切り取るとして。

    しかしRubyやPerlでデータを抜きだせるならば、そちらで繰り返し処理のようにする方がいいのでしょうか。
    シートやセルの扱いはプログラミングをどうするんだろうと普通より特殊にも思いますが、こうなるとむしろそっちが普通にも思えてきます。

    まぁまだまだいろいろ思い付きやってみます当然ですが。
  • id:a-kuma3
    OpenOffice Calc の話が続いてると思って良いです?

    countif 関数の話。
    複数の範囲と条件は、Excel だったら counifs 関数というのがあります。最後に s がついたやつ。

    これと同じことをやるなら、sumproduct 関数を使えば良いらしいです。
    https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=17900

    もしくは、値を連結した列を別に作っちゃう。
    セルの範囲指定で結合、ではなく、空いてる列に =A2&B2&C2 みたいに、文字列の連結の式を入れる。
    この列に対して、countif です。
  • id:FREEz
    調べて頂いてありがとうございました。他にもあるとは思わなかったので助かりました。
    この関数は公式以外にもいろいろ使い方があるようで、とりあえず検索したらいろいろヒットしたので使い方からもヒントないかと調べています。
    他にも組み合わせがないかも考えてみます。
  • id:FREEz
    名前の連結はまさにその通りですね。
    それぞれシート別にしてもやり方わかりましたが、やはり根本的なところが難しい、、
    基本的な使い方として、数種類の名前の個数や~以上以下など数字の個数ならカウントが容易ですが、複数の住所録を別シートとして、地名の重複をカウントすることになるので、カウントするための地名は住所録の名前を範囲で指定、できるのか、、、
    やはり条件そのものをそんなに広く範囲指定している例はなかなかない。
    ぅーん、発想がもう少しなのかもしれないですね、、、


  • id:a-kuma3
    ポイント、わざわざすみません m(_ _)m

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません