[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『お客さんごとのシートを作成』(ケーキ屋さん)
お客さんごとに好みや注意のシートを作成したい。
一覧表シートのAからK列(4行目から)に好みの商品や注意事項など
色々記入したデータがあります。
そして、L列からAX列の3行目にはお客さんの名前が39名分、
4行目からは該当しているものに〇が入力されています。
一覧表を更新するごとに、
お客さんの名前39シートを作成し、一覧表シートから各お客さんの列を
オートフィルタで選択して、該当シートにAからK列のデータを
コピー&貼り付けする作業を行っています。
最初は10シート程度しかなかったので手までは無かったのですが20シートを
超えたあたりから、かなり手間に感じてきています。
手間を省く方法や機能があれば、教えていただけますでしょうか。
< 使用 Excel:Excel2003、使用 OS:Windows7 >
関数は苦手なので解りませんが。。。( ̄▽ ̄) マクロを使えばそう難しくは無いかもしれません。 勉強されますか?
(隠居じーさん) 2019/06/21(金) 14:44
>お客さんの名前39シートを作成し これ必要ですか?
あるシートにその都度必要な顧客の情報を取り込むようにすれば済むように思えます。 (seiya) 2019/06/21(金) 14:48
例えば、元データはSheet1にあるとして、新たにSheet2を作ってみてください。 Sheet2のA1セルに「データ」−「データの入力規則」を設定、「リスト」にして、元の値を「=OFFSET(Sheet1!$L$3,0,0,1,SUMPRODUCT((Sheet1!$L$3:$IFD$3<>"")*1))」とします。 これで客名がコンボから選択できるでしょう。
次に、以下のコードをSheet2のシートモジュールとして貼ってください。
Private Sub Worksheet_Change(ByVal Target As Range) Dim wk As Worksheet Dim i As Long Dim iC As Long Dim iR As Long
If Target.Address <> "$A$1" Then Exit Sub
Application.ScreenUpdating = False Rows("2:999").Delete Set wk = Sheets("Sheet1")
iC = WorksheetFunction.Match(Range("A1"), wk.Range("$A$3:$IFD$3"), 0) iR = 1
For i = 4 To wk.Cells(wk.Rows.Count, iC).End(xlUp).Row If wk.Cells(i, iC).Value = "〇" Then iR = iR + 1 wk.Range(wk.Cells(i, "A"), wk.Cells(i, "K")).Copy Cells(iR, "A") End If Next i Application.ScreenUpdating = True End Sub
こうすると、Sheet1さえ更新すれば、後はSheet2だけで客名に応じた情報が表示されるようになるのですが、いかがでしょう?
(???) 2019/06/21(金) 15:42
???さんに教えていただいた事をやってみました。
リストボックスにお客さんの名前が出て驚きました。
シートモジュールというものに教えていただいたコードをコピーしてみましたが、何も起きません。
シートを作ったら、シート7になったので7にしたのがまずいのでしょうか?
(ケーキ屋さん) 2019/06/21(金) 15:58
ほぼ勘ですが、ケーキ屋さんさんが一覧表シートで入力している『○』と、???さんが書いてくださった コードの『○』が違う記号なんじゃないでしょうか…
ためしに、ケーキ屋さんさんが一覧表シートに入力している『○』をコピーして、シートモジュールの コードの、 If wk.Cells(i, iC).Value = "〇" Then の『○』のところに貼って実行してみてください。 これで動いてくれるといいんですが…(^^;
(虎) 2019/06/21(金) 16:37
これで作業が楽になります!
ありがとうございました!
(ケーキ屋さん) 2019/06/21(金) 20:58
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.