「教えて!ピックアップ」リリース!

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

A 回答 (8件)

D列の適当なセルに「TRUE」と入力されているのであれば、



B1に=IF(D1,1,"")
B2に=IF(D2,COUNT(B$1:B1)+1,"")として以下コピー

ではいかがでしょうか。
    • good
    • 4
この回答へのお礼

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

お礼日時:2004/12/30 14:54

配列数式で出来ました。


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

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

お礼日時:2004/12/30 19:05

#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 …

なお
>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 …
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/12/30 18:50

>マクロを使えば可能なのでしょうが、関数だけでできる方法があればそうしたいです。



関数による解は、既に多数の回答がなされています。ご参考までにマクロでの解です。標準モジュールに貼り付けて使用します。


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
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/12/30 15:21

B1セルは


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

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

お礼日時:2004/12/30 15:16

多分もっとスマートな方法があると思うのですが、一応結果だけはご希望のものが出ましたので…


A列:連番
D列:IFかなにかで条件付けしてTUREを出してある。
そこで
B列は=COUNTA(D$2:D2)
C列には:=IF(B2=B1,"",B2)
と入れるとご希望の結果が出ましたが…

この回答への補足

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

補足日時:2004/12/30 18:53
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/12/30 15:07

D列オートフィルターで、Trueの行だけ抽出します。


その結果に対して、B列に最初の番号を振り、あとはオートフィルで連番が振れませんか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/12/30 14:10

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

この回答への補足

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

補足日時:2004/12/30 14:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング