- ベストアンサー
データベースsheetから抽出したいデータをコピーするには?
現在、EXCELファイルで1つのワークシートをDB(データーベース)として日々の受払いを管理番号を付して入力していき、同ファイルの2つめに抽出用の様式を設けて、そのシートに管理番号で指定したデーターを様式に従った形で転記できたらと考えています。(管理番号で指定したデータは複数行・列になることもあります。) この場合でマクロを組むとしたらどのように組めばよいのでしょうか。 マクロの記録機能などでやっては見たもののわかりません。教えていただけないでしょうか。 因みに初心者です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(1)シートを2つ考え、シート名をSheet1とSheet2とします。 Sheet1のA列に管理番号があるとします。 (2)Sheet2のB2に抽出する管理番号を入力します。 (3)「>様式に従った」の様式による項目(の1つが)がF4 にあるとして F4に=VLOOKUP(B2,Sheet1!$a$2:$c$100,2,FALSE)と式を入れます。 Sheet1のB列の項目(第3引数の2が、それを決めます)を持ってきます。 Sheet2の他のセルには、Sheet1から持ってくる項目によって、VLOOKUP関数の第3引数を変えます。 不動(地の文章の)文字はそのまま適当なセルに打ち込みます。 これで、Sheet2の自分の好きなセルに、Sheet1から指定した管理番号行の任意の項目データがセットできます。 ここまではVBAを使わないでできるし、使わないほうが良い。 (4)これで困るのは、抽出結果(該当行が2つ以上ある(ありえる)ときです。 この場合はVBAでないとできません。 (5)もうひとつ、複数個該当があるときも、印刷するなら、Sheet1の1行分をSheet2にセットー印刷ー1行分セットー印刷をVBAで繰り返しでできます。 (7)2枚以上のシートに抽出結果を帳票形式で残したいときは、VBAでないとできません。元データがSheet1に残ってあるので、通常こういう必要はない場合が多いはずです。請求書を印刷して終わりというようなケースが多い。その場合にSheet2に当たるものを2シート以上設けないでやります。シートが一時的変数になるイメージです。 (8)2行以上該当があるときはVLOOKUPが使いずらいです。 各項目にVBAで項目をセットします。 'Sheet3!B3->Sheet4!A2の例を挙げます。自分の例に合わせて応用してください。 抽出・セット・印刷の中のセットの中核です。 Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet3") Set sh2 = Worksheets("Sheet4") sh2.Cells(2, "A") = sh1.Cells(3, "B") 'Sheet3!B3->Sheet4!A2の例 End Sub (9)抽出は1行ずつ判定する、総なめ法を、経験の初期には勧めます。 ーーーー これで#1の示唆されているVLOOKUPの使い方を具体的に説明したつもりです。また#2さんのおっしゃることも同感です。 上記の中に、本当は質問者が指定し例示すべき点が相当あるでしょう。具体的な列番号など決まらないと、プログラムできない。 勝手に決めて回答したとき、VBAのコードをどう修正していいか和からなそうな質問者もいそう。 エクセルのシートは、他のデータベースの経験者からすると、データーベースというには、おこがましいと思うものです。よくエクセルでも使う方がいますが、「ワークシートに入力・記録しています」で良いのでは。 質問を読んで、もう少しVBAを勉強を広げてからでないと、仕事には使えないように感じました。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >EXCELファイルで1つのワークシートをDB(データーベース) 本格的なものですと、Excelを完全にデータベース化させてしまう方法があります。特にマクロは必要ありません。Excelのブックを二つにして、検索する側から、メニューのツールから、外部データの取り込み-新しいデータベースクエリで、MS-QUERYをパラメータクエリとして、シートに、検索値を入れられるように作ります。本来は、Accessは必要ありませんが、mdb ファイルを作ってしまったほうが楽かもしれません。 確か、これについては説明された本も出ているはずです。これは、ODBC というツールを使った隠れた機能です。ただし、Accessと、その検索値のコマンドが若干違いますので気をつけなくてはなりません。また、会社の場合は、その先に、Cube という使用法もあり、大型のサーバーでも使用可能です。 次に、Excelのフィルタ・オプションを使う方法があります。検索スピードも速いし、本当に簡単なマクロで出来ます。これを教えた何人かの人たちは、本当にびっくりしていました。Accessとほとんど遜色ない状態になります。ただし、マクロの前に、一応、フィルタ・オプションが何であるか、それが使えなくてはなりませんね。フィルタ・オプションには、独特の癖があって、そのまま使うと、あまり使い勝手がよいとは言えません。特に、Office XP 以外の仕様(Offce 2003含む)は、なぜか、ワイルドカードが含まれた状態になってしまっていますので、絞込みが出来ません。そのためのコツも必要です。また、フィルタ・オプションのマクロ自体も、少し、癖がありますので、慣れが必要です。 なお、歴史的には、VLOOKUP関数やINDEX関数の後に、DSUM、DGET などのデータベース関数と同時に、オートフィルタやフィルタ・オプションのデータベース機能が生まれました。内部的には、ひじょうに違った検索構造を持っています。データベース機能は、やはり圧倒的な検索スピードを持っていると思います。なお、VBAで、セルにアクセスする方法は、これらの関数と比較しても、10倍以上、検索スピードが遅いので、そのまま使っても、本当に小規模なもの以外は、実務上はあまり有効なものとはいえないと思います。 データや検索の方法など提示していただければ、もう少し具体的なお話ができるかとは思いますが、ご興味がないようでしたら、そのままにしておきます。せっかく教えても、途中で嫌になったのか、スレッドを締めて放り出してしまう人もいますものですから。
お礼
親身なご回答ありがとうございました。 しかし、#2,#3のご回答にあるように、まだ本回答につきまして、理解できないのが実情です。 このまま教えていただくことになっても、また意味不明なことで、ご迷惑をお掛けすることとおもいますので、もう一度勉強してみます。
- chukenkenkou
- ベストアンサー率43% (833/1926)
>EXCELファイルで1つのワークシートをDB(データーベース)として そんなものは、データベースとは呼びません。 >同ファイルの2つめに抽出用の様式を設けて、そのシートに管理番号で指定したデーターを様式に従った形で転記できたらと考えています。(管理番号で指定したデータは複数行・列になることもあります。) こんな曖昧な情報で、何を回答すればいいのでしょうか?マクロを組んで欲しいなら、もっと具体的な情報を書きましょう。
お礼
補足させて頂きましたが、やはり、勉強しないと わからないと思いました。もう一度、勉強します。 ありがとうございました。
補足
説明不足とのこと、すいません。 また、DBの表現が誤っていたとのこと、私は単に入力データの基礎部分(この入力データーを使用していろいろな抽出やデーター分析等を行う上での基礎データ)との位置付けで使用していました。気を付けます。 早速ですが、補足させていただきます。 倉庫の在庫管理を電子データとして管理したく、EXCELを用いてできないかと考えております。 (ACCESSよりも他の人たちの利用頻度があるため操作も理解しやすいと考えたためです。) どのような表にしたいか?というと以下のとおりです。 (1).B・C・Dの各営業所があり、その全部の在庫をA本店で管理。入出庫の確認票が、各営業所より A本店に回付される。その都度転記し在庫有高を確認しておく。(数量・金額チェック) (2).毎月実施される棚卸し時に、所定の様式が多種あるので、その様式ごとに抽出できれば効率的。 (営業所は十数か所あり、sheetを分けて管理することは非効率。よって様式ごとにsheetを分割し 各営業所ごとにデータを抽出⇒印刷⇒報告したい。) (3).また、棚卸しだけでなく、台帳機能を持たせたいと思っています。 [例」 ((1)日々の受払記録sheet) a物品No. b管理先 c整理科目 d 数量 e単価 f受金額 g払金額 h残高 1 1 A 100 100 10 1000 1000 2 2 B 100 200 10 2000 2000 3 3 C 100 300 10 3000 3000 4 1 A 100 50 10 500 500 5 3 C 100 150 10 1500 1500 . . 10 ↓ ↓ ((2)管理先別抽出票に転記) ※管理先「C」を抽出。 ※抽出票は、とりあえず上記と同じスタイルとしますが、色々な様式があります。 b管理先 c整理科目 d 数量 e単価 f受金額 g払金額 h残高 1 C 100 300 10 3000 3000 2 C 100 150 10 1500 1500 ------------------------------------------------------------------ 計 150 1500 上記の様なイメージで、(1)日々の受払記録sheetを基礎として色々な様式のニーズに合う よう抽出したいということです。 ⇒問題だったのが、ご回答にもありましたが、VLOOKUP関数を使用し「a物品No.」で試みましたが、 以下のようになってしまいました。 b管理先 c整理科目 d 数量 e単価 f受金額 g払金額 h残高 1 C 100 300 10 3000 3000 2 C 100 300 10 3000 3000 ⇒マクロの記録機能を使い考えては見たものの。 (1).オートフィルターを試みましたが「a物品No.」で抽出まではできるが、抽出範囲が物品No.ごとに違うため、 単純にコピーするのもうまくいきませんでした。 大分、長々と書いてしまいましたが、理解いただけますでしょうか。 大変都合がいいのでが、何分初心者ゆえ、理解に苦しみます。マクロを記載していただけると助かります。 それから、自分で勉強したいと思います。 よろしくお願いいたします。
マクロを使う理由があるのかわかりませんが LOOKUP VLOOKUP HLOOKUP を使えば、DBから値を取得することが出来ます。 ご検討下さい
お礼
再度、勉強しないと理解できないということが わかりました。 ご回答ありがとうございました。
お礼
親身なご回答ありがとうございました。 ご回答のとおりだと思いました。 もう一度勉強してみます。