|
▼ひかる さん:
>▼kanabun さん:
>穴埋め問題で助け舟まで出していただき言葉もありません。ありがとうございます。
>それで、とりあえず穴は埋めさせていただきました。
>これで実行して、結果も得られました。ありがとうございました。
>コードの中で質問なのですが、
>1点目は、集計テーブルのA列とB列見出しの結合のところですが、
>If Len(c(1,0).text) then ・・・・のc(1,0)なのですが、
>私は、この場合男の横が大人だと思ったのでc(0,-1)と思ったのですが、
>どうしてこうなるのでしょうか。
c(1, 0) は c.Item(1, 0) の省略記法です。
セルc は、具体的には
>For Each c In r.Resize(, 1).Offset(, -1) 'B列見出し項目でLoop
とありますから、集計表が以下のようなとき、
> A B C D E ...........
> 1 4月 5月 6月 ...........
> 2 大人 男
> 3 女
> 4 小人 男
> 5 女
cは、正味集計範囲 r([C2]セルから12列 5行目までの範囲)を
Resize(, 1) で C列だけの1列にリサイズして、
Offset(, -1) で左方向に1列シフトした列、すなわち B列のことに
なります。
>For Each c In r.Resize(, 1).Offset(, -1) 'B列見出し項目でLoop
で、最初のc は 具体的には [B2]セルです。
c が [B2]セルのとき、c.Item(1,1) は [B2]セルそのもので、
c.Item(1, 0) は [B2]のひとつ左のセル すなわち [A2]セル
ということになります。
同様に、cが[B2]のとき、
c.Item(0,1) といえば [B2]のひとつ上の行 すなわち [B1]セル、
c.Item(2,1) といえば [B2]のひとつ下の行 すなわち [B3]セル
を示すことになります。
結局、この一行は↓
> If Len(c(1, 0).Text) Then strFirst = c(1, 0).Text 'A列文字列
cのひとつ左のセルのテキストが書きこまれていたら、
変数strFirst に そのテキスト(たとえば「大人」)を代入し、
何も書きこまれていなければ strFirstの内容は変更しない、
という処理をしているわけです。
>2点目は、配列変数に A列日付データを格納するところですが、
>MonData = rr.rr.Offset(, -3).Resize(, 1).Valueの.Resize(,1)
>なのですが、Resize(,1)の1は、なぜ1なのですか。
>ほしいのはMonDataだから、日付の入っている分が重要で
>これにはあまり意味がないということでしょうか。
rr がひとつ多いですね?
MonData = rr.Offset(, -3).Resize(, 1).Value
ということでは?
これも、質問1 でお答えしたとおりです。
範囲を 左に3列オフセットして、1列だけにResize する
ということをしているから、A列だけが取り出されるわけです。
>>'◆これより 集計表のレイアウトの取得
>> '書きこみ先(集計表)表範囲を変数r にセットしてください
◆ここは↓?
>> Set r = WS2. '書きこみ先表範囲
>> Set r = Intersect(r,r.Offset(1, 2))
↑OK です
>> tbl = r.value 'クリア後の範囲を配列に格納してください
'↑◆OK です
>> i = 0
> For Each c In r.Resize(1).Offset(-1) '1行目見出し項目(◆年月)
> ss = Format$(c.Value, "yyyy/mm")
> i = i + 1
> dic(ss) = i
> Next '↑◆OK です
>> '--------------------------------------------------------
>> Set rr = Intersect(rr, rr.Offset(1, 3))
'↑◆OK です
>>
>> '配列変数に A列日付データを格納してください
>> MonData = rr.rr.Offset(, -3).Resize(, 1).Value 'A列
'↑◆rr がひとつ多い です
ざっとしかチェックしてませんが、
短時間のうちによく理解されましたね(^^
あと、
ファイルサイズがどんどん大きくなる問題ですが、
> 最初、ファイルの容量(もちろんExcel)が、3Mほど(これでも大きいと
> 思うのですが)だったのが、つかっているうちに(最も新たな保存で
> 少しは、増えてい> くのですが、)18Mや19Mにまでなるのですが、
> これは、大きすぎませんか。
この問題は マクロ付きのExcelファイルによくある現象です。
ht tp://peiyorin.cocolog-nifty.com/blog/2007/09/excel_1635.html
などに、原因と解決方法が書いてありますので、いちど読んでみて
ください。
Bookにマクロがついていて、そのマクロを修正して保存するということ
を繰り返すから、肥大化するわけですから、根本的な解決法としては
データBookとマクロBookを分離することです。
そうすれば、他の人に使ってもらうときでも、いつも最新バージョンの
マクロBookを配布すればいいわけですから。
具体的な方法が分からないときは、これは一つのトピックですので、
スレッドを改めてご質問なさるといいかもしれませんね。
|
|