MS-Excelで以下の集計をし、結果を求めていただけないでしょうか?
(苦手故にまる投げですいません)
http://pub.idisk-just.com/fview/ynkl7T7BjCctAJ_w2DHwfi163kAmg8okhXY4jgJNoOdbOQ-NciB8cA?
ここに圧縮されたファイルがあります。
解凍して見てもらえばわかると思うのですが、23859レコードあるデータの「個数」の集計をしたいです。
表が12個あり、空白セルに該当の個数がわかるように数値を入れればOK!
タイプ別、フラグ別、府県別、日にち(月)別
にいくつあるのかな〜というのを知りたいのです。
求めているのは「数値」なんですが、セルには関数を用いて算出した形跡を残したままにしてほしく、かつ完成したファイルを、ここからDLして下さい〜みたいな感じで提示いただければ嬉しいです。
上記リクエストが満足されている最初の方に、少ないですが500Pを贈らさせてください!
どうぞよろしくお願い致します!!
http://www.hatena.ne.jp/1116665491#ダミー:detail]
ワークシートファイルを見たのですが
表の
ABC
DEF
GHI
JKL
A・D・G・Jはいいんですけど
B・E・H・Kはどれも「タイプ=MS1でフラグ=2」であればOK
C・F・I・Lはどれも「フラグ=3」であればOK
と集計条件がダブっていませんか?
あまりに計算に時間がかかったため、1列追加しました。
だめならいいです。
ついでに表の左から3つめのならびもちょっといじりました。
ちょっとしたら消します。
ありがとう!
見ました。(が、たまにフリーズしてしまいます。再計算が耐えられないのかな?)
見た感じではよいようですので、あなた様に500P贈ろうと思います。
本当にありがとう。
実は、表で、おかしいところがありましたので、修正版をアップしました。
タイプ3というのは存在しないため、タイプ0への修正です。
また、もう一人、贈る方をお待ちいたします。
回答が満足できれば、500Pその方にも贈ろうと思います。
引き続きどうぞよろしくお願い致します。
MS1,MS2,M41,M42 × 0,1,2 = 12個の表(都道府県,年月)という事で、算出してみました。
ひたすらIF関数で場合分けして、SUM関数で集計しています。再計算にはやたら時間がかかりますのでご注意下さい。
ぱっと見た感じでは、回答者2.の方のと、条件が同じ箇所は、同じ値になっているようです。
ありがとう!!
http://support.microsoft.com/kb/257819/ja/
[HOWTO] Visual Basic または VBA から ADO を Excel データで使用する
なんとなく VBScript 版(ADO + Excel)を作ってみました。
g_target と g_output の箇所を修正して、
コマンドラインから
C:¥>cd C:¥home¥edu¥hatena¥perishable¥1116665491
C:¥home¥edu¥hatena¥perishable¥1116665491>CScript CalcData.vbs
と実行すると CSV ファイルが出来上がります。
(Excel ファイルを更新してもいいんですが、面倒なのでやめました。)
’ CalcData.vbs
’ Usage : CScript CalcData.vbs
’
Option Explicit
Const g_target = ”C:¥home¥edu¥hatena¥perishable¥1116665491¥q.xls” ’ 計算対象データ
Const g_output = ”C:¥home¥edu¥hatena¥perishable¥1116665491¥result.csv” ’ 出力先
’ 処理の実行
CalcData
Sub CalcData()
Dim typeName
typeName = ””
Dim typeNames(3) ’ (0 To 3)
typeNames(0) = ”MS1”
typeNames(1) = ”MS2”
typeNames(2) = ”MS41”
typeNames(3) = ”MS42”
Dim flag
flag = 0
Dim flagArray(2) ’ (0 To 2)
flagArray(0) = 1
flagArray(1) = 2
flagArray(2) = 3
Dim areaName
areaName = ””
Dim areaNames(29) ’ (0 To 29)
areaNames(0) = ”愛知”
areaNames(1) = ”静岡”
areaNames(2) = ”岐阜”
areaNames(3) = ”三重”
areaNames(4) = ”石川”
areaNames(5) = ”富山”
areaNames(6) = ”福井”
areaNames(7) = ”大阪”
areaNames(8) = ”京都”
areaNames(9) = ”兵庫”
areaNames(10) = ”奈良”
areaNames(11) = ”滋賀”
areaNames(12) = ”和歌山”
areaNames(13) = ”広島”
areaNames(14) = ”鳥取”
areaNames(15) = ”島根”
areaNames(16) = ”岡山”
areaNames(17) = ”山口”
areaNames(18) = ”愛媛”
areaNames(19) = ”香川”
areaNames(20) = ”徳島”
areaNames(21) = ”高知”
areaNames(22) = ”佐賀”
areaNames(23) = ”長崎”
areaNames(24) = ”熊本”
areaNames(25) = ”大分”
areaNames(26) = ”宮崎”
areaNames(27) = ”鹿児島”
areaNames(28) = ”沖縄”
areaNames(29) = ”福岡”
Dim yymmTerm
yymmTerm = ””
Dim yymmTerms(10) ’ (0 To 10)
yymmTerms(0) = ”2004/07”
yymmTerms(1) = ”2004/08”
yymmTerms(2) = ”2004/09”
yymmTerms(3) = ”2004/10”
yymmTerms(4) = ”2004/11”
yymmTerms(5) = ”2004/12”
yymmTerms(6) = ”2005/01”
yymmTerms(7) = ”2005/02”
yymmTerms(8) = ”2005/03”
yymmTerms(9) = ”2005/04”
yymmTerms(10) = ”2005/05”
Dim nCount
nCount = 0
Dim strLine
For Each typeName In typeNames
For Each flag In flagArray
For Each areaName In areaNames
strLine = typeName & ”,” & flag & ”,” & areaName
For Each yymmTerm In yymmTerms
nCount = GetItemCount(typeName, flag, areaName, yymmTerm)
strLine = strLine & ”,” & nCount
Next
DebugPrint strLine
Next
Next
Next
End Sub
Function GetItemCount(typeName, flag, areaName, yymmTerm)
Dim cn ’ As ADODB.Connection
Set cn = CreateObject(”ADODB.Connection”)
With cn
.Provider = ”Microsoft.Jet.OLEDB.4.0”
.ConnectionString = ”Data Source=” & g_target & ”;” & _
”Extended Properties=Excel 8.0;”
.Open
End With
Dim strQuery
’strQuery = ”SELECT COUNT(*) FROM [Sheet1$A1:E23860] WHERE ”
strQuery = ”SELECT COUNT(*) FROM [Sheet1$] WHERE ” & _
”タイプ=’” & typeName & ”’ AND ” & _
”フラグ=” & flag & ” AND ” & _
”都道府県=’” & areaName & ”’ AND ” & _
”YEAR(日にち) = ” & Year(yymmTerm) & ” AND MONTH(日にち) = ” & Month(yymmTerm)
Dim rs
Set rs = CreateObject(”ADODB.Recordset”)
Set rs = cn.Execute(strQuery)
Dim nCount
nCount = rs(0)
rs.Close
cn.Close
GetItemCount = nCount
End Function
Sub DebugPrint(strMessage)
Dim debug_file
debug_file = g_output
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fso, f, ts
Set fso = CreateObject(”Scripting.FileSystemObject”)
If Not fso.FileExists(debug_file) Then
fso.CreateTextFile debug_file ’ Create a file.
End If
Set f = fso.GetFile(debug_file)
’Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
Set ts = f.OpenAsTextStream(ForAppending, TristateUseDefault)
ts.WriteLine strMessage
ts.Close
End Sub
ただ、ものすごく重いです(自分の PC で 10 分くらい)
かなり最適化の余地はありますが、とりあえずソースコードの見やすさ重視で
作ってみました。
CSVとは 【カンマ区切り】 (Comma Separated Values) ─ 意味・解説 : IT用語辞典 e-Words
実行結果です。
MS1,1,愛知,0,0,0,0,0,0,0,0,0,0,0
MS1,1,静岡,0,34,143,0,0,0,20,172,0,0,0
MS1,1,岐阜,0,4,225,98,0,3,0,0,2,0,0
MS1,1,三重,0,41,106,4,12,22,0,0,0,0,0
MS1,1,石川,0,0,0,0,0,0,0,0,0,0,0
MS1,1,富山,0,0,0,0,0,0,0,0,0,0,0
MS1,1,福井,0,0,0,0,0,0,0,0,0,0,0
MS1,1,大阪,393,73,0,0,324,42,0,0,0,0,0
MS1,1,京都,0,69,212,132,0,19,0,0,0,0,0
MS1,1,兵庫,0,69,228,76,476,0,0,0,77,0,0
MS1,1,奈良,0,0,0,0,0,0,0,0,0,0,0
MS1,1,滋賀,0,0,0,0,0,0,0,0,0,0,0
MS1,1,和歌山,0,0,0,0,0,0,0,0,0,0,0
MS1,1,広島,45,92,115,74,23,5,0,0,0,0,0
MS1,1,鳥取,0,0,0,0,0,0,0,0,0,0,0
MS1,1,島根,0,0,0,0,0,0,0,0,0,0,0
MS1,1,岡山,0,194,464,43,0,0,0,0,25,0,0
MS1,1,山口,0,13,110,59,51,7,87,98,0,0,0
MS1,1,愛媛,0,6,243,306,0,7,87,49,186,0,0
MS1,1,香川,0,0,0,0,0,0,0,0,0,0,0
MS1,1,徳島,0,0,0,0,0,0,0,0,0,0,0
MS1,1,高知,0,0,0,0,0,0,0,0,0,0,0
MS1,1,佐賀,0,0,0,0,0,0,0,0,0,0,0
MS1,1,長崎,0,0,0,0,0,0,0,0,0,0,0
MS1,1,熊本,0,0,88,131,0,0,0,0,0,0,0
MS1,1,大分,0,0,0,0,0,0,0,0,0,0,0
MS1,1,宮崎,0,0,0,0,0,0,0,0,0,0,0
MS1,1,鹿児島,0,1,50,201,135,77,14,218,430,0,0
MS1,1,沖縄,0,0,7,27,0,0,0,0,0,0,0
MS1,1,福岡,0,0,221,480,615,0,0,4,0,0,0
MS1,2,愛知,0,0,0,0,0,0,0,0,0,0,0
MS1,2,静岡,0,0,0,0,0,0,0,0,0,0,0
:
(中略)
:
MS42,3,長崎,0,0,0,0,0,0,0,0,0,0,0
MS42,3,熊本,0,0,0,0,0,0,0,0,0,0,0
MS42,3,大分,0,0,0,0,0,0,0,0,0,0,0
MS42,3,宮崎,0,0,0,0,0,0,0,0,0,0,0
MS42,3,鹿児島,0,0,0,0,0,0,0,0,0,0,0
MS42,3,沖縄,0,0,0,0,0,0,0,0,0,0,0
MS42,3,福岡,0,0,0,0,0,0,0,0,0,0,0
ありがとう!
http://alg.at.infoseek.co.jp/qa.zip
infoseek isweb
himamiさんとは違うやり方ですが、どうでしょうか。
(このファイルは少ししたら消します)
皆様、貴重なお時間いただきまして、ありがとう!! 皆さん完璧でしたよー。お礼は、500Pを早いおふたりに!
すいません、その通りです!
本当にごめんなさい!15分以内に修正版をアップします!