セルを抽出する方法とは?

このQ&Aのポイント
  • 連日となっているセルを抽出する方法について教えてください。
  • A列の数字が同一の行で、C列とB列の日付が翌日になっている行を探す方法を知りたいです。
  • A列には2700種類程度の数字があり、エクセルデータは1万行程度です。マクロや関数などのヒントでも構いません。
回答を見る
  • ベストアンサー

連日となっているセルを抽出するには?

翌日の日付を抽出する方法があれば、教えていただけますでしょうか。 A列に、数字3ケタが並んでいます。 この数字が同一の行=(A1~C3)のデータの中から C列とB列の日付が翌日になっている行を探し出したいです。 下記の場合は、 C1(13/12/31)とB2(2014/1/1)が連日、翌日となっている。 C2(2014/12/31)とB3(2015/1/1)が連日、翌日となっている。 上記の場合、連日となっている「4つのセル」を全て絞り出したいです。    A  B   C 1  123  2013/1/1 2013/12/31 2  123  2014/1/1 2014/12/31 3  123  2015/1/1 2015/12/31 ―----------------- 4  456  2013/1/1 2013/12/31 5  456  2013/1/1 2013/12/31 A列の 数字は2700種類程あり、エクセルデータは1万行程度となります。 マクロや関数など、ヒントだけでも知りたいので、 分かる方教えていただけると嬉しいです。

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

  • ベストアンサー
回答No.4

No.1 さんのご回答とだいたい一緒ですが、添付図では次式を入力しています。フィルタで絞り込んで必要な行だけ抽出してください。質疑応答がある程度決着したら、ご質問を締め切る処理をしてください。 D2 =countifs(a:a,a2,c:c,b2-1) E2 =countifs(a:a,a2,b:b,c2+1) F2 =sum(d2:e2)>0 G2 =if(f2,a2,"-")

happines0915
質問者

お礼

ありがとうございます! これで、ほぼ解決しましたので クローズさせて頂きます。 本当にありがとうございました!!

その他の回答 (3)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

すべて絞り出すという意味が具体的にはどのようにしたいのかがよくわかりませんが例えば次の式をD1セルに入力してE1セルまで横にドラッグコピーしたのちに下方にもドラッグコピーすればよいでしょう。 データはシリアル値で表示されますのでセルの表示形式で日付にすればよいでしょう。該当する日付が表示されることになります。 =IF(A1="","",IF(COLUMN(A1)=1,IF(COUNTIF(INDEX($C:$C,MATCH($A1,$A:$A,0)):INDEX($C:$C,MATCH($A1,$A:$A,0)+COUNTIF($A:$A,$A1)-1),$B1-1),$B1,""),IF(COUNTIF(INDEX($B:$B,MATCH($A1,$A:$A,0)):INDEX($B:$B,MATCH($A1,$A:$A,0)+COUNTIF($A:$A,$A1)-1),$C1+1),$C1,""))) 該当するセル番地を表示させるのでしたらD1セルには次の式を入力します。 =IF(A1="","",IF(COLUMN(A1)=1,IF(COUNTIF(INDEX($C:$C,MATCH($A1,$A:$A,0)):INDEX($C:$C,MATCH($A1,$A:$A,0)+COUNTIF($A:$A,$A1)-1),$B1-1),CELL("address",$B1),""),IF(COUNTIF(INDEX($B:$B,MATCH($A1,$A:$A,0)):INDEX($B:$B,MATCH($A1,$A:$A,0)+COUNTIF($A:$A,$A1)-1),$C1+1),CELL("address",$C1),"")))

happines0915
質問者

お礼

>>KURUMITO さん ありがとうございます!! 出来ました! ちなみに分かれば教えて頂ければ幸いです。。 この式を入力後、D列に対象の日付が反映されます。 空白セル以外の行を抽出したいのです。 さらに、抽出する際、「A列の対象の数字」が知りたいです。  A    B     C         D 1 123 2013/1/1 2013/12/31 2013/12/31 2 123 2014/1/1 2014/12/31 2014/12/31 3 123 2015/1/1 2015/12/31 上記だとD列が反映されているのは「A1-A3」の「123」なので 「123」が抽出される式が知りたい・・です。 何度も次から次へと申し訳ないです。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! VBAになってしまいますが、一例です。 元データはSheet1の1行目からあり、同SheetのE列に表示するようにしてみました。 Sheet2を作業用のSheetとして使用していますので、Sheet2は全く使用していないSheetにしておいてください。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, endRow As Long, cnt As Long, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") Application.ScreenUpdating = False With wS1 .Range("D:D").ClearContents .Rows(1).Insert .Range("A1") = "ダミー" i = .Cells(Rows.Count, 1).End(xlUp).Row Range(.Cells(1, 1), .Cells(i, 1)).AdvancedFilter xlFilterInPlace, unique:=True endRow = .Cells(Rows.Count, 1).End(xlUp).Row Range(.Cells(2, 1), .Cells(endRow, 1)).Copy wS2.Range("A1") .Range("A1").AutoFilter .Range("A1").AutoFilter For k = 1 To wS2.Cells(Rows.Count, 1).End(xlUp).Row .Range("A1").AutoFilter field:=1, Criteria1:=wS2.Cells(k, 1) endRow = .Cells(Rows.Count, 1).End(xlUp).Row Range(.Cells(2, 2), .Cells(endRow, 3)).Copy wS2.Cells(1, 2) For cnt = 1 To wS2.Cells(Rows.Count, 2).End(xlUp).Row - 1 If wS2.Cells(cnt, 3) + 1 = wS2.Cells(cnt + 1, 2) Then With wS2.Cells(Rows.Count, "D").End(xlUp).Offset(1) .Value = wS2.Cells(cnt, 3) .Offset(1) = wS2.Cells(cnt + 1, 2) End With End If Next cnt wS2.Range("B:C").Clear Next k .AutoFilterMode = False wS2.Range("D:D").Copy .Range("E1") .Range("E:E").NumberFormatLocal = "yyyy/m/d" .Rows(1).Delete End With wS2.Cells.Clear Application.ScreenUpdating = True MsgBox "処理完了" End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

happines0915
質問者

お礼

>tom04 さん VBAとやら、無知なので全くわかりませんが 早速試してみます!! 貴重なお時間ありがとうございました!

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

ごく一般的な関数と機能でやりたい、かつ作業列を作ってかまわない、 という条件に合致するのであれば、 ご提示の例であれば、D列に   D1セル    式:=C1=B2-1   D2セル以降  式:=OR(C2=B3-1,B2=C1+1) とし、フィルタ機能でD列から「TRUE」だけを抽出してやればOKです。 もっと綺麗にやる方法もあるでしょうが、とりあえず参考まで。

happines0915
質問者

お礼

>tom04 さん マクロとか使ったことないので 怪しいですが、まずはやってみます!! ありがとうございます! >tsubuyukiさん ご確認ありがとうございます。 出来るかどうか、一度試してみたいと思います! よろしくお願いします。

関連するQ&A

  • 必要なデータを抽出したい

    必要なデータを抽出したい    A   B    C   D ・・・ 1 7/1   101   102  103 2 7/2   101   103 3 7/3   105   203 4 7/4   103   205 5 7/5   101   202 ・ ・    ・ ・ ・    ・ ・ ・    ・ Excelで上の様にA列に日付、B行列以降に数字が書かれているシートから、抽出したい数字が含まれている行を別シートに抽出するマクロはどのように書けばよろしいのでしょうか。 技術者の方、よろしくお願いします。 例えば、101が含まれているデータを抽出したら、sheet2に    A   B    C   D 1 7/1   101   102  103 2 7/2   101   103 3 7/5   101   202 となるようにしたいのです。

  • EXCEL:ゼロ以外のデータを詰めて抽出する方法

    初めて投稿します。よろしくお願いいたします。 EXCEL2000を使用しています。 オートフィルタを使わずに 関数でデータを抽出する方法で悩んでいます。 下記<データ>が存在しています。 2行目がゼロ以外のものを、 別シート<抽出>に上から詰めて抽出したいのです。 <データ>   A列 B列 C列 D列 E列 1行 1  2  3  4  5  ←日付 2行 5  3  0  2  0  ←数字 <抽出>別シート   A列 B列  1行 1  5 2行 2  3 3行 4  2   ↑  ↑   日付 ゼロ以外 関数については中級レベルだと思います。 いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。 どなたかご教授いただけないものでしょうか? よろしくお願いいたします。

  • 複数セルから特定の文字を検索して、その対象セルを抽出したい

    エクセルで関数、VBAを使用して、下記のようなDATA抽出を行ないたいのですが、どなたか、ご指導いただけないでしょうか。 たとえば、2種のシートが、各々、 <シート1>   列A   列B 行1 A1 ABCD-123 行2 B23 EFGH-456 行3 C456 あいうえお <シート2> 列A 列B 列C  列D  列E 行1 A1 A2 A3 行2 B23 C5 A4 行3 A5 B2 C456 ・・・・・・・となっている場合、 <シート2> の列D  行1 へ "A1"と入力(記載)がある場合、列Eに   ”ABCD-123”と表示(抽出)を行ないたい。 セルには、文字、数字、記号が入ります。 よろしくお願い致します。

  • アクセスでデータ抽出

    A列に数字が、B列にデータ、C列には○と×が入っています。 A列は同じ数字が複数行あることもあり、 同じ数字でも○の時と×の時があります。 A列が同じ数字であるものを1グループとすると、C列の行ががすべて○のグループだけを抽出したいのです。 A列 B列 C列    123 aa  ○ 123 ab  ○ 123 zs  ○ 325 dd  ○ 325 dg  × 500 ff  ○ (上の場合、A列が123と500の行を抽出したい) どうしたらいいでしょうか? できればプログラムではなくクエリなどの操作でお願いします。

  • Excel データの抽出について教えて下さい。

    初めて質問させて頂きます。 Excelでデータの抽出と言ったらいいでしょうか・・・ 「一定の条件に当てはまった場合に、別のセルに数字を入力する」 というような処理をしたいのですが、データ量が多くて、 どのようにやったら効率がいいのか、頭を悩ませています。 例えば・・・       A列  B列 1行目  111   A 2行目  112   B 3行目  115   C 4行目  115   C 5行目  118   D といったようなデータが1500件ほどあります。 このデータを使って、A列の中で番号が2つ(又は3つ等)あるものに、      A列   B列  C列 1行目  111   A 2行目  112   B 3行目  115   C    1 4行目  115   C    1 5行目  118   D といった感じで決まった数字を表示する方法がないでしょうか? こんな説明でご理解頂けるかどうか、心配なんですが・・・。 いい方法をご存知の方がいらっしゃいましたら、力を貸して下さい。

  • Excelのオートフィルタでデータ抽出するマクロについて

    オートフィルタで指定した期間のデータ抽出のマクロを作成しているのですが上手くいきません。 例えばA列に 10月29日 11月1日 11月3日 11月5日 と日付を入力しており、B列、C列にデータを入力していたとして D列1行目に10月31日、D列2行目に11月4日と入力し D列1行目からD列2行目までと指定したデータを抽出するマクロを教えていただけませんか。 マクロ初心者で、困っております。どうかよろしく御願いします。

  • 数字の桁ごとに、各セルに抽出

    最大11桁の数字を各セルに抽出したい。 金額をF列に入力すると、 D列には下3桁が表示され、 C列には右から6桁~4桁、 B列には右から9桁~7桁、 A列には右から11桁~10桁と、 表示されるように、関数を組みたいです。

  • 【Excel】複数の条件を設定した重複セルの抽出

    【Excel】複数の条件を設定した重複セルの抽出 例えば、A列にA社からD社のデータが行に複数個ずつ並び、B列にそのクライアントに問い合わせた日付が入力されている場合。 A社に問い合わせた日付は1/1、1/3、1/5。B社に問い合わせた日付が1/1、1/1、1/3、1/5、1/5となっているデータで、 B社の3~7行目の日付で重複している1/1と1/5の行のみを抽出する方法ってありますか? 作業自体はB社だけでなく、複数あるので、関数か何かで出来る方法があれば教えていただきたいです。

  • EXCEL20001分ごとのデータを抽出したい

    お世話になっておりますm(__)m(このごろは頻繁に(^^ゞ) タイトルどおり、1分ごとのデータを抽出したいのです。 データは次のようになっています。 A列1行目から縦に日付です。 2002/1/1 2002/1/1 2002/1/1 2002/1/1 2002/1/1 2002/1/1 上記のように同じ日付がずーっとつづいています B列1行目から縦に時間です。 0:30:04 0:30:06 0:30:08 0:30:10 0:30:12 0:30:14 0:30:16 ・ ・ ・ 上記のように2秒ごとにデータがあるのです。 ただし、C列にもその日付と時間に対応したデータがあります。 2秒ごとにデータがあるのですが、 それを1分ごとのデータを抽出したいのです。 どうにかこうにかしてできないものでしょうか? 関数とかでできるでしょうか? VBAとかはぜんぜんやったことがないので、 もしそれをつかわなければ出来ない場合は、 詳しく説明してくださればうれしいです(涙

  • エクセルVBA 日付で抽出、並び替え

    こういう場で初めて質問させていただきます。 どうぞよろしくお願いします。 エクセルVBAで日付(月毎)でデータを抽出し、並び替えを行いたいのですが, B列に日付が入りC~F列には帳簿の仕訳が入ります。 ここで B2 に日付が入って、C2~F2とC3~D3にデータが入った場合に オートフィルタをかけたら、3行目は日付の欄が空白なので うまく抽出できません。 なお、2行目と3行目は1つの仕訳なのでばらばらになるのも困ります。   仕訳は最低1行から最大で6行になります。 このように日付欄は1行だけど、その日付に対応する内容が数行に渡って入るような場合に日付から月毎にデータ抽出するには どのようなコードを書けばいいのでしょうか? A B    C      D     E    F  日付 借方科目 金額 貸方科目 金額  10/10 消耗品  300    現金   500        雑費   200   10/9   交際費  500    現金   500   10/8    雑費   200     現金   200 汚い表ですが、上記のような場合です。 10/10の分は2行で1つになりますので、このような場合です。 どうかよろしくご指導お願いします。 

専門家に質問してみよう