• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel詳しい方お願いします!!)

ExcelでIDごとの日付を一覧表にする方法

このQ&Aのポイント
  • ExcelでIDごとに日付が入った元データがあります。そのデータを元に、IDごとの日付を一覧表にしたいです。
  • 具体的には、一人一行でIDごとに日付を並べた表を作成したいです。
  • IDを元に氏名を取得するにはVLOOKUP関数を使用しましたが、日付部分にどのような関数を使用すればいいかわかりません。Excelは2000を使用しています。

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

  • ベストアンサー
noname#204879
noname#204879
回答No.6

添付図参照 F2: =INDEX(B:B,MATCH($E2,$A:$A,0)) G2: =IF(COLUMN(A1)>COUNTIF($A:$A,$E2),"",INDEX($C:$C,COLUMN(A1)+MATCH($E2,$A:$A,0)-1))

compq
質問者

お礼

おぉ!画像まで貼って頂いてなんて分かりやすい! 早速試してみたいと思います。 ありがとうございました。m(__)m

compq
質問者

補足

回答ありがとうございました。 おかげさまで簡単に思っていた通りの表を作ることができました。 ただ、COLUMN関数やINDEX関数に慣れておらず初めて使ったので、 もしよろしければNo.様、関数の意味を教えて頂けないでしょうか? まず、最初の判定の条件で何故COLUMN関数を使っているのでしょうか? そして後ろのINDEX関数は「INDEX(範囲,行位置,列位置 [,領域番号])」 となると思うのですが、今回の場合は列位置がない状態に思えます。 領域番号だけでなく、列位置も省略できるものなんでしょうか? 基本的なことかもしれませんが、もしよろしければ教えて下さい。 初心者ですみません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (9)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.10

No5 merlionXXです。 > 出来るかな…。 書いた手順どおりやってくれれば簡単にできますよ。 > でもこれってデータ内容が変わった時もそのまま使えるんでしょうか? データがSheet1のABC列にあり、転記用のSheet2が存在するのならOKです。 別にデータがIDや名前でソートされていない状態でもだいじょうぶです。

compq
質問者

お礼

せっかく教えて頂いたのでこちらもぜひやってみようと思います。 これを気にVBAも勉強します。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#204879
noname#204879
回答No.9

[No.6この回答への補足]へのコメント、 》 最初の判定の条件で何故COLUMN関数を使っているのでしょうか? 当該式を入力したセル G2 中の COLUMN(A1) は 1 を返すことはお分かりでしょうか? この式を右隣にドラッグ&ペーストすると COLUMN(A1) だったところは COLUMN(B1) に変化します。 COLUMN(B1) は 2 ですね。 セル I2 では COLUMN(C1) となって 3 になります。 つまり、右へ右へで 1、2、3、… なる連続数値を得るために「COLUMN関数を使っている」のです。 》 列位置も省略できるものなんでしょうか? 良い質問ですねぇ! =INDEX(array,row_num,column_num) 上式で column_num が 1(1列)の場合は =INDEX(array,row_num,1) でも =INDEX(array,row_num,) でも =INDEX(array,row_num) でもOKです。

compq
質問者

お礼

なるほど!! 特に意味があるってわけでもないんですね。 要は使いよう、アイデアってことですか! ん~納得!すごい!これはテクニックですね。 ぜひこれから使って行きたいと思います。 INDEX関数そういうことだったんですね。 調べはしたものの、そこまで分かってませんでした。 これも理由が分かってスッキリしました。 解説までして頂いて、ほんとにありがとうございました。 おかげさまで仕事もはかどり、周りからすごいと言われました。 私の力じゃないけど…(^^;

全文を見る
すると、全ての回答が全文表示されます。
  • layy
  • ベストアンサー率23% (292/1222)
回答No.8

>思っていたよりややこしくなるんですね(^^; そう感じるのは当然でしょう。 数式なんてのは ○○の結果でXXして、さらに△△して□□して・・・と 途中何が起きているか見えないので、 それを整理できないと、馴れるまではいざ一気に(1行で)は書けないもの。 作業用D列を用意して | ID | 氏名   |  日付  |順 | 11 | ○○○ | 20110105 |1 | 11 | ○○○ | 20110208 |2 | 11 | ○○○ | 20110812 |3 | 22 | △△△ | 20110319 |1 | 22 | △△△ | 20110525 |2 これがあるだけでも見方が変わります。 それに、 回答は、 結果が出るだけで理屈までは説明がないのがほとんど・・・。 使われている関数を復習して調べるまでしないと力になりません。

compq
質問者

お礼

回答ありがとうございます。 なるほど。順位を付けておいてもできるんですね。 奥が深いです。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.7

>配列数式…初めて聞きました(^^; 配列数式の概要は、以下のページを参考にしてください。 http://pc.nikkeibp.co.jp/pc21/special/hr/ 配列数式は、複雑な計算が補助列なしに計算ができ、数式を簡略化するには極めて有効な手段ですが、オートフィルコピーなどで配列数式のセルが多くなると(例えば数式セルが100を超えるような場合)、再計算に時間がかかり、シートの動きが重くなることもありますので、ケースバイケースで使用されるとよいと思います。 ちなみに、今回提示した数式はCtrl+Shift+Enterで確定しない数式もありますが、いずれも配列数式です。

compq
質問者

お礼

なるほど!配列数式…恐るべしです。便利!! 私はいつも補助列使いまくりです。 私のような初心者にはまだまだ慣れが必要そうですね。 これを機会に配列数式やVBAを勉強したいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

データはSheet1のABC列にあるものとします。 Sheet2に転記するVBAを組んでみました。 手順は以下のとおりです。簡単ですよ。 1.エクセルの画面から、AltキーとF11キー同時に押し(以下Alt+F11キーと記述)て Visual Basic Editor を呼び出します。 2.Visual Basic Editor のメニューから「挿入」、「標準モジュール」で出てきたコードウィンド(右側の白い広い部分)に以下のコード(Sub~End Sub)をコピペします。 '********これより下********** Sub test01()   Dim myRng As Range, myC As Range   Dim myDic As Object   Dim myV   Dim i As Long   Set myDic = CreateObject("Scripting.Dictionary")   With Sheets("Sheet1")     Set myRng = .Range("A1", .Cells(Rows.Count, "A").End(xlUp))     For Each myC In myRng       If Not myDic.Exists(myC.Value) Then         myDic.Add myC.Value, myC.Offset(, 1).Value       End If     Next     ReDim myV(1 To myDic.Count, 1 To 3)     For i = 1 To myDic.Count       myV(i, 1) = myDic.Keys()(i - 1)       myV(i, 2) = myDic.Items()(i - 1)     Next i     myDic.RemoveAll     For Each myC In myRng       If Not myDic.Exists(myC.Value) Then         myDic.Add myC.Value, CStr(myC.Offset(, 2).Value)       Else         myDic(myC.Value) = myDic(myC.Value) & "@" & CStr(myC.Offset(, 2).Value)       End If     Next     For i = 1 To myDic.Count       myV(i, 3) = myDic.Items()(i - 1)     Next i   End With      With Sheets("Sheet2")     .Range("A1").Resize(myDic.Count, 3).Value = myV     .Columns("C:C").TextToColumns Destination:=Range("C1"), Other:=True, OtherChar:="@"   End With   Set myDic = Nothing   Set myRng = Nothing End Sub '********これより上********** 3.Alt+F11キーでワークシートへもどります。 4.Alt+F8キーで出てきたマクロ名(test01)を選択して実行します。 これでSheet2にご希望の形で展開されたと思います。

compq
質問者

お礼

わざわざプログラムを書いて頂いてありがとうございます。 VBAは使ったことないのでなんか難しそうです。(^^; 出来るかな…。 でもこれってデータ内容が変わった時もそのまま使えるんでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

No3の回答の補足です。 もし、Sheet2のリストから重複のないID番号を自動取得したいなら(データを変更すると自動的にその番号だけ表示される)、A列のセルに以下のような関数を入力して下方向にオートフィルしてください。 =INDEX(Sheet2!B:B,SMALL(INDEX((MATCH(Sheet2!$A$2:$A$200&"",Sheet2!$A$2:$A$200&"",)<>ROW($A$2:$A$200)-1)*1000+ROW($A$2:$A$200),),ROW(A1)))&"" なお、上記のROW($A$2:$A$200)-1)の「200」の入力されている部分はデータ範囲よりも少し大きめに範囲指定して、「-1」の部分はデータの開始行によって適宜調節してください(2行目からなら2-1で「1」)。 また表示シートのC列の数式は、例えば「=IF(A2="","",元の式)」のような数式にすると良いかもしれません。

compq
質問者

お礼

補足までして頂いてありがとうございます。m(__)m

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

元データがSheet2にあり、日付が8桁の数字で入力されているなら、直接C列を参照する以下のような配列数式で表示できます。 =IF(COUNTIF(Sheet2!$A:$A,$A2)>COLUMN(A1),SMALL(IF(Sheet2!$A$2:$A$200=$A2,Sheet2!$C$2:$C$200,""),COLUMN(A1)),"") 上記の式はCtrl+Shift+Enterする必要がありますが、以下のような数式にすれば、そのまま入力するだけで表示できます・ =IF(COUNTIF(Sheet2!$A:$A,$A2)>COLUMN(A1),SMALL(INDEX((Sheet2!$A$2:$A$200<>$A2)*10^9+Sheet2!$C$2:$C$200,),COLUMN(A1)),"") 日付の数字を文字列で表示してもよいなら以下のような数式が簡単です。 =INDEX(Sheet2!$C:$C,SMALL(INDEX((Sheet2!$A$2:$A$200<>$A2)*1000+ROW($A$2:$A$200),),COLUMN(A1)))&""

compq
質問者

お礼

配列数式…初めて聞きました(^^; Excelはそこそこに使ってきてますが、全然知りませんでした。 そういうものがあるんですね。 どういった時に使えるものなんでしょう? いまいちどういうものか理解できませんが…。 書いて頂いた数式はNo.1の方のと似ていますね。 試してみたいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

名前単位で1つ目2つ目と連番があれば、別シートへ転記するときに、連番1はC列、2はD列、3はE列という仕組みはできます。VBAとコントロールブレイクの知識が必要です。 アクセスあれば、クロス集計クエリが使えます。

compq
質問者

お礼

VBAというレベルではないので関数でしたく思っています。 今回はExcelでという質問なのですが…。

全文を見る
すると、全ての回答が全文表示されます。
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 仮にSheet1に元表、Sheet2のC2に以下の数式を入力(入力完了時にshift+ctrl+enterキーを同時押下)、縦横に必要分コピー =IF(COUNTIF(Sheet1!$A:$A,$A2)>=COLUMN(A1),INDEX(Sheet1!$C:$C,SMALL(IF(Sheet1!$A$1:$A$100=$A2,ROW(Sheet1!$A$1:$A$100),9999),COLUMN(A1))),"")

compq
質問者

お礼

ご回答ありがとうございます。 思っていたよりややこしくなるんですね(^^; 早速試してみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【Excel関数】データの抽出について

    Excelの関数についての質問です。 画像の様に、参照元のデータが1人1行で用意されている際、 検索値((1)、(2)、(3))毎にデータを抽出する方法をお教え頂けますでしょうか。 VLOOKUPやHLOOKUP等も試しましたが、参照元のデータが横1列の為、実現できませんでした。 宜しくお願い致します。 ※(1)、(2)、(3)を検索値として、それに紐づく「あ~う」「か~く」「さ~す」の各項目格納していきたいです。 ※参照元のデータは、1人1行で用意されている状況です

  • エクセル VlookUPで違う結果が出てくる

    エクセル2010で何度も使っているVlookUP関数なのでですが、今日は何故か全くうまく行かず、原因が分かりません。 氏名が入った表同士で、Sheet1の氏名の横の列にSheet2の参照範囲からデータを持ってくるだけの作業なのですが、全く違う人(場所)のデータをもっともらしく引っ張ってくるのですが。 横にコピーすると、その違う人の横のセルのデータを持ってきます。 詰まり参照は出来ているのですが、全く違う「氏名」の行のデータを参照しているのですが。 この原因分かる方、是非お願いします。

  • 教えてください。

    教えてください。 列も行も多いデータの中から、最小の数値の表示されている人の氏名を表したいのですが VLOOKUP,MATCH,SMALL関数を使ってできるのでしょうか?ためしてみましたが、エラーになります。それともほかの関数がいいのでしょうか?     A B C D・・・・・・・・・・ 氏名 ------        =VLOOKUP 氏名 ------ 氏名 ------      -----の範囲です。 この表ではわかりにくいかと思いますが、よろしくおねがいします。 できれば、詳しくお願いします。

  • (エクセル)表から1列の別表をつくりたい。

    表に入力されたものを1列に並び替えをしたいのです。(エクセル関数) エクセルの表から、セルに入力された情報を抜き出し、並び替えたいのですが、行き詰ってしまい質問させていただきます。 (やりたいこと) 添付資料のように、事業所ごとに購入した物品が日付ごとに入力されていきます。この表を一列で並び替えることを したいのですが、現状の表の形で1列に抜き出すやり方が思い浮かびません。ひとつずつリンクを設定していけばいいですが、 それですと、空白のセルができてしまうこともあり、空白を消すためにフィルタをやらなくてはいけず、なんとか関数でどうにかできないと質問させていただきました(つまり空白のセルは飛ばし、隙間のない1列の表に変換したいです)。 (試したこと) (1)vlookup関数を使うために、日付の横に検索列を作ってもみましたが、同じ行に複数の抜き出すべくものがあると、 if関数のネストをいれるにも「if(c5="","",vlookup(v5,b5:r10,2,fasle)」みたくやってみましたが、c5までは取り出せても、 d5,e5,f5・・・と右にずらしていく関数式が思い当たりません。 (2)種類、数量データ入力されている全てのセルの横に(1.2.3.4.5.6.7.8.9.・・・)と数字をいれて検索列をつくり、vlookupとmatch関数の 組み合わせも試しましたが、vlookup関数の性質上、複数列に検索値(「vlookup(検索値,範囲,列番号,検索の型)」)が存在しているとこれも出来ず。 説明が不十分な点もあると思いますが、よろしくお願いいたします。もし、VBAでなければ難しいとのことでしたら、どのようなVBAを組めばいいかもお願いいたします。

  • EXCEL表操作について

    (1)ある表で A列に数字が入っている行だけを、別の表に出力したい。 別の表にはA列に数字が入った行だけの表ができる。 (2)ある表で A列とB列にはVLOOKUP関数で、読込むスタート位置とエンド位置が記述されているので、それを基に別表にデータ行を追加して行く。 (1)~(2)のような事が、EXCELの表操作でできる方法があればご教授下さい。← マクロ記述となっても可能。 

  • Excel2007でのデータ抽出

    前任者が作ったExcelでの給料計算表を使用していますが、先日そこに金種計算表を組み込めないかと言われました。 当方VBAなどは全くの初心者です。 VLOOKUP関数を使ってデータテーブルから金額を読み込み金種計算が出来るようにはしてみたのですが、データテーブルを更新すると金種計算表にある数式がエラーを吐いてしまいます。 金種計算表には一行目から =IF(B4="","",VLOOKUP(B4,テーブル!D4:BG4,10)) と関数を入れてあります。 B4は氏名欄です。 その際にはちゃんと金額が表示されていますが、入力フォームからデータテーブルを更新すると =IF(B4="","",VLOOKUP(B4,テーブル!#REF!,10)) となってしまいます。 金額を手入力すればいいのですが、全社員分となると膨大な量になってしまいます。 なんとか自動で抽出出来ないものでしょうか。 お知恵をお貸しいただければ幸いです。 稚拙な説明ではありますがよろしくお願いします。

  • Excel エラー表示を回避するようにしたのに・・・

    Excelで、VLOOKUP関数を使って、 「今日の日付の横のセルの中身を表示」させているのですが、 該当データがなかった時のエラー表示や0表示を回避したくて =IF(ISNA(VLOOKUP(TODAY(),元シート!A1:B10,2,0))="","", VLOOKUP(TODAY(),元シート!A1:B10,2,0)) としたのですが、これでもまだエラーや0が表示されます。 多分、日付そのものがない時に#N/A、 日付はあるが横に何も入っていない場合に0が 出ているように思うのですが、・・・ 何かいけないのでしょうか。自分では間違いが見つけられません。

  • テキスト氏名、日付とExcel表の連動

    ユーザーフォームのテキスト氏名、日付1、日付2を入力したらExcel表のマッチした氏名行の日付を○印で入力するようなVBAのコードがありますでしょうか。どなたかご教授のほどよろしくお願いします。

  • Excel:週単位の一覧の作り方

    Excelについて教えてください。 以下のような表を作りたいと思っております。 ====================================== A1:開始日 (任意の日付YYYY/MM/DDを入力) 2行目:A1の日付から始まる1週間単位の日付(金曜日の日付) 例:   A B C D E F 1 2008/1/1 2 2008/1/4 2008/1/11 2008/1/18 2008/1/25 2008/2/1 2008/2/8 上記のような一覧を作りたい場合、A2、B2等2行目にどのような関数を入れれば良いのか分かりません。 A2の日付さえ自分で手入力すれば、Excelのメニュー:編集>フィル>連続データの作成で、連続したデータを作れることはわかっているのですが、できれば、A1の開始日付を入れれば、すべて自動で週単位の日付が入るようにしたいです。 宜しくお願いいたします。

  • excel関数について

    excelの関数の使い方で質問させていただきます。とある数列で、数列1で最大値になっている行の数列2の値を取り出すような関数を作りたいのですが、どうしても分かりません。VLOOKUP等を使用すればよいのでしょうか?宜しくお願いします。

専門家に質問してみよう