• ベストアンサー

セルの位置情報について

A1からC3までの範囲で 1 0 1 0 1 1 1 1 0 とあるとするとき、 セルの値が1となっている位置を抜き出したいのです。 上の例だと A1 C1 B2 B3 C1 C2 というように揃えて出力したいのですが、どうすればいいのか教えてください。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3補足> 残念ながら、色の付いたセルの値をワークシート関数で取り出すことはできません。 なので必然的にマクロを使うことになるのですが、 ユーザー定義関数として、色の付いたセルの値を返す関数を作ってみました。 便宜的にこれを使うと同様のことができます。 '色の付いたセルの最初(規定値)の値を求める Public Function colorCell(r As Range, Optional pos = 1) Application.Volatile '自動再計算関数にする Dim x As Range, c c = 0 For Each x In r If x.Interior.Color <> RGB(255, 255, 255) Then '白(色がついてない、標準の状態)でない c = c + 1 If c = pos Then colorCell = x.Value: Exit Function End If Next colorCell = "" End Function 使い方、 ALT+F11でVBEの画面で「挿入」「標準モジュール」で 標準モジュールをダブルクリックしてでてくる画面に貼り付けると使用できるようになります。 colorCell(セル範囲) で、最初に見つかった色の付いたセルの値を返します。 また colorCell(セル範囲,数値) 数値番目に見つかった色の付いたセルの値を返します。 #3の場合 =colorCell($A1:$C1,COLUMN(A1)) のような式をコピーして範囲を選んで貼り付けします。 【注意】 セルに色を付ける行為は、セルの再計算のきっかけにはなりません。 なので、式を入力してから色を付けたり色を付け替えたりしても再計算されません。(表示が変わりません)その場合、F9キーを押して下さい。

その他の回答 (4)

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

#3です。 >選ぶという作業は色をつけたときにその人の名前を選ぶとしたいのです 選んでセルに色を付けても、今のところエクセルでは、それを識別する関数はありません。 =Cell("Format",A1)も駄目でした。 従ってVBAを使わないと出来ないのではないでしょうか。

heero_yuy
質問者

お礼

BLUEPIXYさん、imogasiさん再回答、アドバイスありがとうございます。 なるべくマクロを使わずにとおもいましたが、マクロを使ってやってみようとおもいます。

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

#1のご回答の式と似ていますが 例えばA6に=IF(A1=1,ADDRESS(ROW(A1),COLUMN(A1),4),"")といれてC6まで式を複写する。 その後A6:C6を範囲指定して、+ハンドルを出し、A8:C8まで引っ張る。 結果 A1 C1 B2 C2 A3 B3 とアドレス文字表示になる。 ----- これを左詰めにするのが厄介なように思う。 そこでVBAで Sub test01() Dim cl As Range For Each cl In Selection If cl = "" Then cl.Delete Shift:=xlToLeft Next End Sub をつくり(注)、 A6:C8を範囲指定して実行する。 結果 A1 C1 B2 C2 A3 B3 となりました。 (注)ツール-マクロ-VBEでVBE画面になる。そこのメニューの挿入-標準モジュールをクリックし、出てきた画面に上記コードをコピペする。 #1さんと同じく、何でこんな事するのかニーズが知りたいですね。

heero_yuy
質問者

補足

BLUEPIXYさん、hokutakuさん、imogasiさん回答ありがとうございます。 こちらで、補足説明させていただきます。 今回の表の目的は作ることです。 その日によって当番の候補になる人物います。 鈴木 佐藤 山田 福田 斉藤 高木    ・・・ というようになっています。 上の例ですと、1日3人ということになりますが、この中から2名を選んだときにその2名を別の表に出力したいのです。鈴木と山田、斉藤と高木を選んだ場合、 鈴木 山田 斉藤 高木 としたいのです。 今のところ、選ぶという作業は色をつけたときにその人の名前を選ぶとしたいのです。 できれば、マクロを使わずに済んだらと思い質問させていただきました。

  • hokutaku
  • ベストアンサー率21% (4/19)
回答No.2

オートフィルタを使って1だけ表示し、出力したいセルにコピーする(A~Cに対してそれぞれ)操作をマクロに登録する。ただ、その時によって、元の1のセル番地が変動するなら、マクロを作成する時にコピーするセルは、表の最終行以上のコピーを各A~Cに対してしないとだめですよ。 例えば元になる表が、A10までなら、コピーするのはA10までとゆうことです。説明しにくいんですけど、わかってもらえますか? そうすれば、どのように1の位置が変動しても、ボタン一つで簡単に出力できます。 ただ、目的がいまいち文章からつかめませんので、質問者さんの答えに対して、ストレートな答えであって、何を作りたいかの目的がわかれば、もう少し適切なアドバイスができるかもしれません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

マクロでやれば簡単だと思うのですが、 多分、マクロでやるのは(入力に即時反応しないから)意味がないのでしょうね。 関数式でなんとかできるような気もするのですが、 式が複雑になりすぎて困難です。 単純に A1,  ,C1   ,B2,C2 A3,B3, のような感じ(間を詰めない、行列を入れ替えない) ではダメなのでしょうか? その場合だと =IF(A1=1,ADDRESS(ROWS($A$1:A1),COLUMNS($A$1:A1),4),"") というような式をコピーすればいいと思うのですが。 答えになってなくて、ごめんなさい。 あと、この処理にどういう意味があるのでしょうか? よければ、教えて下さい。

関連するQ&A