vlookupや | |
---|---|
[195029] vlookupや- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ はる -(2022/07/06(13:05)) □U R L/ @例えばsheet1にはあらかじめ下記のデータが100行まで様々なメニューが入力済みとします。 A B C 1 ごはん 米 50 2 カレーライス 米 50 3 カレーライス 豚小間 30 4 カレーライス 玉ねぎ 50 5 カレーライス 人参 10 6 カレーライス じゃがいも 50 7 天津丼 米 60 8 天津丼 卵 50 9 天津丼 カニ缶 30 10 みそ汁 みそ 10 11 みそ汁 だし 0.5 12 スープ コンソメ 0.5 13 スープ 正油 1 ・ ・ ・ 100 Asheet2のA1とA2には検索したい値(例えば、A1 カレーライス、A2 スープ)を入力したとします。図形でボタンを作成し押すとvlookupによりsheet1のA1:c100の範囲から検索したメニューの行と列の分だけsheet3へ表示される様に作りたいと思っています。どうぞ、ご教授お願いします。 B検索結果の例 sheet3 A B C 1 カレーライス 米 50 2 カレーライス 豚小間 30 3 カレーライス 玉ねぎ 50 4 カレーライス 人参 10 5 カレーライス じゃがいも 50 6 スープ コンソメ 0.5 7 スープ 正油 1 Sub test() Dim i As Long Dim n As Long Dim Target As String Dim Sht1 As Worksheet Dim Sht2 As Worksheet Dim Sht3 As Worksheet Dim MyArea As Range Set Sht1 = Sheets("sheet1") Set Sht2 = Sheets("sheet2") Set Sht3 = Sheets("sheet3") Target = Sht2.Cells(1, 1).Value Set MyArea = Sht1.Range("a1:c100") For i = 1 To 3 With ActiveSheet Sht3.Cells(1, i) = Application.WorksheetFunction.VLookup(Target, MyArea, i, False) End With Next i End Sub まだここまでの知識しかなく困っています。これではvlookupで一行だけしかsheet3へ処理しません。sheet1のA列にあるおなじメニューの行まで処理出来るのか?とsheet2のA1のメニューの値が終われば次にA2のメニューもあります。 Target = Sht2.Cells(1, 1).Value ↑ を変数にするんだろうなと思っています。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[195030] Re[1]: vlookupや- ■記事引用/メール受信=OFF■ □投稿者/ はる -(2022/07/06(13:17)) □U R L/ すみません、Dim n As Longを削除するのを忘れていました。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[195031] Re[2]: vlookupや- ■記事引用/メール受信=OFF■ □投稿者/ 便利機能 -(2022/07/06(13:55)) □U R L/ そういう時は、エクセルの便利機能オートフィルタを使いましょう。 項目名は必要になると思います。 もしくは、1行1行セルを見て判定。 こっちの方がプログラム的には楽かも? |
[195032] Re[3]: vlookupや- ■記事引用/メール受信=OFF■ □投稿者/ はる -(2022/07/06(14:23)) □U R L/ はじめまして、便利機能さん早速のアドバイスありがとうございます。 超初心者がいきなりvlookupが使えるのでは?と思いネット検索していたら ここへたどり着いた次第です。 1行1行セルをみて判定というアドバイスがとても興味を持ちました。 はやりvlookupやif文を上手く使う事になりますか? |
[195033] Re[4]: vlookupや- ■記事引用/メール受信=OFF■ □投稿者/ 便利機能 -(2022/07/06(15:48)) □U R L/ vlookupは、全然使わないです。 sheet1のA1から、下に見ていき同じものがあれば、 1列目から3列目までを複写。 こんな感じに sheet2.Range("A1:C1").value = sheet1.Range("A1:C1").value 取り合えず、ループを組んで書いてみる事です。 こんな感じでも良いし。 sheet2.Range("A1").resize(,3).value |
[195034] Re[5]: vlookupや- ■記事引用/メール受信=OFF■ □投稿者/ はる -(2022/07/06(17:17)) □U R L/ 便利機能さんお返事ありがとうございます。 アドバイスいただいた事で私が上手くVBAが組める迄、時間がかかってしまうと 思いますが頑張ります。 |
[195036] Re[6]: vlookupや- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2022/07/06(18:06)) □U R L/ こんなので研究してみてください。 Sub test() Dim i As Long Dim Target As Variant Dim Sht1 As Worksheet Dim Sht2 As Worksheet Dim Sht3 As Worksheet Dim MyArea As Range Dim rowToWrite As Long Set Sht1 = Sheets("sheet1") Set Sht2 = Sheets("sheet2") Set Sht3 = Sheets("sheet3") Set MyArea = Sht1.Range("a1:c100") For Each Target In Sht2.Range("A1:A2").Value For i = 1 To MyArea.Rows.Count If Target = MyArea.Cells(i, "A").Value Then rowToWrite = rowToWrite + 1 Sht3.Cells(rowToWrite, "A").Resize(, 3) = MyArea.Cells(i, "A").Resize(, 3).Value End If Next i Next Target End Sub |
[195040] Re[7]: vlookupや- ■ / 記事引用/メール受信=OFF■ □投稿者/ はる -(2022/07/07(08:25)) □U R L/ 半平太さんおはようございます。 昨日、直ぐにお返事できずにごめんなさい。 とても参考になるVBAありがとうございます。 ここから先は実際に組みたい献立作成へと繋げて行きたいと思います。 便利機能さん・半平太さん本当にありがとうございました。 スキルを上げてそれでもまた挫傷した時は過去の記事も参照し 伺いたいと思います。 |
このトピックに書きこむ |
---|