エクセルVBAでのデータ抽出についての質問です
- エクセルVBAを使用して、シート1から指定した列のデータのみを抽出したい場合、マクロを使用することが可能です。
- 通常、データベースでクエリを使用してデータを抽出しますが、マクロを使用することでデータベースにアクセスせずに抽出することができます。
- マクロを使用することで簡単にデータ抽出ができるため、エクセルVBAを活用することをおすすめします。
- ベストアンサー
エクセルVBAでのデータ抽出についての質問です。
エクセルVBAでのデータ抽出についての質問です。 下記のような2つのシートがあります。 (シート1) AA BB CC DD EE FF GG HH ←タイトル(複数固定) ああ いい うう ええ おお かか きき けけ ←値 ささ しし すす せせ そそ たた なな はは ←値 まま みみ むむ めめ もも らら りり るる ←値 (シート2) AA FF HH ・・・ ←タイトル(数は変更あり) シート1にタイトルの付いたデータが100列ほどありまして、 シート2に抽出したい列だけのタイトルを並べたとします。 このシート2のタイトルに入れたデータのみをシート1から列ごと 抽出してきたい場合、マクロで可能でしょうか。 本来はアクセスなどを使ってデータベースでクエリ抽出してくるものだと思いますが、 マクロでなんとかしたいと思っております。
- makilon03
- お礼率57% (4/7)
- その他([技術者向] コンピューター)
- 回答数5
- ありがとう数3
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
debunyanko-28です。 自由に変更してもらって構いませんよ。 ちなみに私なら以下のようにします。 Sub test4() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim myRange1 As Range Dim myRange2 As Range Dim c As Range Dim i As Variant Set Ws1 = Worksheets("item_list.tsv") Set Ws2 = Worksheets("商品") Set myRange1 = Ws1.Range("A1", Ws1.Cells(1, Columns.Count).End(xlToLeft)) Set myRange2 = Ws2.Range("A1", Ws2.Cells(1, Columns.Count).End(xlToLeft)) For Each c In myRange2 i = Application.Match(c.Value, myRange1, 0) If Not IsError(i) Then Ws1.Range(Ws1.Cells(1, i), Ws1.Cells(Rows.Count, i).End(xlUp)).Copy _ Destination:=c End If Next c Set Ws1 = Nothing Set Ws2 = Nothing Set myRange1 = Nothing Set myRange2 = Nothing End Sub
その他の回答 (4)
- debunyanko-28
- ベストアンサー率33% (2/6)
ごめんなさい。 前回は間違ってます。 訂正版です。 Sub test2() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim myRange1 As Range Dim myRange2 As Range Dim c As Range Dim i As Variant Set Ws1 = Worksheets("Sheet1") Set Ws2 = Worksheets("Sheet2") Set myRange1 = Ws1.Range("A1", Ws1.Cells(1, Columns.Count).End(xlToLeft)) Set myRange2 = Ws2.Range("A1", Ws2.Cells(1, Columns.Count).End(xlToLeft)) For Each c In myRange2 i = Application.Match(c.Value, myRange1, 0) If Not IsError(i) Then Ws1.Range(Ws1.Cells(2, i), Ws1.Cells(Rows.Count, i).End(xlUp)).Copy _ Destination:=c.Offset(1) End If Next c Set Ws1 = Nothing Set Ws2 = Nothing Set myRange1 = Nothing Set myRange2 = Nothing End Sub
お礼
ありがとうございます。 1点だけ、説明に書いてませんでしたが、シート1にデータがないパターンがあり、 その場合タイトル列まで、コピーされてしまうので下記のように追加させて頂きました。 Sub test3() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim myRange1 As Range Dim myRange2 As Range Dim c As Range Dim i As Variant Dim r As Long Set Ws1 = Worksheets("item_list.tsv") Set Ws2 = Worksheets("商品") Set myRange1 = Ws1.Range("A1", Ws1.Cells(1, Columns.Count).End(xlToLeft)) Set myRange2 = Ws2.Range("A1", Ws2.Cells(1, Columns.Count).End(xlToLeft)) For Each c In myRange2 i = Application.Match(c.Value, myRange1, 0) If Not IsError(i) Then r = Ws1.Cells(Rows.Count, i).End(xlUp).row If r = 1 Then r = 2 Ws1.Range(Ws1.Cells(2, i), Ws1.Cells(r, i)).Copy _ Destination:=c.Offset(1) End If Next c Set Ws1 = Nothing Set Ws2 = Nothing Set myRange1 = Nothing Set myRange2 = Nothing End Sub
- debunyanko-28
- ベストアンサー率33% (2/6)
一つの例ですが・・・ タイトルの行は一列目の前提です。 Sub test() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim myRange1 As Range Dim myRange2 As Range Dim c As Range Dim i As Long Set Ws1 = Worksheets("Sheet1") Set Ws2 = Worksheets("Sheet2") Set myRange1 = Ws1.Range("A1", Ws1.Cells(1, Columns.Count).End(xlToLeft)) Set myRange2 = Ws2.Range("A1", Ws2.Cells(1, Columns.Count).End(xlToLeft)) For Each c In myRange2 If IsError(myAns) = False Then i = Application.Match(c.Value, myRange1, 0) With Ws1 .Range(.Cells(2, i), .Cells(Rows.Count, i).End(xlUp)).Copy _ Destination:=c.Offset(1) End With End If Next c Set Ws1 = Nothing Set Ws2 = Nothing Set myRange1 = Nothing Set myRange2 = Nothing End Sub
お礼
テストさせて頂いたところうまく動作しました! あとはWsのシート名を変更するなどしてアレンジさせていただきます! 本当にありがとうございました!! それにしても無駄がなくて綺麗なソースですね。動作も早いです。
- kmetu
- ベストアンサー率41% (562/1346)
たとえばシート2のA2に =HLOOKUP(A1,Sheet1!A1:H4,2,FALSE) とかでいけると思いますが。マクロがいいのでしょうか。
補足
回答ありがとうございます。 HLOOKUPも考えたのですが数が多いのと 同じ動作を毎回繰り返す必要があるので、 マクロがいいのであります。
- rukuku
- ベストアンサー率42% (401/933)
こんばんは makilon03さんの腕次第ですが、可能です。 手作業でやるとしたら、 1.結果出力用にシート3を用意する 2.シート2のリストを上から一つずつチェックして、シート1に同名のタイトルがあればシート3にコピー 3.以下、シート2のリストが終わるまで繰り返し。 です。 →この手順をExcel VBAで組むことが出来ます。 >本来はアクセスなどを使ってデータベースでクエリ抽出してくるものだと思いますが、 元データがデーターベース向きではなさそうなので、アクセス使うと余計に難しくなりそうです。Excel VBAの方が柔軟な対応が出来ます。 Find End(xlup) For がキーワードです。
関連するQ&A
- 条件に合ったデータを抜き出す
A B C D 1 あ AA VV FF 2 い CC FF HH 3 あ SS FF DD 4 う SS EE AA 以上のようなデータが有るときに、別シートに A列のデータを条件に以下のように抜き出したいのです。 別シートの各セルに式が入っていて、上記データを 変更しても別シートの抽出結果が自動で変わるようにしたいです。 ”あ”の抽出 あ AA VV FF あ SS FF DD ”い”の抽出 い CC FF HH ”う”の抽出 う SS EE AA
- ベストアンサー
- オフィス系ソフト
- Excelでのデータ抽出
Excelで外部結合風のデータ抽出を教えてください。 シートAとシートBに表形式のデータがあり、 シートAのA列の値とシートBのA列の値が一致するシートBの 行を抽出するのが目的です。 具体的には次のような感じです。 シートA シートB ---------------- ---------------- A列 | B列 | C列 A列 | B列 | C列 ---------------- ---------------- 2 | 2B | 2C 1 | 1BB | 1CC ---------------- ---------------- 4 | 4B | 4C 2 | 2BB | 2CC ---------------- ---------------- 6 | 6B | 6C 3 | 3BB | 3CC ---------------- ---------------- ↓ シートB ---------------- A列 | B列 | C列 ---------------- 2 | 2BB | 2CC ---------------- 以下以外の方法がありましたら教えてください。 1)アクセスに両シートのデータを取り込み、2つのテーブルを外部結合で連結させる。 2)マクロで二重ループをつくり、A列が一致した行を取り出す。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- excel データ抽出方法
こんいちは 列1と列2を比べて条件が一致したデータを抽出したいのですが,方法がわかりません。どなたかご存知のかた教えていただけないでしょうか? 列1 列2 aa vv bb dd cc ff dd aa ee bb この場合aa,bb が一致する。
- ベストアンサー
- オフィス系ソフト
- エクセルで、データのある行だけを抽出したい。
エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A~Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00~17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A~H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- エクセル データ抽出について
(データ) A B C 1 I あ 20 2 II い 30 3 III う 10 4 IV あ 10 5 V い 20 6 VI う 30 したい事(1) A列のうちいずれかの項目を入力すると、B列の該当値を抽出 したい事(2) (1)のB列該当値が検索一行目で抽出されたら、その値からC列の値を抽出したい 困っていること・・・B列に全く同じ名前の項目があるため、抽出すると 先に来る値が飛んできてしまう 例:IVを入れると「あ」が自動で抽出され、その「あ」でさらに「10」を抽出したいのに、先にあるC1の「20」が飛んできてしまう。 それぞれ、(1)(2)にどのような関数を入れると、抽出したい値が出てくるでしょうか?
- ベストアンサー
- オフィス系ソフト
- VBAのデータ抽出について
列 A B C 行1 番号 色 形 2 1 白 丸 3 2 赤 三角 4 1 赤 丸 5 3 黄 四角 (1)Excel Sheet1にコマンドボタン1があり、それをクリックするとUserForm1が表示されます。 (2)UserForm1には「番号」「色」「形」の各コンボボックス1,2,3が配置されています。 (3)各コンボボックス1,2,3に表示されるのは、Sheet1の各列のデータです。 (4)コンボボックス1,2,3のうち1つ選択→その条件に合うデータを抽出。 コンボボックス1,2,3のうち2つ選択→その2つの条件に合うデータを抽出。 コンボボックス1,2,3のうち3つ選択→その3つの条件にあるデータを抽出。 (5)Sheet1のコマンドボタン2をクリックすると、Sheet1は元のデータ一覧に戻る。 というようなプログラムを組みたいと思っています。 (4)のデータ抽出、(5)の戻し方がよくわかりません。 どなたかご教授下さい。
- ベストアンサー
- Visual Basic
- エクセル 抽出マクロについて
はじめまして。マクロ初心者です。 エクセルで抽出結果を別シートにコピーしたいのですが、 抽出条件が2列にわたっています。 A B C D 日付 タイトル 分類(あ) 分類(い) 11/22 テレビ 3 2 12/15 ラジオ 1 4 11/18 雑誌 2 5 …というような感じです。 例えば分類が「2」のものを抽出したい時に、 ●シート1のあるセルに「2」と入力してマクロを実行。 ↓ ●シート2に以下のように結果をコピーして表示。 A B 日付 タイトル 11/22 テレビ 11/18 雑誌 という具合にしたいのです。(C列、D列は表示しない) データはシート3に入力されていて、今後どんどん増えていく予定です。 エクセルは2007です。 本やホームページを参考に試行錯誤したのですが、うまくいきません…。 どなたかご回答よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセルでデータ抽出するには?
まったくのエクセル初心者です。 エクセルで、シート1のデータの特定科目を抽出してシート2にコピーしたいのです。 シート1のデータは 5/1 消耗品 2500 5/3 水道光熱費 8000 5/5 消耗品 700 5/7 消耗品 1200 この中から消耗品と記入されている行をシート2に抽出したいのです。 マクロは全然わかりません。。簡単にできる方法は無いでしょうか?よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel データの抽出について
年始のお忙しいところ失礼いたします。 Excelにおけるデータ抽出についてお尋ねいたします。 抽出元データは左から1番目のシートのA列から順に、日付、部門名、商品名、数量0、記号、数量1、記号、数量2、記号、数量3、記号、残り数量となっています。 残り数量の列には、『=数量0-数量1-数量2-数量3』 という数式が記述してあります。 今回は、左から3番目のシートに、商品名、数量0、残り数量の3列の条件式を入力する場所と条件式に合致するデータを表示する場所を作成して、条件式に合致するデータを抽出することを検討しています。 条件式 商品名列:商品名の中から1つの商品を抽出 数量0:数量0=40、数量0<=10など数量0の値が入力した任意の数量と=またはは、以下(<=)を抽出 残り数量:残り数量<>0、残り数量<=20など残り数量の値が0以外か、入力した任意の数量以下を抽出 条件式を書き換える(抽出条件を変更する)ことが多いため、書き換える(条件を変更する)たびに、表示されるデータが更新されるようにしたいです
- ベストアンサー
- Excel(エクセル)
- VBAを使った、Excelでのシート間データ抽出
はじめまして。みなさまどうか教えてください。 Sheet1にはA列に250行程、コードが存在します。 Sheet2にはA列(コード)からI列まで、そして1000行程データが存在します。 Sheet1にあるコードは重複はなく、Sheet2のコード内に必ず同じコードがあります。 Sheet2にも重複コードはありません。 そこでSheet1のコードを使い、Sheet2を検索し、同一コードのデータ(A列からI列の行すべて)を全て(250件分)、Sheet1のコード記載順(A1、A2、A3・・・・)で、Sheet3に抽出したいのです。 どうか、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
なるほど。1行目からにすればタイトルなので重複しないですね。 ありがとうございました。