Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2003)
複数の項目から選択されたものを表示させる方法
投稿日時: 19/03/07 15:03:27
投稿者: オンバンちゃん

複数の項目から選択されたものを表示させる方法を教えてください。
 
Sheet2に以下のような表があったとします、Aせるにはチェックボックス(例えばですが)のようなものがあったとし、選択された「トマト」と「いちご」の文字をSheet1のA1セルに表示させたいと考えています。
いい方法がありましたら、ご教示いただければと思います。よろしくお願いいたします。
 
 
   A    B     C
1  □   りんご
 
2  ☑   トマト
 
3  □   レモン
 
4  ☑   いちご
 
 

回答
投稿日時: 19/03/07 16:36:43
投稿者: WinArrow
投稿者のウェブサイトに移動

2つの質問があります。
  
質問1
>選択された「トマト」と「いちご」の文字をSheet1のA1セルに表示させたい
  
単純に文字列結合させればよいのですか?
  
質問2
  
Sheet2のA列で判断するのですが、
どのような「値」が入っていると考えているのですか?
  
因みに
文字列結合
の方法としては
「&」と「CONCATENATE」関数があるのはご存知ですか?
 
これとIF関数の組み合わせで、お望みの事が実現できるかもしれませんが、
判断する個数は、いくつくらいあるのでしょうか?
 

回答
投稿日時: 19/03/07 19:32:17
投稿者: んなっと

 
まずは...
 
●Sheet2
 
 フォームのチェックボックスをA1にかぶせて配置
→コントロールの書式設定 コントロール 
→リンクするセル: A1
→OK
→A2,A3,A4...も同じ
→A列のフォント白
 
    A    B
1  TRUE りんご
2 FALSE トマト
3  TRUE レモン
4 FALSE いちご
 
●Sheet1
 
    A
1 りんご
2 レモン
3    
4    
 
A1
=INDEX(Sheet2!B:B,SMALL(INDEX(ROW(A$1:A$500)+10^4*(Sheet2!A$1:A$500<>TRUE),),ROW(A1)))&""
下方向・↓

回答
投稿日時: 19/03/09 11:26:49
投稿者: WinArrow
投稿者のウェブサイトに移動

本質問は、
 一部のバックグランド(仮定)だけを提示し、手段だけを求めるものです。
  
未開示のバックグランド
@求めたデータをどのように使うのか?
  目的に対応した手段を探るもので、手段だけを求めると、
  もちろん試行錯誤になりますが、それが、よい方法なのかは、回答者は判断できません。
  
ASheet2のデータ件数
  Sheet2のA列にチェックボックスを用意(例えば)としているが、
  対象とするデータが、どのくらいあるのか?
  そのデータ件数に対応できるチェックボックスをどのように用意する(できる?)のか?
  
Bこの作業(操作する)の頻度は?
  1回だけの操作だけなのか?
 毎日なのか?月に1回なのか?・・・等
  
Cこの手段を改変する場合の対応は誰なのか?
  難しい手段を作成した場合、メンテナンスができるか?
  
など、いろいろな要件を考慮した手段を考えなければいけないと
考えます。
 
対応を考えるうえで、ネックとなるのは、
 抽出した文字列を結合して1つのセルに格納することです。
 
 もし、「んなっと」さんのレスにあるような、
 文字列結合しない方式ならば、オートフィルタ〜コピペでも対応可能です。
 
 
  
 

投稿日時: 19/03/13 14:42:45
投稿者: オンバンちゃん

WinArrow 様
  
質問1
>選択された「トマト」と「いちご」の文字をSheet1のA1セルに表示させたい
 
A1. 選択された、「トマト・いちご」のような感じで表示させたいです。
 
  
単純に文字列結合させればよいのですか?
  
質問2
  
Sheet2のA列で判断するのですが、
 
判断する個数は、いくつくらいあるのでしょうか?
 
A2.判断する個数とは、トマトやいちごなどのようなことですか?それであれば27個になります。

回答
投稿日時: 19/03/13 15:28:47
投稿者: WinArrow
投稿者のウェブサイトに移動

投稿日時: 19/03/09 11:26:49
の質問については、ご回答していただいてありませんが、
 
数式では無理かな?と思います。
 
ユーザー定義関数・・・つまり、VBAで対応することになりますが、
 
あなたに、作成する意思(メンテナンスを含めて)あるならば、
コードを提供できませんがヒントを紹介します。

回答
投稿日時: 19/03/13 15:43:55
投稿者: んなっと

●Sheet1
 
            A
1 りんご・トマト・レモン
2            
3            
4            
5            
6            
 
A1
=INDEX(Sheet2!B:B,SMALL(INDEX(ROW(A$1:A$500)+10^4*(Sheet2!A$1:A$500<>TRUE),),ROW(A1)))&IF(LEN(A2),"・"&A2,"")
下方向・↓
 
 A2から下を選択
→表示形式 ユーザー定義
;;;

回答
投稿日時: 19/03/13 16:19:37
投稿者: んなっと

Sheet2でチェックボックスを挿入するのが面倒なときは、
1度だけマクロを有効にして、チェックボックスを挿入したいセル範囲を選択してから
下のマクロ実行。
 
Sub test()
  Dim r As Range
  Selection.Font.Color = vbWhite
  For Each r In Selection
    With ActiveSheet.CheckBoxes.Add(r.Left + r.Width * 0.3, r.Top, r.Width * 0.7, r.Height)
      .Text = ""
      .Value = xlOff
      .LinkedCell = r.Address
    End With
  Next
End Sub

回答
投稿日時: 19/03/13 16:28:27
投稿者: WinArrow
投稿者のウェブサイトに移動

ユーザー定義関数の作成方法を紹介します。
 
標準モジュールに
次のようなプロシジャを作成します。
 
Function 結合(ST2CELL As Range)
 
End Function
 
※プロシジャ名:「結合」は任意です。
※引数:「ST2CELL」任意です。
 
プロシジャの中身
Sheet2のA列セル=Trueを判断して
対応するC列セルの値を配列に格納します。
最後に配列をJOINで結合して、プロシジャ名「結合」に代入します。
 
Sheet1のA1セルに入力する数式
=結合(Sheet2!A1:A30)
を入力します。
※A30は任意です。
 
 

回答
投稿日時: 19/03/13 20:16:34
投稿者: WinArrow
投稿者のウェブサイトに移動

ユーザー定義関数の説明の中で、文章の誤りがありました。
 
下記訂正します。
 
>対応するC列セルの値を配列に格納します。

対応するB列セルの値を配列に格納します。

投稿日時: 19/03/19 10:38:13
投稿者: オンバンちゃん

WinArrow 様
んなっと 様
 
お疲れ様です。
大変参考になりました。
ありがとうございました。
また何かありましたら、よろしくお願いいたします。