|
▼Statis さん:
こんにちは
>良く解かりませんが
返事が遅くなり申し訳ありません
まだまだVBA初心者ですので、本を読んで
「ああいうことができるんじゃないか?」
と思いながら本に書いてあるコードに対し改造・もしくはコードを追加しているので
わかりづらいんじゃないかと思っています。
>項目で集計シートにあってDBシートに無いものはありますか?
---------DBシート--------
TEL 氏名 住所 日時 商品名
011-881-3456 稲本誠一 札幌市 2006/5/31 11:03 バナナ
03-1231-5432 辻本順二 東京都 2006/6/1 16:16 バナナ
06-6444-7890 藤本幸三 大阪市 2006/6/1 10:23 りんご
092-419-1942 宮元征四 福岡市 2006/5/31 17:00 りんご
------集計シート--------
りんご バナナ みかん ぶどう 合計
稲本誠一
辻本順二
藤本幸三
宮本征四
合計
----------------
>無いものが無いなら、コピーで対応できると思いますが?
>なぜ、記載のイベントで対応使用としているのでしょうか?
シートとしては
DBシート(最新の履歴)と確認シート(表の仕様は同じでDBの日時の過去履歴を残したもの)と集計シート(上記のような品名の数を入力するシート)を準備し作っています。
このマクロの全体的な話を申しますと
DBシートに作成してあるコマンドボタンを押すとユーザーフォームが立ち上がり、
そのユーザーフォームの項目通り入力していけばDBシートに反映される形式をとっています。
---------DBワークシートモジュール----------------
Private Sub Worksheet_Change(ByVal Target As Range)
行 = Range(シート下端).End(xlUp).Row
名前行 = Range("C65536").End(xlUp).Row
a = Target.Row
b = Target.Column
MsgBox Target.Address
If Target.Address = "$C$" & 名前行 Then
MsgBox Target.Address
Intersect(Target, Range("C1:C" & 名前行)).Copy
MsgBox Target.Address
Worksheets("集計").Range("A65536").End(xlUp).Offset_
(-1).Insert
End If
If b <> 6 Then Exit Sub
If b = 6 Then
Intersect(Range("B" & a, "F" & a), Range("B1:F" & 行)).Copy
Worksheets("確認").Range("B" & a, "F" & a).Insert
Application.CutCopyMode = False
End If
Emd Sub
他のシートに対してはDBシートに入力されたデータに従い、
DBシートのデータをコピーし確認シートに挿入という形をとっています。
仕様が同じ確認シートはWorksheet_Changeイベントで対応することにより、
電話番号順通り並べ替えられた為DBシートの名前をコピーし
集計シートに名前を挿入することから記載のイベントでも対応できると思い対応しています。
>また、一度集計シートの並び替えをマクロの記録で行ってみては如何ですか?
>なぜ上手く行かないか解かると思います。
単に並び替えだけでなく、もちろんマクロの記録もしながら
オプションのユーザー設定リストからの並び替えも使用してみたのですが
-------------------------------
Sheets("DB").Select
Application.AddCustomList ListArray:=Array("TEL", "011-881-3456", _
"03-1231-5432", "06-6444-7890", "092-419-1942")
Range("A1").Select
----------------------------------
集計シートに電話番号がないせいか電話番号順通りできませんでした。
その為理由としては「項目がないから上手くいかない」位しかわかりません。
配列を指定するArray関数で範囲(Range("B1:B5")のように)を取得できないのですか?
長々と書いてスイマセン。
|
|