[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別ブック データ年代別』(akira115)
Excel2003です。現在顧客ごとに、年齢、住所を入力しています。
新しいブックに入力している年齢を年代別に集計しようと思っています。住所も範囲を設定して集計できるようにしたいです。
フォルダをあ行、か行のように作成していて各フォルダに100ブック程あります。よい方法を教えてください。
< 使用 Excel:Excel2003、使用 OS:Windows7 >
何を集計するのですか?
足すのではなくて、データ一覧を作るという事ですか?
よい方法・・・漠然としているので答えにくいですが、マクロで1ブックに纏めてから考えてはどうですか?
(ウッシ) 2017/01/11(水) 14:24
(akira115) 2017/01/11(水) 14:31
どのような意味で「集計」という言葉を使っているのか、実際はどうしたいのか
具体的にしないと分からないです。
(例)1book あ様 年齢43歳
2book い様 年齢31歳 3book う様 年齢53歳
も、意味が分からないです。
フォルダ階層、ブック名、シート名、シート内のデータ位置、転記する項目とそのセル位置
をはっきりさせないと。
1ブックに纏めなくても、
年代別に顧客名と年齢だけ抽出する。
住所も範囲?別に顧客名と年齢だけ抽出する。
だけで良いとしてもいちいち全フォルダの全ブックを検索するのは非効率的だと思います。
データは一元管理して、必要なデータを抽出する方法に変えた方がいいと思います。
> 年齢は全部同じセルではなくC3〜C10までに入力されています
そのセル範囲のどの部分が年齢なのかどうやって判断するのですか?
ロジックで判定出来ないような構成のブックなら、全て手作業でという事になりますよ。
(ウッシ) 2017/01/11(水) 14:44
フォルダをあ行、か行のように作成していて各フォルダに100ブック程
というブックは1ブック1顧客ではないのですか?
「あ」「い」「う」・・・という先頭1文字のかな名でブックを分けているのですか?
名前 生年月日 年齢 保険種目 保険会社 保険料 住所 年代 郵便番号?
という項目を1行目にセットしたブックに各フォルダの100ブック程のブックのデータを
一覧表の形で纏めてはという提案です。
集計する項目が「保険料」(ここで初めて出てきましたが)なら、その一覧表から
ピボットテーブルで年代別に集計とか、郵便番号の範囲で集計とかできますから。
(ウッシ) 2017/01/11(水) 15:03
・特定のフォルダの下は、同じ階層に、あ行、か行…のフォルダが並んでいますか?
・対象となるデータは、各ファイルの、どのシートにありますか? シート名は全て同じ?
・年代別、とおっしゃっていますが、データにあるのは「年齢」であり、生年月日ではないようです。全てのファイルは、同じ年度に作成されたものですか? 年度が違うと、現在の年齢は違ってきますが、平気?
・年齢が入ったセルはC3〜C10との事ですが、その中の何処なのかを判別できる規則性はありますか? 例えば、データの入っているのはこの中のどれか1セルであり、他の7セルは必ず空欄、とか。それとも、必ずC3セルには入力されていて、1人〜8人分の入力があるのでしょうか?
・保険云々の項目が後出し追加されていますが、これは後から手入力するのですね?
とりあえずは、どのようなロジックを書けば良いのかの方針だけ教えれば良さそうなので、マクロの考え方だけ書きますね。
まず、特定フォルダ(あ行、等の1階層上)を元に、サブフォルダを含めた、xlsファイルの一覧を作成します。
(私が過去に何回も書いている、DIRコマンドを利用したコードがありますので、探してください)
次に、該当する全ファイルを順に開いていき、特定シートの特定セル範囲を調べます。 空欄以外ならば、自シートにデータを抜き出します。これを繰り返す事で、自シートに、ブック名、全員の名前、年齢、住所の一覧を作成します。
1シートに全てのデータを集めてしまえば、後はどうにでもできるでしょう。
(???) 2017/01/11(水) 15:08
こんな感じで作成しています。
世帯ごとに保存しているので、他にご家族がいれば下に追加されます。
なので入力があるブックとないブックがあります。
(akira115) 2017/01/11(水) 15:20
それと、家族分は下に続くのならば、C3〜C10セルなんて使う必要はなく、C2セルからだけ抜き出せば良いと思いますが、なぜ年齢がC3〜C10だという説明があったのでしょうか?
(???) 2017/01/11(水) 15:38
シートの構成に関しては、どうなのでしょう? 全て同じシート名ですか? それとも、全て1シートだけ使えば良いのですか? まだまだ判らない事だらけです。
(???) 2017/01/11(水) 15:45
ザックリしたマクロだと、
Sub test()
Dim t As String Dim w As Workbook Dim v As Variant Dim r As Range 'ブックの入っているフォルダ名は「あ行」「か行」とかとする 'あ行、か行とかのフォルダがまとまっているフォルダ名 Const f As String = "C:\temp\DATA\" Application.ScreenUpdating = False For Each v In Array("あ行", "か行", "さ行", _ "た行", "な行", "は行", _ "ま行", "や行", "ら行", _ "わ行", "を行", "ん行") If Dir(f & v, vbDirectory) <> "" Then t = Dir(f & v & "\*.xls", vbNormal) Do While t <> "" Set w = Workbooks.Open(f & v & "\" & t) Set r = w.Worksheets(1).Range("A1").CurrentRegion.Offset(1) r.Copy ThisWorkbook.Worksheets(1).Range("A" & Rows.Count).End(xlUp).Offset(1) w.Close t = Dir() Loop End If Next Application.ScreenUpdating = True End Sub
こんな感じです。
フォルダ名とかパスは適宜変更して試して下さい。
(ウッシ) 2017/01/11(水) 15:59
Sub test() Const cPATH = "C:\temp\DATA\" Dim cFiles As Variant Dim vw As Variant Dim iR As Long Dim i As Long
Application.ScreenUpdating = False
iR = Cells(Rows.Count, "A").End(xlUp).Row If 1 < iR Then Rows("2:" & iR).Delete End If iR = 1
cFiles = Split(CreateObject("WScript.Shell").Exec("CMD /C DIR /A:-D/B/S """ & cPATH & "*.xls""").StdOut().ReadAll(), vbNewLine) For i = 0 To UBound(cFiles) - 1 If LCase(Right(cFiles(i), 4)) = ".xls" Then iR = iR + 1 vw = Split(cFiles(i), "\") Me.Cells(iR, "A").Value = vw(UBound(vw) - 1) Me.Cells(iR, "B").Value = vw(UBound(vw)) With Workbooks.Open(cFiles(i), False, True) With .Sheets(1) .Range("A2:G2").Copy Me.Cells(iR, "C") End With .Close End With End If Next i
Application.ScreenUpdating = True End Sub (???) 2017/01/11(水) 16:39
A B C D E F G 1 名前 生年月日 年齢 種目 保険会社 月払保険料 年間保険料 2 ○○子様 昭和30年6月7日 61 自動車 三井住友海上 4,540円 54,480円 3 火災 三井住友海上 830,710円
ブックに顧客名がそれぞれついていて、あ行のお客様は、あ行というフォルダに入っています。
マクロを入力いただいたのですが、うまく表示されないです。
(すみません、私があまりよく理解していないのでセルとか自分で入力するんでしょうがわからないので)
別シートに一度名前や生年月日の一覧を作成してそれから集計した方が良いですか?
よろしければその方法を教えていただけると有難いです。
何度もわかりにくい質問で申し訳ございません。
(akira115) 2017/01/11(水) 17:59
A3〜C3が空白になっていますね。
A2〜C2と同じと考えていいのですか?
家族分が追加されている場合はどのように入力されているのですか?
先に提示したマクロはA〜G列の1行目には項目名がセットされていて
その下の行のセルはデータで埋まっている事が前提になっています。
保険料のセルは空白であればゼロと捉えるので問題は無いはずですが
集計時のグループ化する対象項目である生年月日の欄は必須です。
また最終行を判定しているのはA列なので、名前が入っていないセルが
有るなら生年月日が入っている事が前提ならB列、でなければ必須入力
となっている列、例えばD列とかで最終行を判定するように変更しないと
ダメです。
年代を判定するための生年月日は必須なので、マクロ上で空白セルを
埋めるロジックが必要になります。
ついでに、住所の話はどうなっているのですか?
(ウッシ) 2017/01/12(木) 08:26
年別シートではなくて、マクロを設定したブックのシートに
それを実現するためのマクロを提示したつもりですけど?
(ウッシ) 2017/01/12(木) 08:30
データの入っている、元のブックは現状のままです。ここにマクロを入れてはいけません。マクロ実行時は、全てブックを閉じておいてください。
新しいブックを開いて、このシートモジュールにマクロを貼ってから実行してください。
(ALT+F11を押下後、左側のSheet1をダブルクリックし、表示された領域に貼る)
今後、ご自分で修正、作成していく気はありますか? 丸投げにしても、使い方くらいは調べて、学んでください。
(マクロを使う気が無いならば、今まで通り手作業でやれば良いだけです)
でもって、当人以外の家族の情報は、コピーする必要があるのですか? データは2行目以降ということで、C3〜と書いてあったのは間違いですか?
(???) 2017/01/12(木) 09:11
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.