ここから本文です

エクセルでこんなことできますか? マクロ?関数?マクロ・関数の合せ技? 自分...

ryu********さん

2009/3/2719:25:29

エクセルでこんなことできますか?
マクロ?関数?マクロ・関数の合せ技?
自分では解決できないので知ってらっしゃる方いましたら教えてください。

詳しくは下図参照なんですが、

データベースのセルに任意の数字・名前を打込むと各々のシートのセルに上から順番に
埋められていくようなことってどうしたらできるのでしょうか?

お手本のようなファイルは見つけたのですが、仕組みもわからず、パスワードでのロックも
かかっていて解析できません・・・

どなたか、救いの手を・・・

Do Until Sheets,'And Target.Row,合せ技,関数,データベース,COUNTIF,Sheet1

閲覧数:
557
回答数:
3
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

kit********さん

編集あり2009/3/2721:29:21

私もそんなに詳しくはないので、他にもっと簡単な方法があるかもしれませんが、
まずAとBの間に作業列を一行挿入し、その列に=IF(A3="","",A3&"-"&COUNTIF(A$3:A3,A3))を入力、B13までコピー。
で、HとIの間にも一列作業列そ挿入し、各グループごとに1,2,3,4……とNOを振っていきます。
最後にJ4から=IF(COUNTIF(B$3:B$13,1&"-"&I4)=0,"",VLOOKUP(1&"-"&I4,B$3:C$13,2,0))
J14から=IF(COUNTIF(B$3:B$13,2&"-"&I15)=0,"",VLOOKUP(2&"-"&I15,B$3:C$13,2,0))
J24からは=IF(COUNTIF(B$3:B$13,3&"-"&I26)=0,"",VLOOKUP(3&"-"&I26,B$3:C$13,2,0))で一応そんな感じにはなります。

んー、でも購入先を表示させるのは別シートってことなんですよね?
上記関数は添付の表を元に作ったので、書き込むセルの位置とかは変わってくるとは思います。
ちなみに購入先や商品の元データがSheet1で、購入先1を表示させる表がSheet2のA2から始まるとするとB列に作業列を作りNOを付け、C2に=IF(COUNTIF(Sheet1!B$3:B$13,1&"-"&B3)=0,"",VLOOKUP(1&"-"&B3,Sheet1!B$3:C$13,2,0))になります。

さらにたぶん添付のデータは例ということで、実際に書き込まれる商品はもっと多いでしょうから、範囲指定の数値も若干変わると思いますが参考ぐらいにはなるでしょうか? とこんな感じでいかかでしょうか?

質問した人からのコメント

2009/3/28 10:55:25

驚く ありがとうございました、私のニーズにはこれが一番でしたが、他の皆さんのお知恵も大変参考にありました、ありがとうございました。

このQ&Aで解決しましたか?質問する

閉じる

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

d_s********さん

2009/3/2723:24:51

シート名:データベース
シート名:購入先1
シート名:購入先2
シート名:購入先3
というシートを用意して
ALT+F11ボタンを押して

データベースのところをダブルクリックして

以下のマクロを貼り付けたらどうでしょうか。
ただし、まとめて貼り付けたりするとはじめの行のものしか別シートに反映されませんけど。

Private Sub Worksheet_Change(ByVal Target As Range)
'■■■番号が入力された時の処理■■■
If Target.Column = 1 Then 'And Target.Row <= 1000 Then '変更されたセルが1列なら
On Error GoTo exit1
Select Case Target.Value
Case 1
sh = "購入先1"
r = 2
Do Until Sheets(sh).Cells(r, 2) = ""
r = r + 1
Loop
Sheets(sh).Cells(r, 2) = Cells(Target.Row, Target.Column + 1)
Case 2
sh = "購入先2"
r = 2
Do Until Sheets(sh).Cells(r, 2) = ""
r = r + 1
Loop
Sheets(sh).Cells(r, 2) = Cells(Target.Row, Target.Column + 1)
Case 3
sh = "購入先3"
r = 2
Do Until Sheets(sh).Cells(r, 2) = ""
r = r + 1
Loop
Sheets(sh).Cells(r, 2) = Cells(Target.Row, Target.Column + 1)
End Select
End If
'■■■商品名が入力された時■■■
If Target.Column = 2 Then 'And Target.Row <= 1000 Then '変更されたセルが2列なら
Select Case Cells(Target.Row, Target.Column - 1)
Case 1
sh = "購入先1"
r = 2
Do Until Sheets(sh).Cells(r, 2) = ""
r = r + 1
Loop
Sheets(sh).Cells(r, 2) = Target.Value
Case 2
sh = "購入先2"
r = 2
Do Until Sheets(sh).Cells(r, 2) = ""
r = r + 1
Loop
Sheets(sh).Cells(r, 2) = Target.Value
Case 3
sh = "購入先3"
r = 2
Do Until Sheets(sh).Cells(r, 2) = ""
r = r + 1
Loop
Sheets(sh).Cells(r, 2) = Target.Value
End Select
End If
exit1:

End Sub

シート名:データベース
シート名:購入先1
シート名:購入先2
シート名:購入先3
というシートを用意して...

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる