dポイントプレゼントキャンペーン実施中!

VBAを勉強しながらエクセルで顧客管理シートを作っています。
全顧客の売上データが入ったシートが1枚あり、そのデータを各顧客シートにあるコマンドボタンを
クリックすることにより、該当する顧客のデータをその各顧客シートに表示させるようにしたいと
考えています。

顧客が増えたりするとシートを増やすのですが、VBAの参照先シート名が固定されているため、
汎用的ではありません。

そこで顧客シートのオリジナルを作っておき、新しい顧客ができた場合はそれをコピーして使用する
ようにしたいと思います。

シート名が変更になった場合でもVBAを書き直したりすることがないようにするにはどのようにしたら
よいでしょうか?

Excelのシート構成は
”売上データ”シート:ファイル名固定
”○○会社”シート:ファイル名任意
”△○会社”シート:ファイル名任意

よろしくお願いいたします。

A 回答 (4件)

こんにちは



Worksheets("○○会社").~のように、プログラム中に直接シート名を書いている
ということでしょうかね・・

シート名を変更して汎用的に使用するようなプログラミングをするなら

設定シートのようなシートを設けて、そこに情報を記載しておき、初期設定でそこから
シート名を変数に読み込んで、汎用性を持たせるような方法もあります。


設定シート A1の内容 ○○会社

VBAの中で必ず、最初に初期設定として設定シートから顧客名を取得するようにします。

Dim Kokyaku_Sheet As String

Kokyaku_Sheet = Worksheets("設定シート").Range("A1").Value

   :

Sheets(Kokyaku_Sheet).Select など・・

この例では、Kokyaku_Sheetという変数を使用してプログラミングを行います。
こうしておけば、シート名を変更したい場合には、設定シートのA1の内容を書き換えるだけで
済みます。

複数の顧客を処理するなら、顧客リストでも作っておいて、そこを読み込んでループさせれば
よいかと思います。

ご質問の意図とは違うかもしれませんが、ご参考まで
    • good
    • 0
この回答へのお礼

ご指導いただいた点でクリアになれば今の問題は解決すると思います。
早速やってみたいと思います。ありがとうございます。

お礼日時:2011/06/28 09:42

>全顧客の売上データが入ったシートが1枚あり、そのデータを各顧客シートにあるコマンドボタンを


>クリックすることにより、該当する顧客のデータをその各顧客シートに表示させるようにしたいと
>考えています。
ほかの方々のアドバイスと同じですが

全顧客の売上データが入ったシートが1枚あり
別のシートのあるセルに顧客名を入れると
該当する顧客のデータがその顧客シートに表示させるようにしたい

となる様に考えた方が便利なはずです。
シートの構成は
1、全顧客の売り上げデータ
2、ある顧客のデータを抽出して表示するシート
3、2のシートで顧客名を選択するために、顧客リストが入っているシート
1の全顧客の売り上げデータがどうやって入力されているのかにもよりますが、
上記の3枚のシート構成を考えると十分だと思います。
    • good
    • 0
この回答へのお礼

なるほど。そのほうがシンプルですね。
少し複雑に考えていました。ありがとうございます。

お礼日時:2011/06/28 09:39

質問者のやりたいことが正確に伝わらない。

VBAをする以前の問題。
>全顧客の売上データが入ったシートが1枚あり
これはいつまでも1つか。月が経て、データが増えても、前の月までの分に同じシート上で増やしていくのだね。
>顧客が増えたりするとシートを増やすのですが
新規顧客が出たら、その顧客用にシートが必要ということでしょう。
シートを1枚その会社名などにしてシート挿入したら仕舞い。
テンプレート的なシートが造れるなら、そのシートを同一ブック内にコピーしたら仕舞いではないのか。
ーー
シートのコピーはマクロの記録を取ればどいうコードになるか判る。
>シート名が変更になった場合でも
とはどういうことか。説明不足。社名変更ならシート名を変えないといけない。
シートをコピーしたとき新しく出来たシート名の名前は任意に付けられるのを知らないのか。
下記ではSheet1がテンプレート的な、シートの場合です。
cccは新規顧客(会社名)に当たる。
ーー
Sub test01()
Worksheets("sheet1").Copy after:=Sheets(3)
ActiveSheet.Name = "ccc"
End Sub
この2行は続いてコードを書くこと。
>”○○会社”シート:ファイル名任意
何のこと、新規顧客名が未定なのは当たり前。
決ったときに操作者に、シート名を指定させるということか。
それならInputBoxででも、操作者に指定(入力)させたらしまいでは。
>クリックすることにより、該当する顧客のデータをその各顧客シートに表示させるようにしたいと
これは今回質問のメインの話題ではないよね。余分なことを質問異書くと紛らわしい。
ーー
学習を始めても「、直ぐ総合的な問題に取り組めないでしょう。
ブック・シート・セル(行・列)の基本的な、新規・追加・変更・削除。移動、名前変更、コピーなど、どういうコードになるかノートにでも整理して、一通り学習してから取り組まないと。
    • good
    • 0
この回答へのお礼

質問内容が漠然としている中、ご指導にありがとうございます。
1つ1つ取り組んでみたいと思います。ありがとうございました。

お礼日時:2011/06/28 09:38

やりたいことが イマイチ理解できていないので


当っているかどうか分かりませんが。
シート名の指定は 固定しなくとも シートのNo を使い
シートオブジェクトSheets(n)で取得できます。
一例:
Sheets_Count = Application.Sheets.Count
For n = 1 To Sheets_Count
Sheets(n).Select
MsgBox "シート名は " & ActiveSheet.Name & "です。"
Next n
End Sub

その他、A2セルにシート名(会社名)を入れて そのシート名の
A1セルを参照するには
=INDIRECT(A2 & "月!A1")
とかでもできますが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
早速トライしてみたいと思います。

お礼日時:2011/06/28 09:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています