エクセルのデータ抽出方法を教えてください。

Excel272閲覧xmlns="http://www.w3.org/2000/svg">250

1人が共感しています

ベストアンサー

4

4人がナイス!しています

テーブル1からクエリを作成 ・登録日のデータ型を「日付」に設定 ・登録日のデータ型を「文字列」に変更 ・「名前」でグループ化 ・列を追加「= Text.Combine([グループ][登録日], ",")」 ・「,」で上の列を分割 ・列を追加「= Number.From([登録日.2] - [登録日.1]) < 21」 ・チェック列の「TRUE」を抽出 ・いらない列を削除

画像

ThanksImg質問者からのお礼コメント

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

お礼日時:11/12 7:58

その他の回答(5件)

0

他のxlsxから対象のファイルを見に行くかたちになりますが、 データタブ→データの取得→その他の・・・→Microsoft Query という機能で、例えば以下のように書く方法もあるかも?です・・・。 (「Sheet1」という名前のシートに数万のデータがある場合) SELECT * FROM (SELECT [氏名], [電話番号], Max(登録日) AS [登録日_大], Min(登録日) AS [登録日_小], Max(登録日)-Min(登録日) AS [差分日数] FROM [Sheet1$] GROUP BY [氏名], [電話番号]) WHERE [差分日数] < 21 氏名と電話番号が同じ値の顧客をグループ化して 登録日の最大値と最小値を出し 差分の日数が「21」未満のもの に絞り込んでいます。

SELECT * FROM (SELECT [氏名], [電話番号], Max(登録日)-Min(登録日) AS [差分日数] FROM [Sheet1$] GROUP BY [氏名], [電話番号]) WHERE [差分日数] < 21 でもいいかもですけど、日付の詳細がちょっとわかりません。

0

2つのデータの登録日が3週間未満になっているということは3週間未満の意味ですが本日からの3週間未満と解釈して2つのデータの登録日が3週間未満として答えます。 A列からC列までの表で名前、電話番号、登録日が1行目に並んでいるとします。 作業列を作って対応します。 J2セルには次の式を入力します。 =IF(C2="","",IF(C2>TODAY()-21,A2&B2&"/"&COUNTIFS(A$2:A2,A2,B$2:B2,B2),"")) K2セルには次お式を入力します。 =IFERROR(IF(J2="","",IF(AND(FIND("/1",J2),COUNTIF(J:J,LEFT(J2,FIND("/",J2))&2)),MAX(J$1:J1)+1,"")),"") J2セルとK2セルを選択してから含まれるそれらの式を下方にドラッグコピーします。 お求めの表でE2セルには次の式を入力してG2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーすればよいでしょう。 =IF(ROW(A1)>MAX($K:$K)*2,"",IF(MOD(ROW(A1),2)=1,INDEX($A:$C,MATCH(INDEX($J:$J,MATCH(ROUNDUP(ROW(A1)/2,0),$K:$K,0)),$J:$J,0),COLUMN(A1)),INDEX($A:$C,MATCH(LEFT(INDEX($J:$J,MATCH(ROUNDUP(ROW(A1)/2,0),$K:$K,0)),FIND("/",INDEX($J:$J,MATCH(ROUNDUP(ROW(A1)/2,0),$K:$K,0))))&2,$J:$J,0),COLUMN(A1))))

0

どのように抽出するのか判りません。画像の様に抽出するとします。 ・日付が古いものは上にある ・登録日の差が21日以下。 ・新しい方(下)を表示。 D2: =D1+IFERROR(C2-INDEX(C:C,MATCH(A2&B2,INDEX(A$1:A1&B$1:B1,),))<21,FALSE) ワークエリアです。目障りならフォントを白、股は非表示にして下さい。 E2: =IFERROR(INDEX(A:A,MATCH(ROW()-1,$D:$D,)),"") G2までコピペ。 纏めて下へコピペ。

画像
2

データベース形式で入力されているなら、ピボットテーブル、又はそれを元にしたデータが一番便利かと思います。

2人がナイス!しています