プロが教える店舗&オフィスのセキュリティ対策術

エクセルで下記のようなデータがあります!

シート1
名前 |りんご好き |みかん好き|ぶどう好き|
B男| ○. |. |. ○ |
A子|. ○ |. | ○ |

シート2
名前|りんご好き|ぶどう好き
B男 ○ ○
A子 ○ ○

のように丸の入ってる項目だけを抽出したいです!
色々やってみましたが、上手く抽出されません
よろしくお願いします。

質問者からの補足コメント

  • うーん・・・

    説明が解りづらくて申し訳ありません。
    実際のデータは人物は30人ほど、どんどん増える予定で、質問項目は50項目あります。
    その中には一人も○をつけてない項目もあります。
    なので、DEBU-NEKARUさんの言うようなデータの場合
    名前|りんご好き|みかん好き|ぶどう好き
    C男 |. | ○. |
    と出して、本当に1人も○をつけてないデータだけ省略しようと思っています。
    実際はC男はみかん好きだけのデータで抽出したいですが、そうすると他の人の時に項目をどうするかとなりそうなのでよろしくお願いします。

      補足日時:2018/08/03 15:46
  • 質問本文に補足しました。
    もしよろしければ、回答頂けないでしょうか。
    よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/08/03 16:06
  • うーん・・・

    .は、ただの誤入力です。申し訳ありません。
    説明が解りづらくて申し訳ありません。
    オートフィルターはすみませんが事情があり使わず関数かVBAでと考えていますが、VBAも関数も作ってはみたんですが、上手く抽出できなくて、他の方ならどのような感じで組むのか知りたくて質問しました。
    どうぞよろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/08/03 16:37

A 回答 (7件)

〇の無い列をSheet2では表示させないようにしました。




図は上がSheet1、下がSheet2です。

Sheet1に以下の式をいれる
 B1 =COUNTIF(B$3:B$100,"〇")
 右方向へフィル
 $100の部分は人数に応じて適宜変更

Sheet2に以下の式をいれる
 B1 =IFERROR(INDEX(Sheet1!$A2:$Z2,,SMALL(IF(Sheet1!$B$1:$Z$1>0,COLUMN(Sheet1!$B$1:$Z$1)),COLUMN(B$1)-1)),"")
 注:配列数式なのでCtrl+Shift+Enter同時押しで入力すること
 右方向および下方向へフィルする
 式中の$Z2や$Z$1の"Z"は質問数に応じて適宜変更

ただしこのままでは〇の無いセルにゼロが表示されてしまうので
 セルの書式設定→表示形式→ユーザー設定で [=0]"" を設定する
「エクセルで○のついた項目を抽出」の回答画像5
    • good
    • 0
この回答へのお礼

助かりました

どうも、ありがとうございました!
やりたかった事が上手く出来ました。
非常に解りやすく簡潔に教えて頂き助かりました。
改めて、ありがとうございました!

お礼日時:2018/08/09 12:37

ご質問の仕様とは、多少異なりますが、こんな方法もあります。


このマクロは、Sheet1の2行目以降(A~F列)に実数が入力(〇にこだわらず)されている列だけをSheet2にコピーします。

Sub sample()
Dim myRng As Range
Set myRng = Worksheets("Sheet1").Range("A2:F" & Rows.Count)
Set myRng = myRng.SpecialCells(xlCellTypeConstants, 23)
Set myRng = Intersect(myRng.EntireColumn, Worksheets("Sheet1").Rows(1))
myRng.EntireColumn.Copy Destination:=Worksheets("Sheet2").Range("A1")
End Sub

ちなみに、この程度の作業ならマニュアル操作でも可能ですよ。頻繁に行うのであればVBAも有効ですが、たまにしか使わない、または、その度に条件が変わるような場合は、マニュアル操作をお勧めします。
    • good
    • 0
この回答へのお礼

ありがとう

こういった方法も、自分一人では思いつかず参考になりました。
詳しい説明とともに記載して頂きありがとうございました!

お礼日時:2018/08/09 12:41

こんばんは!



別シートに「○」がついている項目名を表示させるのはどうでしょうか?
手っ取り早くVBAでの一例です。

↓の画像のような配置で元データはSheet1にあり、Sheet2に表示するとします。

標準モジュールにしてください。

Sub Sample1()
 Dim i As Long, j As Long
 Dim cnt As Long, wS As Worksheet
  Set wS = Worksheets("Sheet2")
   wS.Cells.ClearContents
   wS.Range("A1") = "名前"
    With Worksheets("Sheet1")
     cnt = 1
     For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
      If WorksheetFunction.CountIf(.Rows(i), "○") > 0 Then
       cnt = cnt + 1
       wS.Cells(cnt, "A") = .Cells(i, "A")
        For j = 2 To .Cells(1, Columns.Count).End(xlToLeft).Column
         If .Cells(i, j) = "○" Then
          wS.Cells(cnt, Columns.Count).End(xlToLeft).Offset(, 1) = .Cells(1, j)
         End If
        Next j
      End If
     Next i
      wS.Columns.AutoFit
    End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
「エクセルで○のついた項目を抽出」の回答画像6
    • good
    • 0
この回答へのお礼

ありがとう

こちらも、参考になりました!
次回使えそうな内容で早速メモさせて頂きました!
ありがとうございました!

お礼日時:2018/08/09 12:39

シート1のレイアウトは添付図であってますか。


また、添付図のような場合、どのような結果を望みますか。
赤線で囲んだセルが該当セルと考えて良いですか。
画像で望む結果(シート2)を提示していただけると、よりわかりやすかと。
画面の画像の切り取りは、アクセサリのsnipping toolを使うと便利です。
(この画像もsnipping toolを使ってます)
「エクセルで○のついた項目を抽出」の回答画像4
    • good
    • 0
この回答へのお礼

解決しました

お返事が、遅くなり申し訳ありません。
慌てていたため、次回はより解りやすくpcからスクショ等も交えながら質問しようと思います。

お礼日時:2018/08/09 12:42

並び替えか、accessに変換して、クエリで抽出か?


オートフィルターで一時的に表示したものを別シートでコピーした後、もとのシートは、オートフィルターを解除する!
    • good
    • 0
この回答へのお礼

解決しました

ありがとうございました!

お礼日時:2018/08/09 12:43

こんにちは



いまひとつなさりたいことがよくわかりませんが・・・
(各セルの区切りが「|」なのでしょうが「.」の意味がわからないし)

『いろいろな条件に応じてデータを抽出したい』
ということかと想像しますので、そのまま「オートフィルタ」の機能を利用すればよさそうに思います。

結果だけを別の範囲に表示したければ、フィルタオプションを利用すれば可能です。
https://pasonyu.com/how-to-use-auto-filter-for-e …
この回答への補足あり
    • good
    • 0

シート2の名前は、固定ですよね?



名前 |りんご好き |みかん好き|ぶどう好き|
C男| . |○.|. |

この場合どのように シート2に表示させるのか 捕捉してください
この回答への補足あり
    • good
    • 0

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