[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『○日経過のリストをリアル生成』(ゼニハコベ)
現在が2004/1/9の時
A B C 1 2004/1/1 A君 AA@AA 2 2004/1/2 B君 BB@BB 3 2004/1/2 C君 CC@CC 4 2004/1/4 D君 DD@DD 5 2004/1/6 E君 EE@EE 6 2004/1/8 F君 FF@FF
の、リストがあり
シート名「3日前」に
A B
1 EE@EE E君
シート名「7日前」に
A B
1 BB@BB B君
2 CC@CC C君
のように、3日前と、7日前のリストを毎日更新出来るようにするには
どうすれば良いのでしょうか?
VBA(マクロ)に頼ることになりそうですけど・・ 構わないでしょうか?
(INA)
にレスした応用として書き込みます。 元データ(Sheet1とします)のD列に作業列を設け、C列には、重複が無いものとして考えています。 元データのD1セルに =TODAY()-A1 例の検証で考えると ="2004/1/9"-A1 とし、D6までコピー。 表示するシート(7日前、3日前)のA1に =INDEX(Sheet1!$C$1:$C$6,SMALL(IF(Sheet1!$D$1:$D$6-LEFT(RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1),1)),FIND("日前",RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1),1)),1)-1)<>0,"",ROW(Sheet1!$D$1:$D$6)),ROW())) とし、Ctrl+Shift+Enter で配列数式として確定します。( { } で括られた式になります) また、該当値が無い場合は、 #NUM! が表示されます。 B1に =IF(ISERROR(A1),"",INDEX(Sheet1!$B$1:$B$6,MATCH(A1,Sheet1!$C$1:$C$6,FALSE),)) A1・B1セルを下方コピー いかがでしょうか? (sin) 明日より多忙につき、本日、書き溜め!&打ち止め
凄い凄い凄い凄い、これは凄い
昨日徹夜で、他は見えなくする方法で作ってましたが
素晴らしいですね、
BやCに重複があり、最新のみを出力するには、どうすれば・・・・
(ゼニハコベ)
追加
現在元データは、E列で、何回目カウントをしており
B E
A君 1
B君 1
C君 1
D君 1
E君 1
B君 2
F君 1
G君 1
C君 2
H君 1
B君 3
A君 2
このような状態です
3日目は、古い方、Eが1の時だけ抽出
7日目は、最新を抽出・・・・のように出来ますか
一般機能でお望みのようですので、退散します。
それでは〜 ~~~ヾ(^_^)
(INA)
なるほど、説明不足でした
その3日前のデータは、過去初めてか?という事です
3日前の一覧は、初めての人だけを表示したいので
重複カウントEが1を表示しているものだけを表示したいのです
7日前は、そのままで良かったみたいです
(ゼニハコベ)
昨日も徹夜で頑張ってみたのですが
数十のデータなら上手く機能しているみたいなのですが
3000以上のデータでは、なかなか表示してくれないようです・・・
(ゼニハコベ)
現在が2004/1/9の時
A B C D E 1 2004/1/1 A君 AA@AA 1 2 2004/1/2 B君 BB@BB 1 3 2004/1/2 A君 AA@AA 2 4 2004/1/2 D君 DD@DD 1 5 2004/1/5 E君 EE@EE 1 6 2004/1/6 B君 BB@BB 2 7 2004/1/6 F君 FF@FF 1 8 2004/1/6 A君 AA@AA 3 9 2004/1/7 E君 EE@EE 2 10 2004/1/8 F君 FF@FF 1
(Eは、同君の入力回数)
シート名「3日目」に
A B
1 FF@FF F君
説明、入力され7日目経過したデータ
6 2004/1/6 B君 BB@BB 2
7 2004/1/6 F君 FF@FF 1
8 2004/1/6 A君 AA@AA 3
この中では、F君は、初めてなので、出力
シート名「7日目」に
A B
1 DD@DD D君
説明、入力され7日目経過したデータ
A B C D E
2 2004/1/2 B君 BB@BB 1
3 2004/1/2 A君 AA@AA 2
4 2004/1/2 D君 DD@DD 1
この中の、A君B君は、更新されてるが
D君の更新は無いので、出力
率直に言うと、
3日目に、初めて使ってみてどうでしたか?
7日目に、そろそろ交換時期ですね・・・・
としたいのです。
シートを隔てると、かなり重いみたいなので
一旦 同シートに
O P Q R
1 FF@FF F君 DD@DD D君
のように出力して
3日目シート
A1
=入力!O1 B1 =入力!P1
7日目シート
A1
=入力!Q1 B1 =入力!R1
で、表示させたいと思います
(ゼニハコベ)
3日目の方はバッチリです!
諦められたらどうしょうかと、ドキドキしてました・・・
7日目は、7日間入力が無いデータの一覧、と言った方が解りやすいでしょうか・・・
最後の入力から、7日経過した一覧、なのですが、出来ますでしょうか?
手が空きました。jun53さん代わりの回答ありがとうございました。 意味が分からず、しばし傍観していましたが、 チョット考えてみたので、書き込みます。 その前に、ゼニハコベさん、ちょっと疑問があるのですが、 >3日目に、初めて使ってみてどうでしたか? 2日目、1日目にも名前が出て来る事は無いのでしょうか? >7日目に、そろそろ交換時期ですね・・・・ 以前に何回出てこようが、7日目以降に名前が出なければ、該当するという事ですね? 以下、『3日目、7日目以降に名前が出てこないものが対象』を前提として考えてみました。 今回は、式が長くなるので、Sheet名からの読み込みにはしておりません。 元データ(Sheet1)の作業列 D1: =$G$1-A1 G1セルに日付を入力(2004/1/9) E1: =COUNTIF($B$1:$B1,$B1) 該当行以前での回数※A列は、日付順に並び替え(入力)が前提 F1: =COUNTIF($B$1:$B$10,$B1) データ全体での回数 D1:F1を10行目までコピー 3日目シート A1: =INDEX(Sheet1!$C$1:$C$10,SMALL(SUMPRODUCT((Sheet1!$D$1:$D$10=3)*(Sheet1!$E$1:$E$10=1)*(Sheet1!$F$1:$F$10=1)*(ROW(Sheet1!$D$1:$D$10))),ROW())) B1: =IF(ISERROR(A1),"",INDEX(Sheet1!$B$1:$B$10,MATCH(A1,Sheet1!$C$1:$C$10,FALSE),)) 7日目シート A1: =INDEX(Sheet1!$C$1:$C$10,SMALL(SUMPRODUCT((Sheet1!$D$1:$D$10=7)*(Sheet1!$E$1:$E$10=Sheet1!$F$1:$F$10)*ROW(Sheet1!$D$1:$D$10)),ROW())) B1: =IF(ISERROR(A1),"",INDEX(Sheet1!$B$1:$B$10,MATCH(A1,Sheet1!$C$1:$C$10,FALSE),)) 今回は、そのままEnterで確定して下さい。 3日目=3日目の回数が、日付順でも、全体でも『1』が対象と考えました。 7日目=7日目の回数が、日付順でも、全体でも『同じ=最終数』と考えました。 データの重さは、考慮しておりません、あしからず (sin)
ゼニハコベさん、私の書込み現実的ではありませんでした。 試しに、データ、数式を5000行分コピーしてみましたが、再計算に時間が掛かりすぎます。 代案1 オートフィルターを使う。(←再計算の状況を眺めていられる程度の速さです) Sheet1 G1セルに =IF(E1=F1,1,"") を付け加え、 3日目の場合は、D列で3、E列で1、F列で1を選択 7日目の場合は、D列で7、G列で1を選択 B:C列をコピーし、目的のシートに値で貼り付け、C列選択、切取り、B列選択、切取った列の挿入 が、現実的かも。 代案2 詳しく無いので(扱えないので)、確証はありませんが、マクロで処理すれば計算が速いかも? 代案2をご希望の場合は、退散されたINAさんに再度ご登場していただくか、他の方の書込みを お待ち下さい。 (sin)
=COUNTIF(B$1:B1,B1)
の上下逆の表示出来れば、良いのではないでしょうか?
最終入力が1、過去の重複が2以上になりますので
sinさんも、ありがとうございます。
3日目の場合、3日間に新たに入力があってもそのままでOKです
7日目は、その通りです
頭パンクです。 何がなんだか、何のことやら、・・・ ぼんやりとした疑問は、 同日付で同名の入力が、現実的に起こりえるのか??? こんな意見しか言えません。 (sin)
やっと、意味が分かってきました。&自分の間違いに気付きました。 >7日目として表示されてる中から選んで >新たに入力すると、その7日目の中の一番下へ表示される場所がかわるだけのようです。 元あった行以降に同じものを入力すると、例え同じ7日目であったとしても、 行o=入力日付順として検索させているため、 新たに入力したものが、最新の情報として計算されています。そのため、 行全体で、7日目該当値の中の該当行位置(行番号の小さい物順)に表示されます。
訂正式は、下記の通りです。チョット勘違いをしていました。お手間を取らせゴメンナサイ! 7日目A1セル =INDEX(Sheet1!$C$1:$C$100,SMALL(IF(Sheet1!$D$1:$D$100*(Sheet1!$E$1:$E$100=Sheet1!$F$1:$F$100)<>7,"",ROW(Sheet1!$D$1:$D$100)),ROW())) Ctrl+Shift+Enterで配列数式として確定。 3日目A1セル =INDEX(Sheet1!$C$1:$C$100,SMALL(IF(Sheet1!$D$1:$D$100*(Sheet1!$E$1:$E$100=1)<>3,"",ROW(Sheet1!$D$1:$D$100)),ROW())) Ctrl+Shift+Enterで配列数式として確定。 ※※※ ○君や○○@○○が、同じものが二人存在するならば、上記式を応用し、B1セルに入れてください。 100行では、問題なく再計算されますね! (sin)
考えてみたのですが
3日目の、初めまして出力は
E列の重複チェック
=COUNTIF(B$1:B$5000,B1)
これだと、出力すべき物でも、新たに入力があると、1では無くなるので
=COUNTIF(B$1:B1,B1)
こちらの方が正解だと思います
7日目の、最終入力から7日経過しました出力は
E列の重複チェックを
=COUNTIF(B1:B$5000,B1)
こうすれば、正しく出力できてるようです
現在チェック中です
(ゼニハコベ)
『何が正解か?』に関しては、『どういう条件下でどうしたいのか?』に依りますので、 一番分かっているゼニハコベさんが、決めて(提示して)ください! jun53さんにしても私にしても、その他の助言・回答を準備してくれている方々も、それ無しでは、推測でしかコメント出来ません。 以下、私の推測による5000行データ対応策_訂正版です。 Sheet1データA〜E列5000行、3日目・7日目シート関数数式入力A〜B列1500行でテストしました。 データ容量2.6MB、カップ○ー○○にお湯を入れて、ファイルを開き再計算が終了した時点で カップ○ー○○を食べると『早かったか?』ぐらいの待ち時間です。 例えになってないかな? Sheet1A列には、日時順に入力し最終行が最新の入力情報となる と推測しました。 B列△△君に関しては、重複(同姓同名)も有り得るが、 C列××@××に関しては、一人一人固有のもの と推測しています。 Sheet1のD,F列およびG1,H1セルを作業用に使用します。 G1セルでA列の最終行を出します。 =MAX(IF(A1:A10000<>"",ROW(A1:A10000))) Ctrl+Shift+Enterで確定 F1セルにA列最終行の日付を表示します。※任意の日付を指定する場合は、入力して下さい。 =INDIRECT("A"&G1) D1セルでH1セルとの差を出します。jun53さんが、書き込まれたのを参考にし、 =IF(A1="","",$H$1-A1) E1セルでは、D1セルが3の場合と、7の場合とで処理を分けました。ゼニハコベさんの書き込まれた案を参考にし、 D列が3の場合は、1行目から該当行間の数、7の場合は、該当行から最終行間の数を計算します。 =IF(A1="","",IF(D1=3,COUNTIF($C$1:C1,C1),IF(D1=7,COUNTIF(INDIRECT("C"&ROW()&":C"&$G$1),C1),0))) 3日目シートA1セル =INDEX(INDIRECT("Sheet1!C1:C"&Sheet1!$G$1),SMALL(IF(INDIRECT("Sheet1!D1:D"&Sheet1!$G$1)*INDIRECT("Sheet1!E1:E"&Sheet1!$G$1)<>3,"",ROW(INDIRECT("Sheet1!A1:A"&Sheet1!$G$1))),ROW())) Ctrl+Shift+Enterで確定 3日目シートB1セル =INDEX(INDIRECT("Sheet1!B1:B"&Sheet1!$G$1),SMALL(IF(INDIRECT("Sheet1!D1:D"&Sheet1!$G$1)*INDIRECT("Sheet1!E1:E"&Sheet1!$G$1)<>3,"",ROW(INDIRECT("Sheet1!A1:A"&Sheet1!$G$1))),ROW())) Ctrl+Shift+Enterで確定 7日目シートには3日目の各式の『<>3』を『<>7』にするだけです。
Sheet1のE列は、D列が3又は7の場合のみカウントさせ、それ以外の場合には0にします。 3日目、7日目に表示するのは、Sheet1のD列が3、7でE列が1の場合ですので、D列×E列が3、7になる場合のみです。 これで、いかがでしょうか? \/ 近頃手もつないでいないな (sin)
パチパチパチパチ! 指紋が無くなる程の拍手。 「あ〜痛っ!」 sinさん、後二日で開幕でっせ。 万障繰り合わせて応援を! 名も無き(阪神ファン) 先日の伊良部良かったでッ。
ここまで複雑になると教えて頂いた方法を自分のシートに合うように
書き換えるのも大変ですね
一発で置き換える方法ってあるのでしょうか・・・・・
(ゼニハコベ)
お役に立てたようでホッとしています。 >一発で置き換える方法ってあるのでしょうか・・・・・ 血と汗と涙を流した分、何かを運んでくれるのでしょうから、がんばって下さい。 きっと、見返りがあるでしょう。 銭は増えずに、仕事だけが増えたりして…、でも信頼も増えているから良しとしましょう ※私は、3日目A1の式を基本とし、それをコピーし、セル指定部分の書き換えで済ましました。
名も無き(阪神ファン)の弥太郎さん(んっ?) 今年のポイントは、赤星の振り逃げ、二盗、三盗、本盗 結果はどうであれ、見てみたい。 見てみたいといえば、日本シリーズ 近鉄vs阪神 ←毎年同じ予想(願望) 実現したら…、考えただけ満面の笑みです。 おしゃべりがすぎました。 退散します (sin)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.