|
こんにちは。かみちゃん です。
>得意先別、営業部門別、商品別に金額の集計をとりたいと思っています。
>得意先は、全部で4つあり、「得意先毎」の「営業部門別、商品別に金額の集計」をとりたいのです。
それであれば、ぜひ、ピボットテーブルを勉強されることをおすすめします。
ご存知でないならば、目からウロコだと思います。私も一番最初はそうでした。
さらに、もしかしたら、VBAを使わなくてもすむかもしれません。
面倒だったら、マクロの記録をしてしまえばいいわけですから。
>ピボットテーブルは全然試していませんでした。早速試してみますね!(といっても一から勉強なのですが…(^_^;))
それであれば、Webの検索で「ピボットテーブル Excel」などで検索すると、いろいろ出てきますが、以下のようなところは参考になるかもしれません。
http://kokoro.kir.jp/excel/pivottable.html
http://www.moug.net/skillup/fclm/fclm08-01.htm
http://www.atmarkit.co.jp/fwin2k/win2ktips/359pivot/pivot.html
こちらでは、ピボットテーブルでのコードができましたが、まずは、手作業による方法をマスターしていただいたほうがよろしいかと思いますので、コードを提示するのは、まだ控えておきます。
必要であれば、おっしゃってください。
>対象シート名を選択させる、というのは、具体的にどのようなかんじなのでしょう?ユーザーに選択させるようにする、ということでしょうか…?
そうです。ユーザーに選択させます。
たとえば、ユーザーフォームを用意して、コンボボックスを配置して、そのコンボボックスには、シート名の一覧をリスト化しておいて、そのリストの中から選択する。
簡単なものであれば、InputBox関数でシート名を入力させる。しかし、この場合だと、シート名が存在するのかどうかのチェックが必要です。
>また、「システム日付で処理対象シートを判断させる」というのは、今後のことを考えれば是非身に付けておきたい方法です。よろしければサンプルコードなどを、教えていただけませんでしょうか。よろしくお願いいたします。
以下のような感じでできます。
ポイントは、
strSheetName = Format(Now(), "yyyy.m")
です。
Option Explicit
Sub Test()
Dim strSheetName As String 'システム日付から生成したシート名
Dim strSheetNameCK As Boolean 'シートの存在チェック
Dim ws As Worksheet 'すべてのシートを検索する
'現在の日付(Now())から「2005.7」のようなシート名を生成する。
strSheetName = Format(Now(), "yyyy.m")
strSheetNameCK = False
'生成したシート名が存在するかどうかのチェック
For Each ws In Worksheets
If ws.Name = strSheetName Then
strSheetNameCK = True
Exit For
End If
Next
'生成したシート名の存在チェック結果の表示
If strSheetNameCK Then
MsgBox "シート " & strSheetName & " は存在します"
Else
MsgBox "シート " & strSheetName & " は存在しません"
End If
End Sub
>ちなみに、…マクロの先頭で、対象シート名を指定していたつもり
そこが「2005.6」に固定されているので、それをユーザーからの入力などにより、変数とすればいいかと思っています。
|
|