• ベストアンサー

エクセルで、条件の合うものだけに連番をつけたいです。

A列に連番があります。この番号は変えることができません。 B列に、条件を満たすセルだけに別の連番をつけたいです。例えば、D列がTRUEである行が1,5,6…とあったとすれば、B1が1、B5が2、B6が3…といった具合にです。 よろしくお願いします。

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

  • ベストアンサー
  • s_yoshi_6
  • ベストアンサー率73% (1113/1519)
回答No.3

D列の適当なセルに「TRUE」と入力されているのであれば、 B1に=IF(D1,1,"") B2に=IF(D2,COUNT(B$1:B1)+1,"")として以下コピー ではいかがでしょうか。

kogomi
質問者

お礼

まだ完全に式のほうは理解できていませんが、ちゃんと答えがでますので使わせていただきます。ありがとうございました。 無知なものでもう一つ質問したいのですが、=IF(D1,1,"")の式で(もう一つの式も)、D1の後に=XXと書かなくても使えているというのは、どんな意味があるのでしょうか?

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

その他の回答 (7)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.8

配列数式で出来ました。 (データ)A2:A11(第1行目は、使わないこと) A列   B列 a 1 b c a 2 s d a 3 a 4 c b この中でaの行にだけ連番を振ります。 (関数)B2セルに =IF(A2:A11="a",MAX($B$1:B1)+1,"") と入れて、SHIFT+CTRL+ENTERキーを押す(3キー同時に押す)。式の先頭と後尾に{と}がつく。配列数式の利用です。 B2の式をB11まで複写する。 (結果) 上記B列の通り。

kogomi
質問者

お礼

配列数式ですか。私にはちょっと分からない世界ですが、ちゃんと答えが出ますね。ありがとうございました。 とりあえずは自分の理解できる式を使わせて頂くことにします。しかし、これからの参考にしたいと思います。 本当にありがとうございました。

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

#3です。 =IF(D2,COUNT(B$1:B1)+1,"") の意味は 「もしD2が真(TRUE)ならば、B1からB1まで(一番上のセルから当該セルの上のセルまで)の範囲で数値データの数を数えてそれに1を加えた数とする。もし偽(FALSE)であれば空白とする」 ということです。 ご質問のケースの場合、連番以外は記入しないということのようでしたので、COUNT関数を使って数値の記入されているセルの数を数えて、それを連番に使いました。 ですから、もしD列がTRUEでない場合に、B列に入るのが空白ではなく、例えば「0」など数値になる場合は別の方法にしなければなりません。(例えば「-」などの文字列であれば、数値ではありませんので使用できます) COUNT関数については下記など参考にして下さい。 http://homepage1.nifty.com/kenzo30/ex_kisotyu/ex_ks_tyukyu9.htm なお >D1の後に=XXと書かなくても使えているというのは、どんな意味があるのでしょうか? =IF(D2=TRUE,COUNT(B$1:B1)+1,"") と入力しても結果は同じで、「D2が真(TRUE)ならば」という意味になります。この場合「=TRUE」は省略することが可能です。 逆に、D2に文字列が入っていることを条件にする場合、例えば、 =IF(D2="(文字列)",COUNT(B$1:B1)+1,"") などという式を立てる際に、「D2="適合"」の部分は「D2が(文字列)に等しいならば」という意味になりますが、さらに詳しく言えば「『D2が(文字列)に等しい』という条件が真(TRUE)ならば」と言い換えることもできます。 従って、 =IF(D2="適合"=TRUE,COUNT(B$1:B1)+1,"") と記述しても同じ結果が得られます。 ただ、ここで言う「=TRUE」は「真である」という意味であって「"TRUE"という文字列に等しい」という意味ではありません。 従って =IF(D2=TRUE,COUNT(B$1:B1)+1,"") の式は、 =IF(D2="TRUE",COUNT(B$1:B1)+1,"") とは異なります。 Excelでは標準書式で入力した場合、「TRUE」は「常に真を返す」という前者の意味になります。(「FALSE(偽)」も同様)。 もし書式を文字列にしてから入力したり、「TRUE」の前に「'」を入れて文字列扱いにすると後者の意味になって、計算結果は変わってきますので注意して下さい。

参考URL:
http://homepage1.nifty.com/kenzo30/ex_kisotyu/ex_ks_tyukyu9.htm
kogomi
質問者

お礼

ご丁寧な説明ありがとうございました。とても参考になりました。 =TRUEは省略できるのですね、これから役立てたいと思います。エクセル関数の質問をするたびに勉強になるので本当に嬉しいです。

全文を見る
すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

>マクロを使えば可能なのでしょうが、関数だけでできる方法があればそうしたいです。 関数による解は、既に多数の回答がなされています。ご参考までにマクロでの解です。標準モジュールに貼り付けて使用します。 Sub MACRO1()   Dim lngEndCell As Long, lngCounter As Long, i As Long   'B列初期化   Range("B:B").ClearContents   'カウンター初期値   lngCounter = 1   'A列で最終行を取得   lngEndCell = Cells(65536, "A").End(xlUp).Row   '最終行までループ   For i = 1 To lngEndCell     'D列がTRUEであれば     If Cells(i, "D").Value = True Then       'B列にカウント値を記入       Cells(i, "B").Value = lngCounter       'カウント加算       lngCounter = lngCounter + 1     End If   Next i End Sub

kogomi
質問者

お礼

ありがとうございます。 関数が無理ならマクロという手段を考えていました。VBエディターを使うなんて高度な技はわかりませんので、ツールのマクロの記録からどうにかやってみようとは思っていました。しかしどうやら関数だけで解決しそうです。 貴重なお時間をありがとうございました。

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

B1セルは =if(条件式,1,0) とし、 B2セルに =if(条件式,max($B$1:B1)+1,"") その後、B2セルの関数をオートフィルによりデータの入っている列末まで、関数をコピーする…というのは、いかがでしょうか?

kogomi
質問者

お礼

ちゃんと使えます。式も私でも理解できます。 これでゆっくり休みにはいれそうです。ありがとうございました。

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

多分もっとスマートな方法があると思うのですが、一応結果だけはご希望のものが出ましたので… A列:連番 D列:IFかなにかで条件付けしてTUREを出してある。 そこで B列は=COUNTA(D$2:D2) C列には:=IF(B2=B1,"",B2) と入れるとご希望の結果が出ましたが…

kogomi
質問者

お礼

ありがとうございます。 関数の初心者ですので、式の内容をまだ理解するに至っておりません。 >B列は=COUNTA(D$2:D2) >C列には:=IF(B2=B1,"",B2) これはB1,C1に入力してコピーすれば良いのでしょうか? 正しい答えが出ないのですが…。

kogomi
質問者

補足

一行目を使わずに2行目から使えばできるのですね。ちゃんと答えが出ました。 まだ入り口にしかいませんが、関数の奥の深さには驚かされます。同時にとても勉強になります。 ありがとうございました。

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

D列オートフィルターで、Trueの行だけ抽出します。 その結果に対して、B列に最初の番号を振り、あとはオートフィルで連番が振れませんか?

kogomi
質問者

お礼

ありがとうございます。 補足をNo.1さんの回答の欄に書きました。 関数だけでできればと思います。

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

《フィルター》機能を使ってみては?フィルターで、D列をTRUEで絞込み、その状態でB列に順番に番号をつけてみてはどうでしょうか?

kogomi
質問者

補足

早速の回答をありがとうございます。 こちらの説明不足ですいません。 今あるシートのレイアウトを変えるわけにはいかないのと、今後変更のあるつどフィルターをかけるのも難儀なので(毎日更新します)、できれば関数で最初からそう設定ができたらと思っています。 マクロを使えば可能なのでしょうが、関数だけでできる方法があればそうしたいです。

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

関連するQ&A

  • エクセルでの連番の処理

    お世話になります。 1行目に入力されたデータをルールに沿って2行目以下にどんどん追加していきたいと思っています。 まずD1、E1のセルに数字を入れます。 例:D1に3、E1に25 を入れてマクロを実行するとD列の2行目以下に3,4,5,6…25と連番で入力出来るようにしたいのです。 この例ではD列は24行目まで入力されています。そこで2行目から24行目までのA,B,C列にはそれぞれ1行目のA,B,C列と同じデータを入力します。なおA,B,C列は数字、文字列どちらもあります。空白の場合もあります。 この状態でA~E列の1行目のデータを変更し、仮にD1を2、E1を15としたとします。ここで再度マクロを実行すればD25に2、そして順に連番が入りD38に15が入るようにします。 同時に25行目から38行目までのA,B,C列にはそれぞれ1行目のA,B,C列と同じデータを入力します。 これの繰り返しです。 つまり2行目以下のD列で空白の行以下にどんどん連番を入れていく具合です。 前提としてD1、E1は整数しか入りません。またE1の数字はD1より大きいです。ただD1,E1に同じ数字が入った場合、その数字の1行分だけが入力されるようにします。 以上の処理が自動化できるマクロはできますか? アドバイス願います。

  • エクセルの連番について

    例えばA列が商品コード番号を入力する行でB列が伝票番号を入力する行だとします。A列に入力すると自動的にB列に連番が入るようにしたいのですが・・・   A  B 1 11  1 2 23  2 3 54  3 こんな感じですが。

  • EXCEL 2003で条件に合った合計を求めたい

    ______A ____B____ C_____D 1___111___ 1 ___10___ 60 2___111___ 2 ___10 3___222___ 2 ___10 4___333___ 1 ___10 5___333___ 2 ___10 6___333___ 3 ___10 7___444___ 1 ___10 8___444___ 3 ___10 9___555___ 1 ___10 Excel 2003環境において、上記A1:C9を対象に関数で下記条件を元に数式をD1に入力して値を求めたいです。 条件: A列の同じ値のセルを一つのグループとし、かつその中で、B列で1から始まる連番となっているグループを対象にC列のセルを合計する。 上記のセル範囲で条件に合う行は1,2,4,5,6,9行目で答えは60になります。 SUMPRODUCT関数やIF関数を併用してみましたが、うまく作ることができませんでした。 なんとか作業列やVBAを用いずに一つの数式で済ませたいです。 よろしくお願いします。

  • エクセルで連番をマクロで

    こんにちは いつもお世話になっています。 Windows7、エクセル2010で教えてください。  B3から仮にB100まで文字列があるとします、空白セルはありません。 この状態でA3からA100まで1から始まる連番をマクロで実行したいのです。 実際はB列のデータの最終行は不定です。つまり、B列にデータがなくなるまで(空白セルになるまで)A列に連番をつけたいのです。現在はA3,A4に1,2と入力し、オートフィルで該当セルを選択し「予測」で連番をつけています。 マクロ記録ではB列にデータがなくなる判断ができなくて作れません。 この作業が頻繁にあるものですからマクロができれば助かります。 よろしくお願いいたします。

  • エクセルVBA・一定の条件でセルを選択したい

    エクセルVBA・一定の条件でセルを選択したい 添付した画像で、毎日、社員番号等が入力されます。 D列の内線番号は空白の場合もありますがA、B、C列は必ず入力されます。 添付画像だと「A1:D5」という具合に選択したいのです。 考え方としては、A列の*行に入力された場合は、「A1:D*」を選択するという具合になるかと思います。 私の目的は、セル範囲を選択したあと、並べ替えたいと考えています。 この並べ替えは自動記録でできそうです。 よろしくお願いします。

  • 【エクセル 関数 マクロ】連番のグループ割当

    グループをランダムに決めるため、 添付画像のように B列に名前をずらーっと入れます。 ※実際は1000人くらいいます これに対して、A列にて 1~10 個単位で 1~∞ までの連番を組みたいと思ってます。 つまり、 1 1 1 1 2 2 3 3 3 3 3 4 4 4 5 5 5 5 5 5 6 7 7 ・ ・ ・ みたいに、1~10個ずつランダムにグループ分けされた連番を入れたいのです。 グループ数は予め固定しておらず、 1グループ辺りの人数も1~10でランダムにしたいので、 別のセルでグループを設定して・・・という方法ではなく、 添付画像のようにB列に氏名を並べたままやりたいと思っています。 ただし、B列に1,000人ならA列も1,000行目まででばっちり 合わせなくてもいいです。 1,001行目から下は無視すればよいので・・・ なお、他のセルで違う計算をしてから A列に反映させる、というやり方なら大歓迎です。 ですから、他のセルで randbetween(1,10)を作って、それを活用するやり方でもOKです。 マクロでも難しいでしょうか? 宜しくお願い致します。

  • ExcelのVBAで連番を振る。

    A列が空白で、B列に1行目から***行目(毎回変わる)までデータが入力されている時、 A列に、1から***まで(B列のデータが終わるまで、連番を振るにはどんなVBAを かいたらいいのでしょうか? お願いします。

  • ExcelのCOUNTA関数で数えた数だけ連番を付けるには

    ExcelでB列から下の行にデータが入力されています。 そのデータ数を数えるために,B4セルに=COUNTA(B5:B100)関数を入力します。 B4セルで数えた数を元にして,A5,A6,A7・・・と下方向にその数まで1,2,3・・・と連番を付けていきます。 もしB4セルの値が0なら連番は付けません。 以上のマクロをシートに貼り付けるにはどのようにしたらよいでしょうか? 教えてください。お願いします。

  • エクセルで連番をつける

    A    B・・・ E   F・・・ AAA  111   1   1 AAA  222   1   2 BBB  333  2   3 CCC  444   3   4 CCC  555   3   5 入力はA,B列だけです。 (1)A1を入力するとE1は1を表示。B1を入力するとF1は1を表示。 (2)A2を入力した時に、A1と同じ名前ならばE2は1、違う場合は2を表示。以下同条件。 (3)F列は1~連番になります。 (4)途中で行挿入、行削除を行っても自動的にE、F列を修正。 上記の内容で処理するにはどうすれば良いでしょうか?

  • 至急なんです~(>_<)!エクセル差込印刷(連番とんでる編)

    過去の質問で差込印刷などの要領はわかったのですが、同じような質問がないのでこちらから質問させていただきます。 sheet1に元データ sheet2が帳票用(印刷用)となってます。 sheet1のA列に連番が入ってますが、 こちらはA1=1、A2=空欄、A3=2、A4=3 などとランダムな行にに連番が入ってます。 B列に会員番号が入ってます。 なのでA列の連番の1.2.3.4.5.6のすぐ右横のセルB列(会員番号)をsheet2のA1セルに入れて連続印刷していきたいのです。 2500人ほどの会員への手紙を明日中に発送しなくちゃいけなくて困ってます。 ちなみに「sheet2」は「A1」のセルにさえ会員番号が入れば出来上がるようになってます。 どうかわかる方がいましたらお力添え宜しくお願いいたします。

このQ&Aのポイント
  • アキュフェーズのプリメインアンプ「E-305V」に関して、ボリュームモーターが勝手に回転し、音楽を聴くことができない状況になりました。
  • リモコンや家電製品が原因ではないことを確認しましたが、モーターが回転してしまう原因が分かりません。
  • 修理する場合は基盤修理が必要な可能性があります。自分で修理したいと考えています。
回答を見る

専門家に質問してみよう