誕生日にもらった意外なもの

エクセル2003ですが、A列(500行に氏名が500人分記述されています)、この状態で、この500人の中から該当者のみ、黄色でセルを色塗り(バケツのツール)ました。
で、該当者を見るとき、A列をずーと下までみるのが面倒なので、B列にこのA列で黄色にいろ塗りした氏名のメンバーのみを集めたいのですが、、、
可能でしょうか?
(A列で黄色くいろ塗りしたら、リアルで即、B列に反映した表示されるというものをイメージしているのですが、、、
宜しくご教示ください。

A 回答 (3件)

こんばんは。



>(A列で黄色くいろ塗りしたら、リアルで即、B列に反映した表示されるというものをイメージしているのですが、、、

確かに、それは可能なのですが、その設定は、もう少し複雑になります。それでも良ければ、ご提示いたします。つまり、以下のマクロコードを働かせるための、書式設定ボタンにイベントをつけることです。以下は、一応、対話モードになっています。

'標準モジュールに設定してください。
Sub ColorCollection()
  Dim Data() As Variant
  Dim c As Variant
  Dim r As Range
  Dim i As Long
  Dim j As Long
'データ取得
SetStart:
  On Error Resume Next
  Set r = Nothing
  Set r = Application.InputBox("色のついたセルを指定してください。", Type:=8)
  If r Is Nothing Then Exit Sub
  On Error GoTo 0
  i = r.Interior.ColorIndex
  If i = xlColorIndexNone Then
   MsgBox "そこは、色つきできありません。", vbInformation: GoTo SetStart
  End If
  For Each c In Range(Cells(1, r.Column), Cells(65536, r.Column).End(xlUp))
   If c.Interior.ColorIndex = i Then
     ReDim Preserve Data(j)
     Data(j) = c.Value
     j = j + 1
   End If
  Next
  PasteData r, Data()
  Set r = Nothing
End Sub
Private Sub PasteData(rng As Range, Data() As Variant)
'データ貼り付け用のルーチン
  Dim PasteRange As Range
  Dim r As Range
 
  Set PasteRange = Cells(1, rng.Column).Resize(UBound(Data()) + 1, 1)
  If WorksheetFunction.CountA(rng.Offset(, 1).EntireColumn) = 0 Then
   PasteRange.Offset(, 1).Value = WorksheetFunction.Transpose(Data())
  ElseIf MsgBox("隣の列に上書きしてよろしいですか?", vbInformation + vbYesNo) = vbYes Then
   rng.Offset(, 1).EntireColumn.ClearContents
   PasteRange.Offset(, 1).Value = WorksheetFunction.Transpose(Data())
   Else
   On Error Resume Next
    Set r = Application.InputBox("適当な列を指定してください。", Type:=8)
    If r Is Nothing Then Exit Sub
   On Error GoTo 0
    Set PasteRange = Cells(1, r.Column).Resize(UBound(Data()) + 1, 1)
    PasteRange.Value = WorksheetFunction.Transpose(Data())
  End If
  Set PasteRange = Nothing
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
理解できるように努力をする、勉強をする、これのみです。
ありがとうございました。

お礼日時:2006/03/08 20:17

#2のimogasiさんへ


Wendy02です。

>セルに色づけされたという「イベント」を捉えるものはVBAレベルでないと思うので、不可能でしょう(#1のご回答がそれだったらすみません)。

#1の回答はそれではありません。クラスによるコマンド・ボタンへのイベントというテクニックになります。しかし、クラスによるイベントは、書式の設定のボタンが複数なので、設定が複雑で、作るほうはもちろんのこと、貼り付ける側も間違えて動かない、ということになりかねないので、紹介するのはやめました。
    • good
    • 0
この回答へのお礼

自分が考えていたほど、単純ではなく、複雑で驚いております。
ありがとうございました。

お礼日時:2006/03/08 20:18

たった今、セルに色づけされたという「イベント」を捉えるものはVBAレベルでないと思うので、不可能でしょう(#1のご回答がそれだったらすみません)。

抜き出したい都度、ボタンやメニューを押すや約束したセルを選択する、そのセルの値を変えるなど、きっかけ(イベント)を人間が与えてくれるなら、VBAでその都度再処理して抜きだせるでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
いやー、難しいんですね。
勉強しないと、、

お礼日時:2006/03/08 20:15

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