『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

エクセルについて、あるデータから指定期間内のデータを別シートへ抽出する方法を教えてください。


例)
No.  日付   名前  数字  配達先
1  5/1   AAA   5    BBB
2  5/6   CCC   10   DDD
3 5/14   EEE   4    FFF
4   6/6   GGG   20    HHH

データは毎日更新されます。
ここであるセルに「2012/5/1」~「2012/5/31」と入力し、その期間内のデータを別シートへ引っ張りたいです。指定期間は人によってその都度様々です。
色々調べたのですが、オートフィルターでは行えそうになく、VBAを使用した方がよいと思ったのですが、初心者のため分かりません。どなたか教えていただけますと大変助かります

このQ&Aに関連する最新のQ&A

A 回答 (5件)

》 オートフィルターでは行えそうになく、VBAを使用した方がよいと思った…


“初心者”は先走って思い込まないことをお奨めします。

[オートフィルタ]で抽出したデータをコピーして、別シートに貼り付ける手もあります。
詳細な手順は省くけど、添付図は[フィルタオプションの設定]を利用した経過&結果を示しています。
[抽出先]    “指定した範囲”
[リスト範囲]  Sheet1!$A:$E
[検索条件範囲] $D$2:$D$3
[抽出範囲]   $A$5:$E$5
「指定期間内のデータを別シートへ抽出」の回答画像5
    • good
    • 3
この回答へのお礼

お礼が遅くなり、申し訳ございません。
ご教示ありがとうございました。

確かに、一般的な機能を使いこなせていないのに、
マクロと先走らず勉強してみようと思います。

オートフィルターをうまく使いこなしてみます。

お礼日時:2013/01/13 16:16

シート1にはお示しの表が有り、A1セルからE1セルには項目名が有り、2行目以降にそれぞれのデータが入力されているとします。


シート2はお求めの表でA1セルには2012/5/1のように検索の初めの日付が、B1セルには から の文字が、C1セルには2012/5/30のように検索の終わりの日付が入力されているとします。
そこでシート1に戻ってシート1のF2セルには次の式を入力して下方にドラッグコピーします。

=IF(B2="","",IF(AND(B2>=Sheet2!A$1,B2<=Sheet2!C$1),MAX(F$1:F1)+1,""))

シート1のF列のデータをもとにシート2の表を作ります。
シート2のA2セルからE2セルまでのはシート1の1行目の項目名をコピーして貼り付けます。
シート2のA3セルには次の式を入力してE3セルまで横のドラッグコピーしたのちに下方にもドラッグコピーします。

=IF(ROW(A1)>MAX(Sheet1!$F:$F),"",INDEX(Sheet1!$A:$E,MATCH(ROW(A1),Sheet1!$F:$F,0),COLUMN(A1)))

最後にシート2のB列を選択して右クリックしセルの書式設定からセルの表示形式で日付を選択します。
    • good
    • 4
この回答へのお礼

お礼が遅くなり、申し訳ございません。
ご教示ありがとうございます。

関数を使うことが頭になかったので、
関数でもできることに驚きました。

ありがとうございました。

お礼日時:2013/01/13 16:20

 作業列を使用しない方法です。


 今仮に、元データの表中で「No.」と入力されているセルがSheet1のA1セルであり、Sheet2のB1セルに指定期間の最初の日付を入力し、Sheet2のD1セルに指定期間の最終日の日付を入力すると、Sheet2のA列~E列の4行目以下に、抽出されたデータが表示されるものとします。
 又、Sheet1の日付は、必ず、古い日付が上になり、新しい日付が下に来るように並べられているものとします。
 又、Sheet2のC1セルには「~」と入力されていて、例えば、Sheet1のB1セルに「2012/5/1」という日付が入力されていて、Sheet2のD1セルが空欄となっている場合には、指定期間は「2012/5/1~」という事で、2012/5/1以降の全てのデータが抽出されるものとし、
又、例えば、Sheet2のB1セルが空欄で、Sheet2のD1セルに「2012/5/31」と入力されている場合には、指定期間は「~2012/5/31」という事で、2012/5/31以前の全てのデータが抽出されるものとします。
(指定期間を1日分のみとする場合には、同一の日付を両方のセルに入力して下さい)

 まず、Sheet2のA4セルに次の関数を入力して下さい。

=IF(ROWS($4:4)>IF(AND(ISNUMBER(1/DAY($D$1)),COUNTIF(Sheet1!$B:$B,"<"&$D$1+1)),MATCH($D$1+"23:59:59",Sheet1!$B:$B),IF(COUNT(Sheet1!$B:$B),MATCH(9E+99,Sheet1!$B:$B),0))-IF(AND(ISNUMBER(1/DAY($B$1)),COUNTIF(Sheet1!$B:$B,"<"&$B$1)),MATCH($B$1-"0:0:1",Sheet1!$B:$B),ROW(Sheet1!$B$1)),"",INDEX(Sheet1!$A:$A,IF(AND(ISNUMBER(1/DAY($B$1)),COUNTIF(Sheet1!$B:$B,"<"&$B$1)),MATCH($B$1-"0:0:1",Sheet1!$B:$B),ROW(Sheet1!$B$1))+ROWS($4:4)))

 次に、Sheet2のB4セルに次の関数を入力して下さい。

=IF(ISNUMBER(1/(VLOOKUP($A4,Sheet1!$A:$E,MATCH(B$3,Sheet1!$A$1:$E$1,0),FALSE)<>"")),VLOOKUP($A4,Sheet1!$A:$E,MATCH(B$3,Sheet1!$A$1:$E$1,0),FALSE),"")

 次に、Sheet2のB4セルをコピーして、Sheet2のC4~E4の範囲に貼り付けて下さい。
 次に、Sheet2のB4~E4の範囲をコピーして、同じ列の5行目以下に貼り付けて下さい。

 以上です。
「指定期間内のデータを別シートへ抽出」の回答画像3
    • good
    • 0
この回答へのお礼

お礼が遅くなり、申し訳ございません。
ご教示ありがとうございました!

関数でも十分にできるんですね!
勉強になりました!

お礼日時:2013/01/13 16:18

VBA を使わないとできないという処理は確かにありますが、Excel の一般機能でできることを VBA で行っても、そのほうが有利と言える条件が揃っている場合を除いて、あまりお勧めしません。

趣味としてはいいですが、実務的には簡単な処理がかえって手間がかかってしまうし、一般機能が使えていない人が VBA のコードをスラスラ書けるとも思えません。まずは Excel の基本的な機能を使いこなせるよう学びましょう。

ご要望のことは、オートフィルタでも問題なくできると思いますよ。添付図は、質問文の表を「2012/5/2~2012/5/15」という期間で絞り込んだ状態のものです。

別シートに保存したければ、絞り込んだ状態で表をコピーし、別シートに貼り付けるだけのことです。

例えば、「5/1」というセルにカーソルを置いた状態で、数式バーを見てみましょう。「2012/5/1」などと表示されているかと思います。セルでは「5/1」と表示されていても実際は年月日のデータであり、書式で「5/1」と表示させているだけだからです。そのセルに設定されている書式の確認は、右クリックの「セルの書式設定」の「表示形式」タブでできます。

「2012/5/1」といった年月日のうち年などが正しくないようなら、正しい年に書き換えておきましょう。数式バーをクリックまたはセルをダブルクリックで、部分的にも編集できます。

こうして年月日が正しくなっていれば、オートフィルタで狙いどおりに絞り込めます。その具体的な方法は、参考 URL を参照してください。Excel2003 と 2007 の両方で紹介されています。

Excel2007 では、参考 URL のページの図にある「日付フィルタ」という箇所をクリックすると、「指定の範囲内」というのが選べると思います。月単位での絞込みの場合は、チェックボックスでもできますね。

参考URL:http://officetanaka.net/excel/function/tips/tips …
「指定期間内のデータを別シートへ抽出」の回答画像2
    • good
    • 0
この回答へのお礼

お礼が遅くなり、申し訳ありません。
ご丁寧にご教示頂きありがとうございます。

確かにマクロにこだわる理由はありませんね、、。
もっと一般機能について勉強してからにします!

お礼日時:2013/01/13 16:11

こんばんは。



添付図:
シート1のA,B,C,D,E列に元データ。

手順:
シート2のC1とC2に「2012/5/1」~「2012/5/31」と入力することにして。
A2セルに
=IF(MEDIAN(Sheet1!B2,$C$1:$C$2)=Sheet1!B2,ROW(Sheet1!B2),"")
と記入、下向けに沢山コピー

E2セルに
=IF(ROW(E1)>COUNT($A:$A),"",INDEX(Sheet1!A:A,SMALL($A:$A,ROW(E1))))
と記入、右に下にコピー。


まずは練習として回答の通りにまっさらエクセルに作成し、その通りにできるようになってから、改めてあなたの本番を作成してください。




#毎日5回は寄せられるご相談なので、誰が作成してもどこかで見たような回答になりますね。
「指定期間内のデータを別シートへ抽出」の回答画像1
    • good
    • 2
この回答へのお礼

お礼が遅くなり、申し訳ありません。
教えてくださり、ありがとうございました!
色んな方法があるんですね。とても勉強になりました。

お礼日時:2013/01/13 15:35

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで特定の列にある日付データの中から、指定した日付範囲を抽出する方法を教えてください

例えばこんなデータなのですが、

2002/07/01 99 25 36
2002/07/05 55 33 25
2002/08/01 80 20 51

日付の入っている列を検索して、2002/07/01から2002/07/31
の範囲ならば、その行のデータを別のシートに抽出したいのですが、
日付の範囲は関数でどうすればよいのか分かりません。ACCESSなら
between 9999/99/99 and 9999/99/99って感じで簡単にできるの
ですが。。。エクセルの関数だとIF関数の論理式にAND関数を使って
>=2002/07/01
<=2002/07/31
と入力したので、2002/07/05ならば、いずれもTRUEなので、値を返して
くれると考えたのですが、なぜかダメでした。
(↓こういう入力をしました)
=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

Aベストアンサー

こんばんは!

=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

おしいですね(^^;
日付をそのまま入力してしまうと数式上では
 2002/7/31 → 2002÷7÷31 になってしまいます。
ダブルクォーテーションで括って(文字列)入力して
それを数値化しましょう!

=IF(AND(Sheet2!A1>="2002/7/1"*1,Sheet2!A1<="2002/7/31"*1),Sheet2!A1,"該当月ありません")

文字列 ="10" に対して 乗算 *1 としても数式が
なり立ち文字列の数字が数値化されます。="10"*1

------------余談--------------------------
ご質問の条件例の場合特例で 2002/7でればOKなので

=IF(TEXT(Sheet2!A1,"yyyym")="20027",Sheet2!A1,"該当月ありません")

でも可能ですね!

こんばんは!

=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

おしいですね(^^;
日付をそのまま入力してしまうと数式上では
 2002/7/31 → 2002÷7÷31 になってしまいます。
ダブルクォーテーションで括って(文字列)入力して
それを数値化しましょう!

=IF(AND(Sheet2!A1>="2002/7/1"*1,Sheet2!A1<="2002/7/31"*1),Sheet2!A1,"該当月ありません")

文字列 ="10" に対して 乗算 *1 としても数式が
なり立ち文字列の数字が数値化されます。="10"*1

--...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QSUMIF関数で、条件に日付範囲で指定するには?

SUMIF関数で、条件に日付をいれたいのですが、
10日毎の範囲で集計を取るにはどうすればいいでしょうか。

A列に日付、B列に数値で
=SUMIF(A:A,"【2013/9/1~2013/9/10】",B:B) 
こんな感じで日付の部分が問題のところです。

date関数を入れてみると例えば9/3だけなど、一日だけの計算はできたのですが…
1~10,11~20、21~末日(31日)で合計するにはどう記入すればいいでしょうか。

Aベストアンサー

こんにちは。

2013/9/10までを求めて、2013/9/1以前を引けば答えが出ます。
=SUMIF(A:A,">=2013/9/10",B:B)-SUMIF(A:A,"<2013/9/1",B:B)

どうでしょうか。

Q(VBAにて)日付でデータを抽出するやり方

ド素人なのですが、上司にマクロ作成を依頼され困っています。
下記に内容を記しますので、教えて下さい。
お願いします。

・VBAを使ってExcelで管理してある管理表(下記参照)を
「発生年月日」をキーにして
「開始月:yyyy/mm」と
「終了月:yyyy/mm」をそれぞれ入力して、コマンドボタンを押したら
 その指定した範囲内のみのデータを別シートに表示するように
 して欲しい。
(例)
開始月:2007/8
終了月:2007/11
→2007年8月~2007/11月分の全データが別シートに表示される)

・管理表はこんな感じです。(大体、月に4件ぐらいあります)
  発生年月日      件名    内容      完了日
  (yyyy/mm/dd) (障害件名)  (障害内容)  (yyyy/mm/dd)

よろしくお願いします。

Aベストアンサー

プログラム以外の知識
(1)エクセルの日付は、見た目年月日に見えているが、そのセルの値は日付セリアル値という(1900年1月1日から何番目の日かという正整数を持ってます。
ですから、開始月:2007/8は開始日:2007/8/1から、終了月:2007/11
は終了月:2007/11/30と考えて、日付でやる方法が生まれます。
(2)あるセルに日付があった場合、そこから年、月を取り出す関数があること。Year、Month関数です。
あと年数、月数で文字列と数値の区別に注意が必要です。
(3)フィルタなどのエクセル固有の機能があることも知っておくべきです。
VBAプログラムは上記3つの路線で考えることが可能です。
ーー
プログラムの知識
(1)データの最下行を知るコード
(2)全行総なめして判別を繰り返す手法を採る場合、繰り返し法
(3)他シートに書き出す法
(4)月末日を出すコード
ーーー
(1)の方式でやってみます。
下記は書式は移しません。
Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
'----
d = sh1.Range("A65536").End(xlUp).Row
' MsgBox d
k = 2
f = sh2.Range("C1")
t1 = sh2.Range("D1")
t = DateSerial(Year(t1), Month(t1) + 1, 1) - 1
' MsgBox t
For i = 2 To d
If sh1.Cells(i, "A") >= f And sh1.Cells(i, "A") <= t Then
' MsgBox sh1.Cells(i, "A")
sh2.Cells(k, "A") = sh1.Cells(i, "A")
sh2.Cells(k, "B") = sh1.Cells(i, "B")
k = k + 1
'--以下C,D・・列分を必要分並べる
End If
Next i
End Sub
'---
Shwet2のA列は日付書式にする。
Sheet2のC1,D1は書式をy年m月にし、2007/9とかいれると値は2007/9/1になり、表示は2007年9月と見えます。
コマンドボタンの件はわかると思うが、
上記をクリックイベントのコードに挟む。
Private Sub CommandButton1_Click()
test01
End Sub

プログラム以外の知識
(1)エクセルの日付は、見た目年月日に見えているが、そのセルの値は日付セリアル値という(1900年1月1日から何番目の日かという正整数を持ってます。
ですから、開始月:2007/8は開始日:2007/8/1から、終了月:2007/11
は終了月:2007/11/30と考えて、日付でやる方法が生まれます。
(2)あるセルに日付があった場合、そこから年、月を取り出す関数があること。Year、Month関数です。
あと年数、月数で文字列と数値の区別に注意が必要です。
(3)フィルタなどのエク...続きを読む

Q1年分のデータから特定の月分のデータを抽出→表示

エクセル初心者です。
仕事で機材の貸し出しをしておりまして、
それを受付、まとめ、集計しているエクセルの表があります。

受付日、貸し出し機材、貸し出し先、使用時間を日毎にベタ打ちしたものがあり、
それが1年分、エクセルの表で1シートにまとめています。

その中から、月ごとのデータをシート2に抽出したい(それを元に、月別のまとめをするので)のですが、
どうすればいいでしょうか。
理想は、4/1と入力したら、4/1~4/30までのデータが表示される、
というようなものなのですが…。

そういうものになると、やはりマクロなどになりますでしょうか?
オートフィルではなく、関数で表示させたいです。

ただ表示させるだけでいいのですが…。

初心者なのに高望みをして申し訳ないのですが、
作れと上司から命令されています…。
どうかお力をお貸しください。よろしくお願いいたします。

Aベストアンサー

こんばんは!
一例です。

↓の画像で説明します。
左側が元データでSheet1・右側が表示させるデータでSheet2とします。
Sheet2のA1セルに検索したい月の数値を入力すると4行目以降に表示させるようにしてみました。

Sheet1に作業用の列を1列設けます。
作業列E2セルに
=IF(OR(Sheet2!A$1="",MONTH(A2)<>Sheet2!A$1),"",ROW())
という数式を入れこれ以上データはない!というくらいしっかり下へオートフィルでコピーしておきます。

そしてSheet2のA4セルに
=IF(COUNT(Sheet1!$E:$E)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$E:$E,ROW(A1))))
という数式を入れD4セルまで右にコピー!
そして
A4セルの表示形式は「日付」に、
D4セルの表示形式は「時刻」(←本来であればユーザー定義から [h]:mm としておいた方が良いと思います9
最後にA4~D4セルを範囲指定 → D4セルのフィルハンドルで下へコピーすると
画像のような感じになります。m(_ _)m

こんばんは!
一例です。

↓の画像で説明します。
左側が元データでSheet1・右側が表示させるデータでSheet2とします。
Sheet2のA1セルに検索したい月の数値を入力すると4行目以降に表示させるようにしてみました。

Sheet1に作業用の列を1列設けます。
作業列E2セルに
=IF(OR(Sheet2!A$1="",MONTH(A2)<>Sheet2!A$1),"",ROW())
という数式を入れこれ以上データはない!というくらいしっかり下へオートフィルでコピーしておきます。

そしてSheet2のA4セルに
=IF(COUNT(Sheet1!$E:$E)<ROW(A1),"",INDEX(Sheet1!A:A,...続きを読む

Qエクセルで複数の条件を抽出し自動的に別シートに反映する方法を教えてください。

こんばんは。教えてください。

元データ(sheet1)を更新するたび
2つの条件にあったデータを
別シートに自動的に抽出したいので
適した関数がありましたら教えてください。



◇シート1◇ ※元データ
 A      B     C     D     F
1 氏名 役職 部署 年齢 移動時期     
2 山田 社員 開発 45  未調整
3 田中 社員 人事 42  4/1~
4 鈴木 派遣 企画 30  
5 高橋 役員 人事 50  未調整
6 坂野 社員 企画 33  未調整  
7 井上 派遣 企画 29  未調整

◇シート2◇ ※部署が人事で移動時期が未調整の人のみ抽出
 A      B     C     D    F
1 氏名 役職 部署 年齢 移動時期 
2 高橋 役員 人事 50  未調整


補足
・元データ(シート1)はこれからもデータを追加するので
 その度、シート2、シート3もそれぞれ自動で反映されるようにした いです。

・マクロ、VBAは知識がないので
 関数で作成したいです。

・できるだけエラー(#N/Aなど)表示されないようにしたいです。

説明が不十分で伝わりにくいかと思いますが
よろしくお願いします。

こんばんは。教えてください。

元データ(sheet1)を更新するたび
2つの条件にあったデータを
別シートに自動的に抽出したいので
適した関数がありましたら教えてください。



◇シート1◇ ※元データ
 A      B     C     D     F
1 氏名 役職 部署 年齢 移動時期     
2 山田 社員 開発 45  未調整
3 田中 社員 人事 42  4/1~
4 鈴木 派遣 企画 30  
5 高橋 役員 人事 50  未調整
6 坂野 社員 企画 33  未調整  
7 ...続きを読む

Aベストアンサー

> 部署を"人事"と"企画"の両方で抽出する条件を追加する

おはようございます、merlionXXです。
Operator:=xlOr, Criteria2:="=企画" と、OR条件で"企画"を加えれば可能です。
一応、各コードの動きに解説もつけておきました。(解説は’でコメントアウトしてますのでこのまま貼り付けてもOKです。)

Private Sub Worksheet_Activate() 'このシートがアクティブになったら自動実行
With Sheets("Sheet1") 'Sheet1対して
.AutoFilterMode = False 'オートフィルタ終了(あればエラーになるため)
.Range("A1:E1").AutoFilter 'A1:E1にオートフィルタ設定
.Range("A1:E1").AutoFilter Field:=3, Criteria1:="=人事", Operator:=xlOr, Criteria2:="=企画" '左から3つ目のフィルタを"人事"と"企画"のOR条件で抽出
.Range("A1:E1").AutoFilter Field:=5, Criteria1:="未調整" '左から5つ目のフィルタを"未調整"で抽出
.Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") 'A1から最終セル範囲の可視セルをこのシートのA1以降に貼り付け
.AutoFilterMode = False 'オートフィルタ終了
End With 'Sheet1に対する記述おわり
End Sub

> 部署を"人事"と"企画"の両方で抽出する条件を追加する

おはようございます、merlionXXです。
Operator:=xlOr, Criteria2:="=企画" と、OR条件で"企画"を加えれば可能です。
一応、各コードの動きに解説もつけておきました。(解説は’でコメントアウトしてますのでこのまま貼り付けてもOKです。)

Private Sub Worksheet_Activate() 'このシートがアクティブになったら自動実行
With Sheets("Sheet1") 'Sheet1対して
.AutoFilterMode = False 'オートフィルタ終了(あればエラーになるた...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q【エクセル】表から条件に合ったデータを別シートに順番に抽出したい

エクセルの表である条件にあてはまる行を
別シートに順番に抽出されるような関数を教えてください。


シート1のB列にあるデータが"渋谷区"のとき
シート2のE74からE80くらいまでに
シート1のC列のデータを上から順に抽出されるようにしたいです。

【シート1】
A        B         C
1 東京都 渋谷区  PC
2東京都  港区  PC
3東京都 新宿区  マウス
4東京都 渋谷区  ペン
5東京都 渋谷区  モニタ



10

【シート2】

E
74 PC
75 ペン
76 モニタ



80 


【補足】
元の表(シート1)を編集することがあるので
自動的に反映されるよう、関数で作成できたらと思います。
シート2の構成上、抽出後のソートや、フィルタオプションは避けたいです。

わかりづらい文章で申し訳ございませんが
どなたかいいアドバイスがありましたら教えてください。
お礼は明日になってしまいますが、必ずご返答いたします。
よろしくお願いいたします。

 

エクセルの表である条件にあてはまる行を
別シートに順番に抽出されるような関数を教えてください。


シート1のB列にあるデータが"渋谷区"のとき
シート2のE74からE80くらいまでに
シート1のC列のデータを上から順に抽出されるようにしたいです。

【シート1】
A        B         C
1 東京都 渋谷区  PC
2東京都  港区  PC
3東京都 新宿区  マウス
4東京都 渋谷区  ペン
5東京都 渋谷区  モニタ



10

【シート2】

E
...続きを読む

Aベストアンサー

>E74に関数を入力し、その後関数をE80までドラッグすればよいのでしょうか?
いいえ。
1.
=INDEX(シート1!C1:C11,SMALL(IF(シート1!B1:B10="渋谷区",ROW(A1:A10),11),ROW(A1:A10)))&""
の数式を掲示板上でコピーします(シート名は合わせてください)
2. E74:E80セル範囲を選択します
3. 数式バーで[Ctrl]+[V]貼り付け
4. [Ctrl]+[Shift] +[Enter] でセルへの入力を確定させます

>その際、絶対参照や相対参照は必要でしょうか?
セルのコピーはしませんので不要です。
参考まで

Q指定した期間内での数値を合計する関数。

関数について教えて下さい。

SUMIF関数で条件に合うセル内の数値を合計するのは出来るのですが
その条件に更に条件を加えたいのですがやり方がわかりません。

下記の画像でD28セルに8/1~8/3までの間の海山商事さんの個数を
合計して表示させるにはどんな関数が入るでしょうか?

SUMIF関数で全期間の海山商事さんの個数を合計する事はできますが
期間を指定する関数がどうしてもわかりません。

初歩的な質問かもしれませんがよろしくお願いします。

Aベストアンサー

こんにちは。

8/3までの個数から8/1以前の個数を引けば8/1~8/3までの個数になります。

=SUMIF(B5:B20,"<=8/3",F5:F20")-SUMIF(B5:B20,"<8/1",F5:F20")

今回は8/1から始まっていて以前がないので、8/3までの個数を求めればSれが答えになります。

Qエクセルで条件に合うものを別シートに抽出(関数)

希望日    りんご   ばなな   みかん   担当   配達チェック
6月1日      2             1     山田
6月3日             4      2     佐藤      
6月1日      3                   山田      済
6月2日             1            佐藤 
6月2日                    2     山田

というデータがsheet1に入力されています。
<条件>
 ・担当 山田のもの
 ・6月2日以前(このデータでは1日と2日)
 ・配達チェックが済でないもの(空白です)

この条件を満たすものをsheet2に抽出したいのです。
希望日    りんご   ばなな   みかん   担当   配達チェック
6月1日      2              1     山田
6月2日                    2     山田
とsheet2に表示させるには関数でできますか?
できれば、セル参照でA1セルに6月2日、B1に山田と入力すると抽出されるととても便利なのですが・・・。
皆様のお知恵を拝借させてください!!

希望日    りんご   ばなな   みかん   担当   配達チェック
6月1日      2             1     山田
6月3日             4      2     佐藤      
6月1日      3                   山田      済
6月2日             1            佐藤 
6月2日                    2     山田

というデータがsheet1に入力されています。
<条件>
 ・担当 山田の...続きを読む

Aベストアンサー

こんばんは!
一例です。

↓の画像でSheet1に作業用の列を設けています。
作業列G2セルに
=IF(COUNTBLANK(Sheet2!$A$1:$B$1),"",IF(AND(A2<=Sheet2!$A$1,E2=Sheet2!$B$1,F2=""),ROW(),""))
という数式を入れオートフィルでずぃ~~~!っと下へコピーしておきます。

そしてSheet2のA4セルに
=IF(COUNT(Sheet1!$G:$G)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$G:$G,ROW(A1))))
という数式を入れ列方向と行方向にオートフィルでコピー!

A列の表示形式は「日付」にしておきます。
ただ、このままではSheet1に空白セルがあれば「0」が表示されてしまいますので、
当方使用のExcel2003の場合ですが、
メニュー → ツール → オプション → 「表示」タブ → 「ゼロ値」のチェックを外すと
画像のような感じになります。

以上、参考になれば良いのですが・・・m(__)m


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング