
エクセルデータ処理(フラグ立て)
次のようなデータがあります。
これに対して次のようなルールで、右側にフラグをつけたいどうすればいいか。
条件データは時系列に昇順、あるいは降順になっている。必要なら適当にソートできる。
フラグ付与ルール
(1)同一日付のデータ数が2件以下ならそのデータの横にはすべて1をつける
(2)同一日付のデータ数が3件以上ならそのデータの最上部と最下部の横に1をつける
((2)はある意味で(1)を含んでいるといえますが)
(質問)セルに、なんか式を書くことで処理できますか。考えてわからなかったので質問します。
時間(a1)
2006/1/26 16:50
2006/1/26 16:50
2006/1/26 16:50
2006/1/26 16:48
2006/1/26 16:46
2006/1/26 16:44
2006/1/26 16:43
2006/1/26 16:43
2006/1/26 16:43
2006/1/24 18:35
2006/1/24 18:35
2006/1/22 10:35
2006/1/21 16:50
2006/1/21 16:50
2006/1/21 16:50
2006/1/21 16:48
結果例
時間(a1セル)
2006/1/26 16:501
2006/1/26 16:50
2006/1/26 16:50
2006/1/26 16:48
2006/1/26 16:46
2006/1/26 16:44
2006/1/26 16:43
2006/1/26 16:43
2006/1/26 16:431
2006/1/24 18:351
2006/1/24 18:351
2006/1/22 10:351
2006/1/21 16:501
2006/1/21 16:50
2006/1/21 16:50
2006/1/21 16:481
No.9
- 回答日時:
度々すいません。
No.8を書いてから気付きました。「ソートされている」と言う条件があるので、もっと簡略化できます。
「1つ上と現在行、1つ下と現在行が共に同じなら、現在行は無視して、1つ上と1つ下が同じかどうか判定」
で事足ります。
ソートしてあれば
2006/1/21 16:50
2006/1/20 10:50
2006/1/21 16:48
という並びになる事は有り得ませんから。
最終的には
=IF(INT(OFFSET(A2,-1,0,1,1))=INT(OFFSET(A2,1,0,1,1)),"",1)
で済みます。
No.8
- 回答日時:
No.7で補足してから発見。
フラグ付けるのは「2件なら」だと思ってましたが、質問を良く見ると「2件以下なら」だったんですね。
完璧に「以下」を見落としてました。
そうすると、1番目と3番目のケースでフラグ付け、2番目のケースでフラグ無しになるので
=IF(AND(INT(OFFSET(A2,-1,0,1,1))=INT(A2),INT(OFFSET(A2,1,0,1,1))=INT(A2)),"",1)
となります。
質問は良く読んでから回答しなければなりませんね。失礼しました。
フォローの件ありがたく拝見しました。そうなんです。私はある作業のアクセスを記録した時間データで、この日は何時~何時までアクセス作業しているか要約した結果を見たいと思ってこういう質問となりました。それで最初の結果をためしてうまくいっていたので満足だったのです。
No.7
- 回答日時:
解決したようで、なによりです。
>この部分は付けるの記述ミスですね。
最初の回答が、記述ミスと言うか、記述を略し過ぎました。略さずに書くと以下のようになります。
>・1つ上の行の日付と、1つ下の行の日付と、どっちも日付が違うなら、フラグを付けない。
・1つ上の行の日付と現在行、1つ下の行の日付と現在行をそれぞれ比較し、どっちの比較でも日付が違うと判定したなら、同一日付のデータが1件しかないので、フラグを付けない。
>・1つ上の行の日付と、1つ下の行の日付と、どっちも日付が同じなら、フラグを付けない。
・1つ上の行の日付と現在行、1つ下の行の日付と現在行をそれぞれ比較し、どっちの比較でも日付が同じと判定したなら、同一日付のデータが3件以上ある塊の中間なので、フラグを付けない。
>・1つ上の行の日付と、1つ下の行の日付と、片方だけ日付が違い、片方だけ日付が同じなら、フラグを付ける。
・1つ上の行の日付と現在行、1つ下の行の日付と現在行をそれぞれ比較し、片方だけ日付が違うと判定し、片方だけ日付が同じと判定したなら、同一日付のデータが複数件あるデータの集まりの最上部か最下部なので、フラグを付ける。
ついでに、どうしてあのような式が一つで済むのか解説しておきます。
ここで、1番目のケースの
「どっちの比較でも日付が違うと判定した」
と、2番目のケースの
「どっちの比較でも日付が同じと判定した」
は、2つまとめて考えれば
「2つの比較判定の結果が同じだった」
と言い換える事が出来ます。
つまり1番目と2番目のケースは
「2つの比較判定の結果が同じだった」
と言う事になり、3番目のケースは
「2つの比較判定の結果が異なった」
となります。
つまり
「2つの比較判定の結果を比べる」
と、フラグを付けるか付けないか判定出来ます。
で、最終的に
IF((a=c)=(b=c),…)
と言う「比較式2つを比較する」と言う判定式1つで記述出来る事になります。
No.6
- 回答日時:
同一日が一塊になって出てくる。
飛び離れて同一日が出現しない。
なら
日が前行と次行と同じ場合空白
そうでなければ1でよいのでは。
例データ A2:B17(第1行はあけて置いてください)
2006/1/260:00:001
2006/1/2616:50:00
2006/1/2616:50:00
2006/1/2616:48:00
2006/1/2616:46:00
2006/1/2616:44:00
2006/1/2616:43:00
2006/1/2616:43:00
2006/1/2616:43:001
2006/1/2418:35:001
2006/1/2418:35:001
2006/1/2210:35:001
2006/1/2116:50:001
2006/1/2116:50:00
2006/1/2116:50:00
2006/1/2116:48:001
C2は=IF(AND(A2=A1,A2=A3),"",1)
を入れてC17まで式を複写。
22日が気になるが
=IF(COUNTIF($A$2:$A$17,A2)=1,"",IF((A2=A1)*(A2=A3),"",1))
にすると22日は空白になる
式の意味はよく理解できるようになりました。
結果を試していませんが、うまくいくと思います。
ご回答どうもありがとうございました。
No.5
- 回答日時:
A2:A100まで日付が入っていると仮定します。
B2セルに
=IF(COUNTIF($A$2:$A$100,$A2)=1,"",IF(COUNTIF($A$2:$A$100,$A2)=2,1,IF(MIN(($A$2:$A$100<>$A2)*65536+ROW($A$2:$A$100))=ROW(),1,IF(MAX(($A$2:$A$100=$A2)*ROW($A$2:$A$100))=ROW(),1,""))))
の式を入れ、Ctrl+Shift+Enterを同時に押します。
もし、式を回答欄からコピーした場合は確定した式をクリックして、Ctrl+Shift+Enterを同時に押します。
後は下方向へコピーして下さい
日付の行数が200や300になった場合は式中の100を200や300に変えてください
No.4
- 回答日時:
ソート後に限り、フラグ付けの条件を言い換えると、以下のようになります。
・1つ上の行の日付と、1つ下の行の日付と、どっちも日付が違うなら、フラグを付けない。
・1つ上の行の日付と、1つ下の行の日付と、どっちも日付が同じなら、フラグを付けない。
・1つ上の行の日付と、1つ下の行の日付と、片方だけ日付が違い、片方だけ日付が同じなら、フラグを付ける。
で、データの先頭の行と、データの最後の行は、それぞれ「1つ上の行」「1つ下の行」が無い為、セルの高さをゼロにしてあるダミー行を置いて下さい。これで、どの行も同じ式で書けます。
「1つ上の行」「1つ下の行」を参照する式を書く場合、再ソートして行が入れ替わったり、行の追加、行の削除をしても影響が無いように「A1」とか「$A$1」とかセル名を書かず、現在セルからのオフセット位置を指定してセル位置を求める関数を使用します。
日付データを2行目(A2セル)から打ち込んで、B2セルに
=IF((INT(OFFSET(A2,-1,0,1,1))=INT(A2))=(INT(OFFSET(A2,1,0,1,1))=INT(A2)),"",1)
と式を入力し、B2セルを必要なだけ下方向にコピーして下さい。
1行目と最終行の1つ下に、ダミーの何も入れない行を作るのをお忘れなく。
これで目的を達成できるし、行を追加しての再ソート、行の追加と削除も可能です。
すべて解決しました。(なお回答は問題ないのですが、
・1つ上の行の日付と、1つ下の行の日付と、どっちも日付が違うなら、フラグを付けない。この部分は付けるの記述ミスですね。)
本当に素晴らしい回答だと思います。
回答のようにダミー行を置き、どの行も同じ式で書けるように考える所に、
エクセル達人の智恵を感じ、Aha!体験いたしました。またこのように説明いただくと、offsetとはこういう場合に使うのかと意義/効用がとてもよくわかりました。どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) 名前と日付が一致する箇所にフラグを立てる関数が知りたいです 4 2022/08/11 02:24
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
- Excel(エクセル) マクロ セルの選択 5 2022/08/12 22:47
- Excel(エクセル) 条件付き書式 ある範囲で色がついているセルと同行の別のセルに色を付けたい 4 2022/04/20 07:04
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのクエリで、replace関数...
-
ACCESS VBA でのエラー解決の根...
-
access2021 VBA メソッドまたは...
-
access2021 強制終了してしまう
-
Access VBA を利用して、フォル...
-
Accessのクエリの結果を、既存...
-
Microsoft 365 Basic サブスク...
-
Accessのスプレッドシートエク...
-
実行時エラー3131 FROM 句の構...
-
Access Error3061 パラメータが...
-
Access VBA [リモートサーバー...
-
Arduinoで温湿度と時刻を1分ご...
-
Vba Userformを前面に出すについて
-
Accessデータベースに含まれる...
-
Access 複数条件検索の設定が上...
-
提供されるデータの形式が変わ...
-
Excelを開く時と閉じる時に一度...
-
列が255以上のCSVファイルをAcc...
-
【至急・画像あり】建物or住所...
-
capeofdragonと申します。 Acce...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
Accessのクエリで、replace関数...
-
access2021 強制終了してしまう
-
ACCESS VBA でのエラー解決の根...
-
Access VBA [リモートサーバー...
-
Accessのスプレッドシートエク...
-
Accessのレポートについて
-
access2021 VBA メソッドまたは...
-
Access Error3061 パラメータが...
-
access2019 チェックボックスと...
-
Accessのクエリの結果を、既存...
-
accessでlaccdbファイルが削除...
-
Access VBA を利用して、フォル...
-
accessデータを指定したExcel、...
-
Accessのリンクテーブルのパス...
-
列が255以上のCSVファイルをAcc...
-
Accessのクエリの印刷設定
-
Accessでレポートを印刷する時...
-
Accessフォームの配色テーマを...
-
Accessデータベースに含まれる...
おすすめ情報