[[20211227133517]] 『Excelのマクロを使用して条件に合ったデータ』(JIN) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Excelのマクロを使用して条件に合ったデータを取り出したい』(JIN)

仮にA列にデータがあり
「☆」と「□」が入っているデータに対してB列に区分を付ける(「1」や「あり」でも可)
「□」しか入ってない場合は、スルーする様な事はできますか?(「ブランク」や「0」でも可)
☆株式会社□部長様
株式会社□部長様
この場合は、「☆株式会社□部長様」は、1
この場合は、「株式会社□部長様」は、0 の様に

また、その条件を増やすことが可能でしょうか?
「〇」「●」「◎」「△」「▽」「▲」「▼」「□」「■」「◇」「◆」「☆」「★」
実際にはこの記号に人の名前や言葉などを入れます。

□しか入ってない場合は、「ブランク」や「0」
それ以外の記号が入っている場合は、「1」や「あり」
どの文言も入ってない場合も同様に□しか入ってない場合と同じ扱い
このようにしたいと思っています。

この様なマクロの式が可能でしたら宜しくお願いします。

< 使用 Excel:unknown、使用 OS:unknown >


どこまで取り組んでいますか。
(ymkrs) 2021/12/27(月) 13:43

自分では想像しかできなかったので
マクロ自体は出来てません。

「1」や「あり」になるものを選択して区分けして
最後に「□」しかない物を手動で省いてました。

しかし、毎日行う作業の為、自動でできたらと思い投稿しました。
(JIN) 2021/12/27(月) 15:01


findを使って実装する例になりますが、
「〇,●,◎,△,▽,▲,▼,□,■,◇,◆,☆,★(□以外の記号)」をA1:L1にそれぞれ代入して、
A2〜下方向にデータがあると想定し、
B列を作業列として扱い、B2に「=MAX(IFERROR(FIND($A$1:$L$1,A2),0))」と入力し、cntl+Shift+Enter
を押します。
そして、C2に「=IF(B2>0,"1","0")」と入れます。

あとはBとCをフィルコピーでできるはずです。
(ymkrs) 2021/12/27(月) 15:44


     |[A] |[B]                                 |[C]               |[D]|[E]|[F]|[G]|[H]|[I]|[J]|[K]|[L]
 [1] |〇  |◎                                  |●                |△ |▽ |▲ |▼ |■ |◇ |◆ |☆ |★ 
 [2] |〇  |=MAX(IFERROR(FIND($A$1:$L$1,A2),0)) |=IF(B2>0,"1","0") |   |   |   |   |   |   |   |   |   
 [3] |●  |=MAX(IFERROR(FIND($A$1:$L$1,A3),0)) |=IF(B3>0,"1","0") |   |   |   |   |   |   |   |   |   
 [4] |◎  |=MAX(IFERROR(FIND($A$1:$L$1,A4),0)) |=IF(B4>0,"1","0") |   |   |   |   |   |   |   |   |   
 [5] |△  |=MAX(IFERROR(FIND($A$1:$L$1,A5),0)) |=IF(B5>0,"1","0") |   |   |   |   |   |   |   |   |   
 [6] |▽  |=MAX(IFERROR(FIND($A$1:$L$1,A6),0)) |=IF(B6>0,"1","0") |   |   |   |   |   |   |   |   |   
 [7] |▲  |=MAX(IFERROR(FIND($A$1:$L$1,A7),0)) |=IF(B7>0,"1","0") |   |   |   |   |   |   |   |   |   
 [8] |▼  |=MAX(IFERROR(FIND($A$1:$L$1,A8),0)) |=IF(B8>0,"1","0") |   |   |   |   |   |   |   |   |   
 [9] |■  |=MAX(IFERROR(FIND($A$1:$L$1,A9),0)) |=IF(B9>0,"1","0") |   |   |   |   |   |   |   |   |   
 [10]|◇  |=MAX(IFERROR(FIND($A$1:$L$1,A10),0))|=IF(B10>0,"1","0")|   |   |   |   |   |   |   |   |   
 [11]|◆  |=MAX(IFERROR(FIND($A$1:$L$1,A11),0))|=IF(B11>0,"1","0")|   |   |   |   |   |   |   |   |   
 [12]|☆  |=MAX(IFERROR(FIND($A$1:$L$1,A12),0))|=IF(B12>0,"1","0")|   |   |   |   |   |   |   |   |   
 [13]|★  |=MAX(IFERROR(FIND($A$1:$L$1,A13),0))|=IF(B13>0,"1","0")|   |   |   |   |   |   |   |   |   
 [14]|□  |=MAX(IFERROR(FIND($A$1:$L$1,A14),0))|=IF(B14>0,"1","0")|   |   |   |   |   |   |   |   |   
 [15]|★□|=MAX(IFERROR(FIND($A$1:$L$1,A15),0))|=IF(B15>0,"1","0")|   |   |   |   |   |   |   |   |   

頂いた関数で実行したところ
□が関係なくB1に◎がある場合A列の◎の所で1と表示されます。
何か意味合い間違えてますでしょうか?
(JIN) 2021/12/27(月) 17:03


Ctrl+Shift+Enter をお忘れではないですか。
数式バーの内容が下記の様に{}で括られていますか?
{=MAX(IFERROR(FIND($A$1:$L$1,A2),0))}

https://excel-doctor.jp/array-formula/
(参考) 2021/12/27(月) 20:25


 B1セル =COUNTIF(A1,"*"&H$1&"*")*SIGN(SUMPRODUCT(COUNTIF(A1,"*"&H$2:H$50&"*")*(H$2:H$50<>"")))

 下にコピー

  <結果図>
  行  _________A_________  _B_  _C_  _D_  _E_  _F_  _G_  _H_  _____I_____
   1  ☆株式会社□部長様     1                           □   必須       
   2  株式会社□部長様       0                           ○   一つは必要 
   3  □株式会社☆部長様     1                           ◎   一つは必要 
   4                                                     ●   一つは必要 
   5                                                     △   一つは必要 
   6                                                     ▽   一つは必要 
   7                                                     ▲   一つは必要 
   8                                                     ▼   一つは必要 
   9                                                     ■   一つは必要 
  10                                                     ◇   一つは必要 
  11                                                     ◆   一つは必要 
  12                                                     ☆   一つは必要 
  13                                                     ★   一つは必要 
  14                                                                     

(半平太) 2021/12/27(月) 21:40


すみません、ただのコピーでした。

cntl+Shift+Enterって初めて使いました…
これは何なのですか?
(JIN) 2021/12/28(火) 09:42


 >『Excelのマクロを使用して
 マクロで作ってみました。
 Sub Test()
    Dim c As Range, ary As Variant

    For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp))
        c.Offset(, 1).Value = 0
        For Each ary In Array("〇", "●", "◎", "△", "▽", "▲", "▼", "■", "◇", "◆", "☆", "★")
            If InStr(c.Value, "□") > 0 And InStr(c.Value, ary) > 0 Then
                c.Offset(, 1).Value = 1
                Exit For
            End If
        Next
    Next
 End Sub

(ピンク) 2021/12/28(火) 11:15


ピンクさん、ありがとうございます!
これ良いっす!

半平太さんのも新しい方法で勉強になりました!
(JIN) 2021/12/28(火) 17:55


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.