• 締切済み

Excelで範囲検索

今EXCELにこのような表があります。 名前 点数 日付け   A  20  200702  B  10  200701  C  30  200612   :  :  : セルA1に200001 セルA2に200712 と値を入れると日付けがその間(200001~200712)にある行だけを表示するようにしたいです。 VLOOKUP関数だと日付けが一つしか取れないですし、列も1つしか表示させることができません。

みんなの回答

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.14

こんにちは。補足拝見しました。 > 始期(左)→C5終期(右)→C6 > 始期(左)→E5終期(右)→E6 とありますが、始期(左)と終期(右)しかありません。 始期(左)→C5 終期(左)→C6 始期(右)→E5 終期(右)→E6 ですよね。 シートのマクロを修正したので、差し替えていただけますか?  Const DataStartRow As Integer = 10 'データが始まる列 というのを追加して、データが始まる行を変更できるようにしました。 Private Sub CommandButton1_Click()  Dim i As Integer  Const DataStartCol As String = "P" 'データが始まる列  Const DataStartRow As Integer = 10 'データが始まる行  Const ScoreNum As Integer = 6 '抽出する点数の数  ScoreCol(1) = "BO" '左側の点数の列  DateCol(1) = "BK" '左側の年月の列  ScoreCol(2) = "BU" '右側の点数の列  DateCol(2) = "BM" '右側の年月の列  SDate(1) = Range("C5").Value '始期(左)の値  EDate(1) = Range("C6").Value '終期(左)の値  SDate(2) = Range("E5").Value '始期(右)の値  EDate(2) = Range("E6").Value '終期(右)の値  PickOutCol(1) = "B" '抽出する左側の列  PickOutCol(2) = "I" '抽出する右側の列  Application.ScreenUpdating = False    '抽出先をクリア  Range(Cells(DataStartRow, PickOutCol(1)), _  Cells(Rows.Count, PickOutCol(2)).Offset(, ScoreNum)).ClearContents  '抽出  For WorkRow = DataStartRow To Cells(Rows.Count, DataStartCol).End(xlUp).Row   For i = 1 To 2    If IsInclude(1, i) Then     If IsInclude(2, i) Then      DataCopy DateMaxN(), i, ScoreNum     Else      DataCopy 1, i, ScoreNum     End If    ElseIf IsInclude(2, i) Then     DataCopy 2, i, ScoreNum    End If   Next  Next  Application.ScreenUpdating = True End Sub Private Sub CommandButton2_Click()  Range("A10", Cells(Rows.Count, "O")).ClearContents End Sub

TRIPLE-G
質問者

補足

>始期(左)→C5 終期(左)→C6 >始期(右)→E5 終期(右)→E6 >ですよね。 そうです間違えていました。 ありがとうございます。 今回は表示する列が多いので検証に時間がかかりそうです。 どうもありがとうございます。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.13

日付が先で、点数が続くのですね。 先に回答したマクロのうち、最後のマクロだけを以下に置きかえてみてください。 Sub DataCopy(FromN As Integer, ToN As Integer, Optional CopyNum As Integer)  If CopyNum = 0 Then CopyNum = 1  Cells(WorkRow, PickOutCol(ToN)).Offset(0, 1).Resize(1, CopyNum).Value = _  Cells(WorkRow, ScoreCol(FromN)).Resize(1, CopyNum).Value  Cells(WorkRow, PickOutCol(ToN)) = Cells(WorkRow, DateCol(FromN)) End Sub

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.12

一応、マクロを修正してみました。試してみてください。 <シートのマクロ> Private Sub CommandButton1_Click()  Dim i As Integer  Const DataStartCol As String = "P" 'データが始まる列  Const ScoreNum As Integer = 6 '抽出する点数の数  ScoreCol(1) = "Bo" '左側の点数の列  DateCol(1) = "BK" '左側の年月の列  ScoreCol(2) = "BU" '右側の点数の列  DateCol(2) = "BM" '右側の年月の列  SDate(1) = Range("B1").Value '始期(左)の値  EDate(1) = Range("B2").Value '終期(左)の値  SDate(2) = Range("D1").Value '始期(右)の値  EDate(2) = Range("D2").Value '終期(右)の値  PickOutCol(1) = "B" '抽出する左側の列  PickOutCol(2) = "I" '抽出する右側の列  Application.ScreenUpdating = False    '抽出先をクリア  Range(Cells(4, PickOutCol(1)), _  Cells(Rows.Count, PickOutCol(2)).Offset(, ScoreNum)).ClearContents  '抽出  For WorkRow = 4 To Cells(Rows.Count, DataStartCol).End(xlUp).Row   For i = 1 To 2    If IsInclude(1, i) Then     If IsInclude(2, i) Then      DataCopy DateMaxN(), i, ScoreNum     Else      DataCopy 1, i, ScoreNum     End If    ElseIf IsInclude(2, i) Then     DataCopy 2, i, ScoreNum    End If   Next  Next  Application.ScreenUpdating = True End Sub Private Sub CommandButton2_Click()  Range("A4", Cells(Rows.Count, "O")).ClearContents End Sub <標準モジュールのマクロ> (このプロシージャ以外は変更不要です) Sub DataCopy(FromN As Integer, ToN As Integer, Optional CopyNum As Integer)  If CopyNum = 0 Then CopyNum = 1  Cells(WorkRow, PickOutCol(ToN)).Resize(1, CopyNum).Value = _  Cells(WorkRow, ScoreCol(FromN)).Resize(1, CopyNum).Value  Cells(WorkRow, PickOutCol(ToN)).Offset(0, CopyNum).Value = _  Cells(WorkRow, DateCol(FromN)) End Sub

TRIPLE-G
質問者

補足

何度もすみません。 変更点をお願いしてよろしいでしょうか? 始期(左)→C5終期(右)→C6 始期(左)→E5終期(右)→E6 抽出データの表示する先頭セルがB10です。 ham_kamoさんに教えていただいた以前のマクロをExcelのレイアウト変更したのでマクロも変更して正常に動いてたのですが、今回いただいたマクロもレイアウトにそうように変更したのですが、上手くいきませんでした。 すみませんがお願いします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.11

こんにちは、ham_kamoです。 > 以前ですとB点数、C日付、D点数、E日付と4列に抽出していましたが > 抽出データをBからOに表示するので4列から14列になります。 えと、自分のマクロではA~Dになっています。おかしいな。 それはいいとして、日付が始期~終期の間であるという条件は以前と同じで、条件が一致すると、 B,C,D,E,F,G → 科目別点数を表示 H → 日付を表示 I,J,K,L,M,N → 科目別点数を表示 O → 日付を表示 と抽出される、ということでよろしいですか?

TRIPLE-G
質問者

補足

早速ありがとうございます。 >B,C,D,E,F,G → 科目別点数を表示 >H → 日付を表示 >I,J,K,L,M,N → 科目別点数を表示 >O → 日付を表示 B → 日付を表示 C,D,E,F,G,H → 科目別点数を表示 I → 日付を表示 J,K,L,M,N,O → 科目別点数を表示 上記のように変更していただけないでしょうか?

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.10

こんにちは、ham_kamoです。メールが来るように指定していたので気づきました。列名の指定のところでもタイプミスをしていたようで失礼しました。自分でやっているときは、FとかGとかの列でテストして、アップするときに列名を書き換えたので、そのときにミスったようです。気がついてくれてよかったです。 それで、右側の数字が左側の範囲に入っているときに抽出されない不具合を修正しました。 元のマクロの  '抽出  For WorkRow = 4 To Cells(Rows.Count, DataStartCol).End(xlUp).Row   If IsInclude(1, 1) Then    If IsInclude(2, 1) Then     DataCopy DateMaxN(), 1    Else     DataCopy 1, 1    End If   End If   If IsInclude(2, 2) Then    If IsInclude(1, 2) Then     DataCopy DateMaxN(), 2    Else     DataCopy 2, 2    End If   End If  Next となっている部分を、以下に置きかえていただけますか? (ちょっと難しく考えすぎて、かえって複雑なことをやってしまっていました)  '抽出  For WorkRow = 4 To Cells(Rows.Count, DataStartCol).End(xlUp).Row   For i = 1 To 2    If IsInclude(1, i) Then     If IsInclude(2, i) Then      DataCopy DateMaxN(), i     Else      DataCopy 1, i     End If    ElseIf IsInclude(2, i) Then     DataCopy 2, i    End If   Next  Next また不具合が出るかもしれないので、当分この質問は締め切らない方がいいかもしれませんね。この回答も補足欄かお礼欄のどちらかを残しておいた方がいいでしょう。補足やお礼が投稿されたときにメールを来る設定にしているのでこちらも気がつくと思います。 (質問者が追加で補足したいときに、お礼欄と補足欄を使い切っているとどうしようもない、というシステムはいまいちだな~と思っていたりします)

TRIPLE-G
質問者

お礼

助かりました!! なんとお礼を言えばいいのでしょう。本当にありがとうございます。 ham_kamoさんのおっしゃる通り補足が1度だけというシステムはいまいちだと思います。 またなにかあるかわからないので、締め切らないで補足欄はしばらく残しておきたいと思います。 本当にありがとうございます。 ham_kamoさんからの回答を楽しみにしていたので寂しくなります。 また質問しているときはどうぞよろしくお願いします。 就職活動中(プロフィールを拝見させていただきました)とのことですが、ようやく精神障害(うつ病など)が社会的に認知され始めだされ、就労となるとまだまだ整備段階中であると思います。 求職者だけががんばるのではなくもっと福祉、行政、企業が連携を深め、努力する必要があるみたいですね。 誤解を招いたらすみません。

TRIPLE-G
質問者

補足

すみません。またご教授願いたいです。 2つ変更点があります。 1.表の変更 2.抽出データの増加 以前ですとB点数、C日付、D点数、E日付と4列に抽出していましたが抽出データをBからOに表示するので4列から14列になります。 この時点で以前AZにあった点数列はBJになります。 今回はBOからBZまでデータが増えました。 以前ですと検索内の日付と点数を表示していましたが。今回は点数の変わりに、追加分のデータを表示したいです。 BJが点数BKが日付BLが点数BMが日付となっておりBJ列の点数を表示する変わりにBOからBTを表示、BLの変わりにBUからBZを表示したいです。 以前の点数が合計とすると今回は科目別の点数を表示するといったところでしょうか。 ご理解いただけるでしょうか?

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.9

こんにちは、ham_kamoです。補足拝見しました。 抽出条件において、まだ確認しておきたいことがあるので、補足をお願いできますか? ――――追加の4列――――  始期 200601 始期 200702 終期 200701 終期 200703  ――――――表―――――――― 点数 日付け 点数 日付け 名前…点数 日付け 名前 日付け 20  200701           A … 20  200602 20  200701 10  200601 20  200702  B … 10  200601 20  200702 30  200602 10  200703  C … 30  200602 10  200702                     :   :    :   :    : (1)上記の場合、それぞれの始期~終期の範囲が重なることはあるのでしょうか。あった場合、正規表の日付が両方の範囲に含まれる可能性があります。その場合はどう抽出したらよいでしょうか。 (2)補足によると、 ----------------------- 名前「A」の抽出はどうなっているかと言いますと範囲内で新しい日付けの方だけを表示しています。 この場合ですと20  200602 20  200701の両方が左の検索範囲に含まれていますが直近の20  200701の方を表示させたいです。 ----------------------- とのことですが、両方が右の検索範囲に含まれている場合、それも直近のデータを表示させたい、ということでしょうか。その場合はAB列でなくCD列に表示させるのでしょうか。 (3)右側のデータだけが抽出された場合、AB列は空きでCD列にデータを抽出すればよいでしょうか。 とりあえず、 (1)→抽出範囲が重なることはない (2)→両方が右の検索範囲に含まれている場合は、直近のデータをC,D列に表示 (3)→右の検索条件だけに該当する場合は、C,D列に抽出 というようにマクロを組んでみました。ちょっとややこしくなったので、ユーザ定義関数を使ってます。 Alt+F11でVBAの画面を開き、「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。 Public ScoreCol(2) As String, DateCol(2) As String Public SDate(2) As Long, EDate(2) As Long Public PickOutCol(2) As String Public WorkRow As Integer Function IsInclude(N1 As Integer, N2 As Integer) As Boolean  'N1 表の中の日付番号(左=1、右=2)  'N2 抽出条件の番号(左=1、右=2)  If Cells(WorkRow, DateCol(N1)).Value >= SDate(N2) And _   Cells(WorkRow, DateCol(N1)).Value <= EDate(N2) Then   IsInclude = True  Else   IsInclude = False  End If End Function Function DateMaxN() As Integer  If Cells(WorkRow, DateCol(1)).Value > Cells(WorkRow, DateCol(2)).Value Then   DateMaxN = 1  Else   DateMaxN = 2  End If End Function Sub DataCopy(FromN As Integer, ToN As Integer)  Cells(WorkRow, PickOutCol(ToN)).Value = Cells(WorkRow, ScoreCol(FromN))  Cells(WorkRow, PickOutCol(ToN)).Offset(0, 1).Value = Cells(WorkRow, DateCol(FromN)) End Sub そして、ボタンの動作を記録しているマクロ(VBAの画面で左のシート名をダブルクリックで出てきます)の既存のマクロを、以下の内容と差し替えてください。 Private Sub CommandButton1_Click()  Dim i As Integer  Const DataStartCol As String = "E" 'データが始まる列  ScoreCol(1) = "AY" '左側の点数の列  DateCol(1) = "AZ" '左側の年月の列  ScoreCol(2) = "BA '右側の点数の列  DateCol(2) = "BB" '右側の年月の列  SDate(1) = Range("B1").Value '始期(左)の値  EDate(1) = Range("B2").Value '終期(左)の値  SDate(2) = Range("D1").Value '始期(右)の値  EDate(2) = Range("D2").Value '終期(右)の値  PickOutCol(1) = "A" '抽出する左側の列  PickOutCol(2) = "C" '抽出する左側の先頭セル  Application.ScreenUpdating = False    '抽出先をクリア  Range("A4", Cells(Rows.Count, "D")).ClearContents  '抽出  For WorkRow = 4 To Cells(Rows.Count, DataStartCol).End(xlUp).Row   If IsInclude(1, 1) Then    If IsInclude(2, 1) Then     DataCopy DateMaxN(), 1    Else     DataCopy 1, 1    End If   End If   If IsInclude(2, 2) Then    If IsInclude(1, 2) Then     DataCopy DateMaxN(), 2    Else     DataCopy 2, 2    End If   End If  Next     Application.ScreenUpdating = True End Sub まだ希望の動作と異なる場合は、補足をお願いします。

TRIPLE-G
質問者

お礼

原因わかりました!! ScoreCol(2) = "BA '右側の点数の列 を ScoreCol(2) = "BA" '右側の点数の列 にすれば正常に動作してくれました。 本当に長い間ありがとうございました。 いただいたマクロを自分なりに分析して勉強したいと思います。 本当にありがとうございます。

TRIPLE-G
質問者

補足

ありがとうございます。 実行時エラー13 「型が一致しません」と出ます。 デバッグをクリックしてみると Sub DataCopy(FromN As Integer, ToN As Integer) 『Cells(WorkRow, PickOutCol(ToN)).Value = Cells(WorkRow, ScoreCol(FromN))』 Cells(WorkRow, PickOutCol(ToN)).Offset(0, 1).Value = Cells(WorkRow, DateCol(FromN)) End Sub 2重鍵括弧の部分が黄色で表示されています。 原因分かりますでしょうか? お願いします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.8

ham_kamoです。 ようやくわかりました。抽出先と表の左右それぞれの列が対応するのですね。 とりあえず CommandButton1_Click() を以下の内容に差し替えてください。 Private Sub CommandButton1_Click()  Dim ScoreCol(2) As String, DateCol(2) As String  Dim SDate(2) As Long, EDate(2) As Long  Dim PickOutCell(2) As Range  Dim i As Integer, WorkRow As Integer  ScoreCol(1) = "AY" '左側の点数の列  DateCol(1) = "AZ" '左側の年月の列  ScoreCol(2) = "BA" '右側の点数の列  DateCol(2) = "BB" '右側の年月の列  SDate(1) = Range("B1").Value '始期(左)の値  EDate(1) = Range("B2").Value '終期(左)の値  SDate(2) = Range("D1").Value '始期(右)の値  EDate(2) = Range("D2").Value '終期(右)の値  Set PickOutCell(1) = Range("A4") '抽出する左側の先頭セル  Set PickOutCell(2) = Range("C4") '抽出する左側の先頭セル  Application.ScreenUpdating = False  '抽出先をクリア  Range("A4", Cells(Rows.Count, "D")).ClearContents  '抽出  For i = 1 To 2   For WorkRow = 4 To Cells(Rows.Count, DateCol(i)).End(xlUp).Row    If Cells(WorkRow, DateCol(i)) >= SDate(i) And _     Cells(WorkRow, DateCol(i)) <= EDate(i) Then     PickOutCell(i).Value = Cells(WorkRow, ScoreCol(i)).Value     PickOutCell(i).Offset(0, 1).Value = Cells(WorkRow, DateCol(i)).Value     Set PickOutCell(i) = PickOutCell(i).Offset(1, 0)    End If   Next  Next    '並べ替え  Range("A3", Cells(Rows.Count, "B").End(xlUp)).Sort _   Key1:=Range("B4"), Key2:=Range("A4"), Header:=xlYes  Range("C3", Cells(Rows.Count, "D").End(xlUp)).Sort _   Key1:=Range("D4"), Key2:=Range("C4"), Header:=xlYes  Application.ScreenUpdating = True End Sub それから、抽出したデータの欄をクリアするボタンを作りたい場合は、No.4で書いた手順でボタンを作るか、抽出でボタンをコピーしてボタンをもう一つ作り、Captionプロパティに「クリア」と書いてダブルクリックし、以下のマクロを貼り付けてください。 Private Sub CommandButton2_Click()  Range("A4", Cells(Rows.Count, "D")).ClearContents End Sub うまく動かない、あるいは私の方で認識がずれているところがあれば補足をお願いします。

TRIPLE-G
質問者

お礼

気づいていただけたら幸いです。 もう1度補足させていただきたいです。 ――――追加の4列――――  始期 200601 始期 200702 終期 200701 終期 200703  ――――――表―――――――― 点数 日付け 点数 日付け 名前…点数 日付け 名前 日付け 20  200701           A … 20  200602 20  200701 10  200601 20  200702  B … 10  200601 20  200702 30  (200602) 10         C… 30  200502 10  200602                     :   :    :   :    : 括弧の日付けが表示されません。 表示できるようお願いできないでしょうか??

TRIPLE-G
質問者

補足

ありがとうございます。動作しました。 用途を現場に聞いてなくて抽出することだけに気を取られていました。 申し訳ございませんが、もう1度補足させていただいてよろしいでしょうか。 ――――追加の4列――――  始期 200601 始期 200702 終期 200701 終期 200703  ――――――表―――――――― 点数 日付け 点数 日付け 名前…点数 日付け 名前 日付け 20  200701           A … 20  200602 20  200701 10  200601 20  200702  B … 10  200601 20  200702 30  200602 10  200703  C … 30  200602 10  200702                     :   :    :   :    : このようにデータと同じ行に抽出させたいです。 名前「A」の抽出はどうなっているかと言いますと範囲内で新しい日付けの方だけを表示しています。 この場合ですと20  200602 20  200701の両方が左の検索範囲に含まれていますが直近の20  200701の方を表示させたいです。 該当する日付けがなければ空白をいれたいです。 何度も追加追加で申し訳ないですが、お願いできますでしょうか。

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

例データ 条件を入れるセルをFROMをA1とTOをB1に改めました。 A1:C14に 2007/2/23 2007/3/1 a 10 2007/2/21 s 20 2007/2/22 d 30 2007/2/23 f 10 2007/2/24 g 20 2007/2/25 h 30 2007/2/26 a 40 2007/2/27 s 20 2007/2/28 d 30 2007/3/1 d 20 2007/3/2 f 30 2007/3/3 g 40 2007/3/4 d 10 2007/3/5 どこでも良いが目立たない列に(今回はJ列とする) =IF(AND(C2>=$A$1,C2<=$B$1),MAX($J$1:J1)+1,"") 式を下方向に複写する。 J4から 1 2 3 4 5 6 7 E2に =IF(ROW()-1<=MAX($J$2:$J$20),OFFSET($A$2,MATCH(ROW()-1,$J$2:$J$20,0)-1,COLUMN()-5),"") と入れて下方向に20まで複写 E2:E20を範囲指定して、G2:G20まで+ハンドルで式を複写。 見た目はE2:G8に d 30 2007/2/23 f 10 2007/2/24 g 20 2007/2/25 h 30 2007/2/26 a 40 2007/2/27 s 20 2007/2/28 d 30 2007/3/1 のようになります。 imogasi方式。 J列は非表示にするとかもあります。 上の例は日付順であり、同じ日分2行なしですが、そうでなくてもOKです。G列は日付書式にすること。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.6

すみませんが、もう少し補足していただけますか?表全体がどうなっているかこちらにはわかりませんので。 まず、 > A1に「始期」A2に「終期」で日付けをB1、B2とD1、D2に入力したいです。 ですが、検索範囲となる日付が2組出てきました。これは前回まで出てこなかったのですが、この2組の日付はどう扱うのでしょうか? 1.表のそれぞれの日付がどちらかの検索範囲内であればその日付と点数を抽出(検索条件:OR、抽出データ:OR) 2.表のそれぞれの日付が両方の検索範囲内であればその日付と点数を抽出(検索条件:AND、抽出データ:OR) 3.表の左右両方の日付がどちらかの検索範囲内であれば、両方の日付と点数を抽出(検索条件:OR、抽出データ:AND) 4.表の左右両方の日付が両方の検索範囲内であれば、両方の日付と点数を抽出(検索条件:AND、抽出データ:AND) といくつもパターンがあるのですが、どのように抽出すればよろしいでしょうか。 > 正規表に関連付けたいです。 すみませんが、これもよくわかりません。「正規表に関連づける」とは具体的にどういうことなのでしょうか。 > 欲を言うと二つほしいです。A,B列とC,D列の二つです。 これもまた新しい情報ですね。2組の列にはどう抽出しわけるのでしょうか。 1.単純に上から左→右、次の行に移って左→右、と2列ずつ使ってデータを並べていく 2.表の左側の点数、日付から抽出したデータはAB列、右側の点数、日付から抽出したデータはCD列 3.それ以外(の場合は具体的に) これらの情報がないと、どういう条件でどういう形で抽出したらいいかわかりません。少しややこしくなりそうなので、オートフィルタは使わずに、マクロ内で日付を全部なめていって抽出範囲内のデータを抽出するようにしようと思いますが、よくあるパターンなので、上記の抽出条件、抽出方法に関する情報をできるだけ具体的に補足していただければ、すぐにでも作れるかと思います。

TRIPLE-G
質問者

お礼

気づいていただけたらNo8のお礼欄を見てください。 お願いいたします。

TRIPLE-G
質問者

補足

何度もすみません。 >検索範囲となる日付が2組出てきました。これは前回まで出てこなかったのですが、この2組の日付はどう扱うのでしょうか? >2組の列にはどう抽出しわけるのでしょうか それぞれの検索範囲を抽出したいです。 B1,B2の抽出範囲のデータをA4に点数、B4に日付。 D1,D2の抽出範囲のデータをC4に点数、D4に日付。それぞれ検索範囲は表の左右両方の日付です。 ham_kamoさんの言葉をかりるのであれば、表のそれぞれの日付がそれぞれの検索範囲内であればその日付と点数を抽出ということになると思います。 >「正規表に関連づける」とは具体的にどういうことなのでしょうか。 すみませんこれは無視してください。 すみません。ご理解いただけたでしょうか?語彙力がなくて申し訳ないです。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.5

No.4です。補足拝見しました。 まず、私が書いたマクロは、マクロ内でオートフィルタをかけているだけです。したがって、他のセル範囲に抽出には、オートフィルタで抽出したデータを抽出先のセル範囲にコピーし、さらにもう1つの日付でオートフィルタをかけて抽出→コピー、ということをしなければなりません。 つまり、大幅にマクロを書き直す必要があります。多少お時間をいただければ作ってみますが、いろいろと補足していただきたいことがあります。 ・補足欄の例を見ると、抽出した結果を「日付」を第1キー、「点数」を第2キーとして並び替えているように見えるが、そのように並び替えるのか ・表の左側に4列挿入、とあるが実際に抽出したデータを表示するのはどの列なのか。A、B列なのか、B、C列なのか。 ・補足欄では、範囲指定する日付を 始期200612 終期200701 とあるが、「始期」「終期」という文字がA1,A2の日付の前につくのか。それとも「始期」「終期」はA1,A2に入っていて、200612,200701はB1,B2に入っているのか。 ・表のレイアウトは、 名前 点数 日付け 点数 日付け  A  20  200602 20  200701  B  10  200601 20  200702  C  30  200612 10  200701 で間違いないのか。(他の項目の列が実は間にあるけど省略している、ということはないか) ・上記の表の左上のセル番地は?仮にE4とすると、データは5行目から始まり、日付の列はG列とI列ということになるが、それでよいのか。 以上、補足をお願いします。 あと、別のセル範囲に抽出するのであれば「全表示」ボタンは不要ですね。

TRIPLE-G
質問者

補足

度々すみません。 >・補足欄の例を見ると、抽出した結果を「日付」を第1キー、「点数」を第2キーとして並び替えているように見えるが、そのように並び替えるのか 正規表に関連付けたいです。 >・表の左側に4列挿入、とあるが実際に抽出したデータを表示するのはどの列なのか。A、B列なのか、B、C列なのか。 欲を言うと二つほしいです。A,B列とC,D列の二つです。 >・補足欄では、範囲指定する日付を… A1に「始期」A2に「終期」で日付けをB1、B2とD1、D2に入力したいです。 ・表のレイアウトは、… 実はご察しの通り省略しています。点数がAY、日付けがAZ、点数がBA、日付けがBBです。3行目が列タイトルで4行目からデータが入ってます。 ですので左上のセル表番地はE3です。 つたない説明でご理解いただけたでしょうか、どうぞよろしくお願いいたします。

関連するQ&A

  • エクセルの関数について

    Windows Xp エクセル2003を使用しています。 業務で使用している集計表ファイルがあり、別ファイルにデータを反映させたいのです。 集計表のセルA1を検索値としセルB1とセルB2の値を返す関数はないでしょうか? 集計表のつくりは約1000行あり、セルA3を検索値としてセルB3の値を返す行もあります。 セルA5を検索値とし、B5、B6、B7、C5,C6の値を返す行など様々です。 こういったデータがランダムで表になっています。一つの検索値に対して、検索値の水平方向はvlookup関数で表示出来たのですが、 一つの検索値で2つの値を返す関数が分からず、困っています。 1行下や2行下を検索する関数も参考にしたのですが、集計表のつくりがランダムの為、検索してほしくないものまで表示されてしまうなど、ウマクできませんでした。 宜しくお願いします。

  • エクセル関数について

    エクセルの関数について質問です。 例えば、 C1セルには、数値データが入っています。 A2~A10セルに日付データ。 B2~B10セルに数値データが入っている表があります。 B11セルの値に、(C1データ)-(A列の最新日付セルと同行のB列データ)を表示させたい場合、 どのような関数を作成すればよいですか。 宜しくお願いします。

  • Excel 表と参照して一致したら行の最左を表示

    エクセルについて教えてください。 A 01 02 03 04 05 B 06 07 08 09 10 C 11 12 13 14 15 のような表と、セルの値を照合して、元の値が 03ならA 10ならB 11ならC と表示させたいのです。 縦2列の表に作り変えればVLOOKUP関数でできるとおもいますが、このままの形でやりたいのです。方法をご存知でしたら教えてください。

  • エクセルでHLOOKUP関数の選択範囲について

    エクセルでHLOOKUP関数を使って、検索したいのですが、 シートは、一覧表のシートと データが入っているA101、B203、C305、...シートは300シートくらいあります。 一覧表のシートには、下のような表になっていて、      A列  B列  C列  D列 ...          1003、1004、1005、1006、... 2行目 A101  3行目 B203 4行目 C305       .       .       . データのはいっているシート、A101は下の表になっています。      B列 C列 D列、・・・、Z列 2行目 1004、1005、1006、... 3行目 100、 200、 150、... 一覧表のB列の2行目には HLOOKUP(B2、シートA2のB2:Z3、2行目、FALSE) という感じで、シート名をセルA2のものを参照にして 探して表示させ、B列、C列、D列の2行目から下の行も 表示させたいのですが、うめくできませんでした。 INDIRECT関数を使ってみましたが、セル範囲が無効という エラーがでてしまいます。↓こんな感じで入力してみたのですが... SUMPRODUCT((INDIRECT($A2&"!$B$2:$Z$3"))=$B$1,(INDIRECT($A2&"!$B$2:$Z$3"))) 1つづつデータを見て手打ちはデータが多く、 どんどんデータが増えていくので できれば関数を使って表示させたいと思っています。 詳しい方いらっしゃいましたら、どうか教えてください よろしくお願いします。

  • エクセルVLOOKUPで列毎に並び替えたい

    お世話になります。 今、エクセルのA列に200個のそれぞれ異なる値(8個の英数字で構成された値)が入っているとし(A1~A200)、一方、C1セルを起点に300行×80列のセルそれぞれに計24000個の値が入っているとします。また、C1~C300のセルにはA列と同じ値が含まれていて、300個はそれぞれが異なる値とします。 ここで、300行x80列の表を、A列の右隣りに、A列の値と同じ値を持つC列セルを含む行が並ぶように表の行を並べ替えたいのです。 (1行1行の内容は変えずに、1行全体を上下に移動させる。どこに移動させるかは、C列の値と同じ値を持つA列セルの行に移動させる。) A列の値を検索キーとする16000個のVLOOKUPを埋め込めば出来そうですが、1列に200個のVLOOKUPだけ埋め込めばD列移行の値はくっついて並び替わってくれる方法はないでしょうか? よろしくお願いします。

  • エクセルで範囲内の検索とカウントについて

    お世話になります。 エクセルの関数ですが、 「A1のセルに'きりん'とあったら、B1:B6範囲内で'きりん'を検索し、該当行のC列に'○'が入力されていればカウントしてC7に数を表示する」というものを組みたいのです。    A   B    C 1 きりん ぞう   ○ 2      とら 3      きりん ○ 4      へび  ○ 5      きりん 6      きりん ○ 7           2 上記のような表の時、B1~B6検索してきりんを探し、C3とC6の○だけをカウントするような事はできるでしょうか。 自分でMATCH関数やCOUNTIFを色々考えてみましたが、どうしてもうまくできませんでした。 よろしくお願いします。

  • EXCEL で検索、更新したい

    EXCEL でわからない箇所があり質問します。 前提条件 Sheet1 A列:名前 B列:年月 C列:値 データは、名前と年月で一意になるデータシートがあり マスターデータとして全データが登録されている Sheet2 A列:名前 B列:年月 C列:値 ある条件でとあるデータベースから抽出した名前と年月の一覧がある この段階で値のセルには何も入っていない やりたい事 (1)この状態でマクロを実行し、A列、B列を条件に該当する行から    C列を抽出しSheet2 にセット (2)Sheet2のC列の値を変更後、マクロの実行で    A列、B列の条件を元該当する行から、Sheet1の C列に値を更新 (3)もし、Sheet2のA列、B列の条件に該当しない行がある場合、    Sheet1に行追加しC列を格納 という事をしたいと考えています。 Sheet1 の全ての行をマクロでループさせて A列、B列をif分で比較し行を取得し、Sheet2 に張る場合、 遅くなるのであまりやりたくないと思っています Find 関数も考えたのですが、ヘルプを見る限り、条件が1つしか指定でき ないように思えるのですが、複数列の条件を指定できる Find 関数 あるいは、類似の関数とあかがあるのなら教えてください 最悪は、EXCEL ADO で、自分自身をSQLで抽出、Update、Insert を行う 事も考えていますが、 EXCELのセル内の式で、INDEX関数やDGET関数で簡単に抽出できるのに (ただ、値を変更するので式はかけないけど・・・) わざわざ、ADOでプログラムを組むのもどうなんだろうと疑問に思ってます。

  • エクセルの関数等で2つの検索値からの抽摂したい

    VLOOKUP関数等で2つの検索値から、ある表の値を結果を出すことは可能ですか? 検索値1 検索値2 結果(関数) 8:00 15:00 12000 (セルA) (セルB) (セルCより抽摂) 表 A B C 1 8:00 12:00 10000 2 8:00 15:00 12000 3 9:00 12:00 10000 ・ ・ ・ 勿論他の関数での方法でも構いません

  • VLOOKUPの検索範囲について

    エクセルの関数で質問です。 Sheet1で  A B C      1  1 1       2  1 5      3  2 1      4  2 3 というデータがありSheet2に        A B       1  1 1       2  1 2      3  2 1      4  2 2      5  3 1 というデータがあります。 Sheet1のA1、B1やA2、B2と同様の並びをした行がSheet2にあるかどうか調べたいのですが、関数がわかりません。ちなみにSheet1のCの列に関数を入力したいと思ってます。 VLOOKUPで列Aの条件を満たし、列Bの条件を満たすものと言う検索条件してもうまくいきません。 教えてください。よろしくお願いします。

  • エクセル 一番は誰?

    エクセルにて A列 氏名 B列 点数 が入った一覧表があります。 B列の点数を比較して、一番点数の多い人の名前をC1に表示したいのですが、どのようにすればよいのでしょうか? まだまだ勉強中で知っている関数も乏しく、煮詰まってしまいました・・・(--;; お手数ですが、どなたかご教授願います。

専門家に質問してみよう