• ベストアンサー

エクセル2000マクロ条件抽出方法

シート名(在庫月数マスター)に下記の条件のデータが入っています。 A列 B列 C列 最小値 最大値 在庫月数 0 50 4.0    0以上51未満の場合は4.0 51 100 3.0    51以上101未満の場合は3.0 101 500 2.0 101以上501未満の場合は2.0 501 1000 1.5 501以上1001未満の場合1.5 1001 1.2 1001以上1.2 別のシート名(実績)のN列に平均払出のデータが入っています。 在庫月数マスタの条件を判断してAB列に在庫月数を入れたい。 N列           AB列 平均払出→項目名(5行目) 在庫月数(5行目)  2000            1.2  75            3.0 45            4.0  0            4.0 105 2.0 このような場合マクロで抽出する方法を教えてください。 よろしくお願いします。

noname#72697
noname#72697

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 こんな感じかな? 元ブックをコピーして、必ずテスト環境で試して下さい。 Sub Test() Dim fRange As Range, sRange As Range  Set fRange = Worksheets("在庫月数マスター").UsedRange  Set sRange = Worksheets("実績").Range("AB6:AB" & _         Worksheets("実績").Range("N65536").End(xlUp).Row)  sRange = "=VLOOKUP(N6,在庫月数マスター!" & fRange.Address & ",3)"  sRange.Value = sRange.Value  Set fRange = Nothing: Set sRange = Nothing End Sub

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

#1のご回答の方のコーディングの中にも出てきていますが VBAやマクロでなく、エクセルの有名な関数「=VLOOKUP (・・)」と言う関数でできると思います。エクセルの本や雑誌の記事に必ず載っています。

関連するQ&A

  • 条件のあったシートへデータを転記するマクロ

    よろしくお願いします。 ブック内にシート名でマスターシートと在庫日報入力シートの2つがあります。在庫日報シートのA1に日付、A列3行目以降に商品コード、B列3行目以降に各商品名、F列3行目以降に各商品の在庫数量が入っており、毎日更新されます。マスターシートには縦A列3行目以降に日付が入っており、また横1行目(A1,B1,C1....)に各商品名が百以上記載されています。今まで、以下のマクロで在庫日報入力シートの在庫数量をマスターシートの対応するセルに転記していました。(縦の日付を検索し、横の商品名を検索し対応する場所に在庫数量を転記) Private Sub CommandButton1_Click() Application.DisplayStatusBar = True Dim LastR, idxR As Long, trgR, trgC If MsgBox("日付は正しいですか", vbQuestion + vbOKCancel) = vbOK Then With Worksheets("在庫日報入力") LastR = .Range("A65536").End(xlUp).Row trgR = Application.Match(.Cells(1, 1), Worksheets("マスター").Range("A:A"), 0) For idxR = LastR To 3 Step -1 trgC = Application.Match(.Cells(idxR, 1), Worksheets("マスター").Range("1:1"), 0) If IsNumeric(trgR) And IsNumeric(trgC) Then Worksheets("マスター").Cells(trgR, trgC + 1) = .Cells(idxR, 6) Else .Cells(idxR, 1).Interior.ColorIndex = 3 End If Application.StatusBar = "マスターシートに転記中・・・進行状況 " & idxR & "" Next idxR End With Application.StatusBar = False MsgBox "終了しました。(処理件数=" & LastR- 3 & "件)", vbOKOnly: Exit Sub End If End Sub 今までこれで良かったのですが、今度、マスターシートを削除して、各商品名毎にシートを作成します。そのため、それぞれの商品名シートに在庫日報シートのデータを転記するように変えたいのです。商品名シートはそれぞれA列3行目以降に日付が、となりのB列に在庫数が入るようになっています。 在庫日報シートの各商品に対応した商品名シートを見つけて、そのA列から在庫日報と同じ日付を見つけて、その行のB列に在庫日報シートの在庫数量を転記する。というものです。商品名シートは百以上あり名前は文字列です。 今までのマクロは教えてgooで教えていただきながら作りました。すいませんが、またご教授をお願いします。

  • Excel 2007 マクロ 特定条件の抽出方法

    Excel 2007 マクロ作成について質問させていただきます。 Sheet1に下記2つの表があります。 表の内容を変更せずに(列を追加する等) 特定条件を別Sheet2にコピーして貼り付けたいと思います。 <くだもの在庫表> 型番 商品名 産地 本数 AA-1 りんご 国産 1 AA-2 なし 外国産 4 VB-3 ばなな 外国産 <野菜在庫表> 型番 商品名 本数 HU-3 きゅうり 5 LO-7 いも LLU-89 だいこん 3 <条件> 本数が空白以外の行をコピーしてSheet2に貼り付けます。 結果イメージは画像をご参照ください。 2つの表の列数が異なるため、ピボットテーブルを作成して フィルタオプションで抽出することは難しいとおもいます。 どのようなマクロになりますでしょうか。 アドバイスよろしくお願いいたします。

  • excel2000マクロ抽出方法

    2つのファイルがあります。ブック名A.XLS シート名 WORK              ブック名b.XLS シート名 SORT              ブック名A.XLS シート名 WORKに下記のデータが入っています。 AD 1300G A227550 000PA505(C列2行目) 200112(F列)200201(G列)200202(H列)200203(I列)200204(J列)200205(K列)→1行目固定データ AD 1300G A227550 000PA533(C列3行目)   ブック名b.XLS シート名 SORTに下記のデータが入っています。 AD 1300G A227550 000PA505(A列2行目)200112(E列)200201(F列)200202(G列)200203(H列)200204(I列)200205(J列) →1行目E列~J列のデータは都度変わっている AD 1300G A227550 000PA533(A列3行目)    データ抽出条件  ブック名A.XLS シート名 WORKの F列~K列の1行目の列データとブック名b.XLS シート名 SORTの  E列~J列の1行目の列データが同じで、ブック名A.XLS シート名 WORKのC列の2行目以降のコードと  ブック名b.XLS シート名 SORTのA列の2行目以降のコードが同じだったら  ブック名b.XLS シート名 WORKの E列~J列の同じ行にデータを入れる。違うときは、  ブック名b.XLS シート名 WORKのデータはそのままにする。 上記の条件を満たしたマクロの記述の仕方を教えてください。 以上よろしくお願いします。

  • エクセルのマクロでプログラムを作りたいのですが教えてください

    まず一行目に48列のデータがあり、 2行目から32行目までにも同様に48列のデータがあります。 条件が1800以上の数値ならその列の1行めのデータを50行目に縦一列にどんどん出力させるというプログラムをつくりたいのです。 条件が偽の場合は空欄です。 下に途中まで努力したのですがどこをなおせばいいのかわかりません。 分かるかたいましたらご指摘お願いいたします。 Sub Macro1() Dim n As Integer For n = 1 To 31 Sheet1.Cells(n + 1, 50) = "=IF(Cells(n+1, 1)> 1800,A1,"""")" Sheet1.Cells(n + 31 * 1 + 1, 50) = "=IF(Cells(n+1, 2)> 1800,B1,"""")" Sheet1.Cells(n + 31 * 2 + 1, 50) = "=IF(Cells(n+1, 3)> 1800,C1,"""")" ・ ・ ・ ・ ・ Sheet1.Cells(n + 31 * 47 + 1, 50) = "=IF(Cells(n+1,48)> 1800,AV1,"""")" Next End Sub 宜しくお願い致します。

  • Excel2000マクロ記述について

    下記の条件で下記のようなマスターを参照してマクロを作成したいのですが、どのように記述したら良いでしょうか シート名 滞留在庫表 条件 c列の5行目からdataが入っています。data例(AD1200S0110000000P)18桁 dataの頭8桁目がBの場合はL221をV列に表示 dataの頭8桁目が、A又はM又Pの場合はL222をV列に表示 dataの頭8桁目がB、A、M、P以外の場合は、ブランクをV列に表示 シート名 表示再設定マスタ             A列    B列 5行目****************** 6行目*******B********** L221 7行目*******A********** L222 8行目*******M********** L222 9行目*******P********** L222

  • EXCEL 条件付きマクロ 

     |L       |  M    | N    |  O 1 |2007/7/31  起算日 2 3 4 |最終入庫日 |日数 |月数  |区分 5 |2005/4/5   |847   |27   |2年超 6 |2005/8/1   |729  |23   |1年超  7 |2006/7/31   |365  |12   |180日超 最終入庫日と起算日の期間計算をマクロで作成しました。 データ行は、都度変化します。 期間日数が365以下の場合(例では7行目)、月数、区分の計算をせず、7行目を表示しないようにする方法を教えてください。 また、下から4行目の長いIF分をIFの前で半角スペース、アンダーバーを使って5行に改行する方法も教えて下さい。 Sub 期間計算() 'メッセージ Dim kisanbi As Date kisanbi = Application.InputBox(Prompt:="起算日を入力して下さい", _ Title:="起算日を入力", Type:=1) Worksheets("在庫").Range("L1").Value = kisanbi '計算 最終入庫日欄が空白になるまで繰り返す Dim i As Integer i = 5 Do While Worksheets("在庫").Cells(i, "L") <> "" '日数計算(M列) Worksheets("在庫").Cells(i, "M").Select ActiveCell.FormulaR1C1 = "=DATEDIF(RC[-1],R1C12,""D"")" ActiveCell.Select '月数計算(N列) Worksheets("在庫").Cells(i, "N").Select ActiveCell.FormulaR1C1 = "=DATEDIF(RC[-2],R1C12,""M"")" ActiveCell.Select '日数から計算して区分を分類、表示 Worksheets("在庫").Cells(i, "O").Select ActiveCell.FormulaR1C1 _ = "=IF(RC[-2]>1095,""3年超"",IF(RC[-2]>730,""2年超"",IF(RC[-2]>365,""1年超"",IF(RC[-2]>180,""180日超"",""180以下""))))" i = i + 1 Loop End Sub

  • エクセル 複数の条件を抽出

    エクセルで複数の条件を抽出する方法について教えてください。 sheet2には以下の表があります。 A列  商品名1 B列  商品名2 C列  評価1 D列  評価2 sheet1には複数のデータがあり、そのデータを使って商品名と評価を出しています。 (商品名は手入力して、評価は関数を使って数値を出しています。) ここから、評価1がある値以上かつ評価2がある値以上の商品名1と商品名2をsheet3に抽出したいのです。(実際にやりたいのは、評価1が2%以上かつ評価2が0.9以上という条件です。) sheet3に出したいのは見やすいと思ったからで、どうしてもというわけではありません。 商品名が分かれているのはsheet2で作業がしやすいように分けています。必要であれば統合します。 評価1は書式設定で%表記にしています。 一応自分なりに調べてはみたものの、全くの初心者な為わかりませんでした。 初心者でもわかるように教えていただければありがたいです。

  • エクセル:マクロの起動条件

    お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。  (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。

  • Excel マクロ 条件抽出貼り付け等

    いろいろ拝見させていただいているのですが うまく設定できず、困っています。 使用者が数名いる(そしてその数名がそれぞれで集計を取りたい)ので シートのタブ名、シート数、基準となる年月が固定されないことが前提です。 集計のシートがあります(このシートもたとえば2月・3月・4月…と数ヶ月分で複数シートになる可能性があります) ・A1セルには、起点となる年月が入力 ・A3~A6セルには、目標・予定・実績・備考が入ります。 各支店のシートがあります(支店数は、使用者によって様々です。最大で25くらいになるかと思いますが、書式は同じです) ・A1セルには、支店名(タブを変更したら、A1セルが連動するように数式を組んでいます) ・A2セル、A8セル、以降6行毎に、年月日(1シートで12ヶ月分予定) ・A3~A6セルには、目標・予定・実績・備考が入ります。 ・表の一塊は、A2:AB6です。 各支店のシートから集計シートに転記をしたい。 A支店~たとえばG支店までの7支店があり、 (1)集計シートA1セルにある年月を基準に、各支店シートの該当月の表の検索をかけ (2)集計シートのA2以降6行毎(各支店シートでは年月を入れているセル)のセルに支店名を張り付け (3)各支店シートA3:AB6の内容を、集計シートのA3:AB6に値と数値の書式貼り付けをしたい  (表一塊毎) (4)集計シートのA支店・B支店の貼り付けの間には、1行挿入をしておきたい 同じような質問が…というお返事があることを承知でお伺いしています。 いただいた回答を基に、勉強をしていきたいと思っていますので なにとぞよろしくお願い申し上げます。

  • エクセルのマクロについての質問です。

    エクセルのマクロについての質問です。 長文申し訳ございません。 Excelマクロが何度作り直してもうまく作動せず非常に困っております。 (1)ファイルAのシート1のDB列3行目に1の値をいれます。 (2)ファイルAのDC列172行目の値をファイルBのシート名が「1」のシートのD列4行目に入れます。 (3)ファイルAのDC列2733行目の値をファイルBのシート名が「1」のシートのD列6行目に入れます。 (4)ファイルAのDC列3128行目の値をファイルBのシート名が「1」のシートのD列7行目に入れます。 (5)ファイルAのシート1のDB列3行目に1.2の値をいれます。 (6)ファイルAのDC列172行目の値をファイルBのシート名が「1.2」のシートのD列4行目に入れます。 (7)ファイルAのDC列2733行目の値をファイルBのシート名が「1.2」のシートのD列6行目に入れます。 (8)ファイルAのDC列3128行目の値をファイルBのシート名が「1.2」のシートのD列7行目に入れます。 (9)以上のようにファイルAのシート1のDB列3行目に入れる値を0.2ずつ増やしていき、その値に対応したファイルBのシートに上記のように値を入れていくという動作を20まで繰り返す。 以上のようなマクロを作る事は可能でしょうか? マクロについて勉強はしているのですが上手く使いこなせず苦労しております。 長文の質問で大変申し訳ございませんがよろしければ皆さまのお知恵をお貸しください。 宜しくお願い致します。

専門家に質問してみよう