- ベストアンサー
エクセルVBAを使ってデータの抽出をしたいのですが
タンク容量のデータベースがあります。(以下のような) A B C......←タンクNo 0 100 200 500 ..... 2 90 180 460 ...... 4 80 160 420 ..... 6 70 140 400 ..... ・ ・ ・ ↑タンク上部からの空寸 このようなデータからたとえば、タンクBの160は空寸が4ですが、この空寸4を抽出するにはどうすればいいのか教えてください。 ちなみに、データはシート2にあり、シート1のA1セルにタンクN0、B1セルに容量を入力し、コマンドボタンを押すとC1セルに対応する空寸がでるようにしたいのですが。。 また、容量はぴったり一致するときもありますが、無いときは最も近い値の空寸を持ってきたいのです。 どうか、よろしくお願いします。
- nakkya
- お礼率73% (34/46)
- オフィス系ソフト
- 回答数3
- ありがとう数1
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
再びmaruru01です。 まず、Sheet2の表の位置を確認したいのですが、 A1は空白で、A2~縦方向にA1225までに「空寸」、 逆に、B1~横方向にAP1までに「タンクNo」となっていますか? つまり、容量はB2~AP1225までに入力されていることになります。 それなら、No.1の補足欄の数式でいいはずですが。 あと、MATCH関数では、タンクNoの位置を検索しています。 したがって、データに関係なく、第2引数は「Sheet2!$1:$1」のままにしておいて下さい。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17068)
(データ)Sheet2のA1:D5 A B C. 0 100 200 500 2 90 180 460 4 80 160 420 6 70 140 400 (指定) B9セル (VBA) Sub test01() Worksheets("sheet2").Select Select Case Cells(9, 2) 'B9セル Case Is < 100 c = 2 Case Is < 200 c = 3 Case Is < 500 c = 4 End Select MsgBox c For i = 1 To 10 If Cells(i, c) < Cells(9, 2) Then If Cells(9, 2) - Cells(i, c) > Cells(i - 1, c) - Cells(9, 2) Then MsgBox Cells(i - 1, c) Else MsgBox Cells(i, c) End If Exit Sub Else End If Next i End Sub (テスト) 94の時2 101の時6 171の時2 490のとき0 (お詫び) この解答はB列の最低が100を越える、またC列の最低 (最下行)が200を越えることを前提にしています。 また急いだため、指定を同じシートのB9に設定して手抜きをしています。ヒントに使ってください。 またテストが十分でありませんことをお詫びします。 上記仮定が不可の場合は、おっしゃって頂ければ考えなおします。
補足
お返事ありがとうございます。maruru01さんが教えてくれるワークシート関数でやってみようかと思っていますが、VBAも勉強したいと思っているものですから、教えてください。 Worksheets("sheet2").Select Select Case Cells(9, 2) 'B9セル Case Is < 100 c = 2 Case Is < 200 c = 3 Case Is < 500 c = 4 ですが、タンク容量のデータシートにはタンクの番号が200本以上あります。1から200番まで整理されて並んでいるわけでなく番号が不揃いで1052や12、502、500、821といったようにランダムにまた抜けた番号もあります。また今回はシート2のタンクのデータで対処できるのですが今後シート3やシート4にもタンク容量のデータがありそちらも利用できたらとも思っています。 説明不足で申し訳ありませんがよろしくお願いいたします。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 VBAでなくても、ワークシート関数でも出来ます。 シート1のC1に、 =IF(ISERROR(MATCH($A$1,Sheet2!$1:$1,0)),"",INDEX(Sheet2!$A:$A,MIN(IF(ABS(OFFSET(Sheet2!$A$2:$A$5,0,MATCH($A$1,Sheet2!$1:$1,0)-1)-$B$1)=MIN(ABS(OFFSET(Sheet2!$A$2:$A$5,0,MATCH($A$1,Sheet2!$1:$1,0)-1)-$B$1)),ROW(Sheet2!$A$2:$A$5))))) と入力して、[Ctrl]+[Shift]+[Enter]で確定します。 (数式の両端に「{}」が付いて、配列数式になります。) なお、Sheet2のデータ範囲は2~5行なので、適宜変更して下さい。 また、シート1のB1の値が2つのデータの中間の場合は、上の行が優先されます。 例えば、「B」で「170」なら、「3」ではなく「2」になります。
補足
返事が遅くなってしまい申し訳ありません。 maruru01さん、いつも教えていただいてありがとうございます。 MATCH関数がよくわからないのですが、MATCH($A$1,Sheet2!$1:$1,0)の$1:$1はどういう意味なのでしょうか? タンクのデータはA1からAP1225に入っているのですが$1:$1の部分をA1:AP1225に変えればいいのですか? また、”Sheet2のデータ範囲は2~5行なので、適宜変更して下さい。”ということだったので最初 {=IF(ISERROR(MATCH($A$1,Sheet2!$1:$1,0)),"",INDEX(Sheet2!$A:$A,MIN(IF(ABS(OFFSET(Sheet2!$A$2:$A$1225,0,MATCH($A$1,Sheet2!$1:$1,0)-1)-$B$1)=MIN(ABS(OFFSET(Sheet2!$A$2:$A$1225,0,MATCH($A$1,Sheet2!$1:$1,0)-1)-$B$1)),ROW(Sheet2!$A$2:$A$1225))))) }としましたがだめでしたどこがいけないのでしょうか? 一つ一つ解釈しながら勉強させて頂いてます。すいませんが、よろしくおねがいいたします。
関連するQ&A
- 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列目と3行目で交差する「A」を シート2のA1セルに「2」A2セルに「3」と入力すると 指定したセル(たとえばB1セルに「A」と表示(抽出)させたいのですが、ご存知の方教えていただけませんか? (シート1) 1 2 3 4 5 1 2 3 A 4 (シート2) A B C 1 2 A 2 3 3 よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- エクセルのデータ抽出について
基本的な内容かもしれませんが、どうしてもわからないので教えてください。 A B C D 1 1 b 3 c 2 2 t 4 y 3 3 r 3 o 4 4 l 5 p 5 5 k 3 w 上記のようなデータベースがあったとします。このシートと異なるシートのあるセルにたとえば3と入力すると A B C D 1 1 b 3 c 2 3 r 3 o 3 5 k 3 w のようにC列が3である行が抽出され、なおかつA列の昇順で並ぶということをしたいのですが、vlookup等ではうまくできません。 フィルタを使用せずに実現したいのです。お願いします。
- ベストアンサー
- オフィス系ソフト
- Excelにおけるデーター抽出
Excelのシートに記載されている内容は次の通りです。 (1) セルA5~A60の間に1~56の昇順の番号 (2) セルB5~B60には氏名 (3) セルC5~C60には○、×、△の記号 このシートからC列が ○ の記号が付与されている者だけの氏名を別のシートのB7~B**の間に抽出するのですが、抽出したシートの行に空白ができないようにするには式をExcel関数で作成することは可能でしょうか? 若し、不可能でしたらマクロで行う場合のプログラムを教えて下さい。
- ベストアンサー
- その他MS Office製品
- ExcelのVBAについて
ExcelのVBAについて VBA全くの初心者です。 以下のような処理を行いたいのですが、どなたかご教授をお願いします。 以下のように支店(1)~(3)のシートがあります。 1.入力シートに調べたい商品No・商品名・備考を入力する(複数行あり) 2.マクロを実行すると、商品Noを検索対象として支店(1)~(3)シートをチェックし、 一致しない行を不一致データシートに出力する もう一つ別のマクロで、 1.入力シートに調べたい商品No・商品名・備考を入力する(複数行あり) 2.マクロを実行すると、商品Noを検索対象として支店(1)~(3)シートをチェックし、、 一致する行を一致データシートに出力し、D列に対象データがあるシート名を表示する ※可能でしたら、E列に対象データがある行番号も表示する -------------------------------- シート名:支店(1) A B C 商品No 商品名 備考 011 商品A 備考A 009 商品B 備考B 015 商品C 備考C -------------------------------- シート名:支店(2) A B C 商品No 商品名 備考 008 商品A 備考A 023 商品B 備考B 004 商品C 備考C -------------------------------- シート名:支店(3) A B C 商品No 商品名 備考 007 商品A 備考A 033 商品B 備考B 018 商品C 備考C -------------------------------- シート名:入力シート A B C 商品No 商品名 備考 ※ここに複数行入力する -------------------------------- シート名:不一致データシート A B C 商品No 商品名 備考 ※ここに出力される -------------------------------- シート名:一致データシート A B C 商品No 商品名 備考 ※ここに出力される
- 締切済み
- Visual Basic
- Excelでデータを抽出
エクセルでデータベースを作成しました。 このデータベースから目的のものだけを別のシートに抽出したいです。 データベース A ID1 B ID2 C 内容 この内容が100行書かれているとします。 ある20個のIDの内容だけを別のシートに抽出したいのです。 ID1を昇順にならべるとID2は昇順にならないようなIDになっています。 なので、VLOOKUPがつかえません。 ID1から抽出したいもの20個を選んで、シート2へ選んだ内容のID1と内容を抽出 ID2から抽出したいものを20個選んで、シート3へ選んだ内容のID2と内容を抽出 どの様にしたら出来ますか? うまく説明できなくてすみません。 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- EXECL・複数タブからのデータ抽出
同一Book内での処理です。 今現在の処理内容です タブAには抽出されるデータがあります。 セルA1・・・抽出キー セルB1・・・抽出データ1 セルC1・・・抽出データ2 タブBには抽出キー・抽出結果を表示するようにしています。 セルA1・・・抽出キー1 セルB1・・・抽出キー2 セルC1・・・抽出キーを合成 <=CONCATENATE(A1,"→",B1)> セルD1・・・データ抽出 <=VLOOKUP(C1,タブA!$A:$C,2,FALSE)> したいことは タブAのデータと同一内容のデータが複数タブに存在するときのデータ抽出する場合はどうすればよいのでしょうか? タブA(リンゴ)には抽出されるデータがあります。 セルA1・・・抽出キー セルB1・・・抽出データ1 セルC1・・・抽出データ2 タブB(みかん)には抽出されるデータがあります。 セルA1・・・抽出キー セルB1・・・抽出データ1 セルC1・・・抽出データ2 タブCではセルA1の内容によって抽出するデータのタブを選択しデータを抽出したい セルA1・・・抽出キー1 セルB1・・・抽出キー2 セルC1・・・抽出キーを合成 <=CONCATENATE(A1,"→",B1)> セルD1・・・データ抽出 <=ここの計算式が知りたい タブCのセルA1の抽出キーに(リンゴ)と入力されていればタブA(リンゴ)のシートよりデータ抽出 タブCのセルA1の抽出キーに(みかん)と入力されていればタブB(みかん)のシートよりデータ抽出 単にいえば、データ抽出するタブを指定して<VLOOKUP関数>を利用できるのか? できないなら実現できる手法を教えていただきたいです。 説明が難しいですが、内容がわかっていただけたでしょうか? 達人からの回答よろしくお願いいたします
- ベストアンサー
- その他MS Office製品
- データ検索
エクセル2003VBAの質問です。 AシートにAデータベースがあります。 そのデータベースには一つのセルに、日にちと時間が入力されています。(例 2008/10/07/ 16:29) BシートにもBデータベースがあります。 Aシートの先程のセル(日にちと時間)を、Bシートで検索したいです。 しかし、このBシートには、Aシートのセルが一致しないものもあります。 一致すれば、Aシートの先程のセルとAシートに入力されている、他の項目をCシートにコピーしたいです。 一致しなければ、そのデータベースは無視して、Aシートに入力されている次のデータ(次の行)を検索したいです。 どうすれば良いでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- excel データの抽出について
仕事でexcelの表からデータを抽出して資料を作成したいと思っています。 ≪シート1≫表から≪シート2≫表へ「1が立っているデータのタイトル(あ~お)を抜き出したいのです。どなたか方法があれば教えてください。(できればVBA等を使わないで作りたいです。) ≪シート1≫ あ い う え お A 1 1 B 1 1 1 C 1 1 ≪シート2≫ A あ う B い う お C え お
- 締切済み
- その他MS Office製品
- エクセル:同じデータがあれば、同じデータの隣のデータを抽出する。
エクセル:同じデータがあれば、同じデータの隣のデータを抽出する。 以下のようなエクセルデータがあります。A1からA3の中にC1があれば、 あったセルの隣のセルの値をD1に抽出したいです。 何か方法がありますでしょうか? お願いいたします。 EX: A B C D 1 2 3 2 5 2 3 9 1 結果: A B C D 1 2 3 9 2 5 2 5 3 9 1 2
- ベストアンサー
- その他MS Office製品
お礼
参考にさせて頂いて、何とか解決できました。 ありがとうございました。 結局、VBAでやってみました。