列A 列B
1 AB001-A11-SV1234
2 AB001-A11-SD1
3 AB001-B11-SV1
4 AB001-B11-YYYY
5 AB002-A11-SV12/05E
6 AB002-B11-B1
7 AB002-B11-B1/GHU
8 AB002-a11-SD123
列AはAB002、AB003、AB004と、色んな組合せがづつきます。
その中で、AB001の場合は最後のハイフンの後が「SV」を含むものだけ列Bに返し、
しかしAB002の場合は、最後のハイフンの後が「B1」を含むものだけを列Bに返したいです。
具体的に行でいうと1,3、6,7行目が該当するので、その4つをB列に返したいです。
最終的にはAB001, AB002・・と製品ごとに売れた個数のグラフを作りますので列Bに返す以外のいい方法があればそれでもいいです。
「AB001*SV*」「AB002*B1*」とやって、IF関数などを使ってやっても「*」などのワイルドカードが使えない関数がありうまくいきません。
問題は製品はこれだけではなく、AB003, AB004以下続き、抜き出したいパターンが20~30個あります。
上記の2種類だけを抜き出すのならできたのですが2,30個あるのでどうしてもうまくいきません。
COUNTIFを含んだ関数でうまくいきそうだったこともありますが、COUTIF+COUTIF+・・・で結局、10個も入らず長さに限界があるようでできませんでした。
私の頭では限界です。
頭のいいかた、よろしくお願いいたします。
No.7
- 回答日時:
わたし的には、フィルタオプションをお勧めします。
もし、関数にこだわるのであれば、読み飛ばしてください。
フィルタオプションは、「データ」タブの並べ替えとフィルタから「詳細設定」をクリックします。
さらに、VBAの知識があれば、次のようなマクロでも実現可能です。
ちなみに、このマクロは添付画像のレイアウトを前提としています。
Sub Macro1()
Columns("A:A").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("C1").CurrentRegion, _
CopyToRange:=Range("E1"), Unique:=False
End Sub
ご回答ありがとうございます!
売上のデータをある部分にはりつけると、売上個数、金額、支店別、などの様々なグラフが一気に自動的にでるようにしなければいけません。
全体は完成しているのですが、製品の中でも特定のものだけを抜き出すこの質問に関することだけができないでいました。
なので今回はフィルタオプションは使えそうにないのですが、とても参考になりましたので、今後利用させていただきます。ありがとうございます。
No.6ベストアンサー
- 回答日時:
全体が11文字しかない場合があるわけですね。
11文字の場合をどうするかによりますが、左5文字&10,11文字目を表示するとすれば、
12文字以上の場合
C1=LEFT(A1,5)&RIGHT(LEFT(A1,12),3)
11文字の場合
C1=LEFT(A1,5)&RIGHT(A1,2)
とすればよいので、
C1=IF(LEN(A1)=11,LEFT(A1,5)&RIGHT(A1,2),LEFT(A1,5)&RIGHT(LEFT(A1,12),3))
でどうでしょうか?
ご回答ありがとうございます。
また私の説明不足でした。
11文字目が1~9と決まっているだけで、そこで終わる場合もあれば12文字目から何がくるかわからないです。なので結論からいうとうまく行きませんでした。
↑この補足かお礼を4,5日前に書いたつもりなんですが、みあたりません。
さきほど締め切られてしまい、続きをうかがうことができなくなってしまいました。
この最後の製品は今まで一つも出荷されていないものなので、途中まで教えていただいたところで利用させていただきます。
度々ありがとうございました。
No.4
- 回答日時:
そのままの形で抜き出したいのであれば、別の列(Dとします)に
D1=IF(COUNTIF(AA:AA,C1)=0,"",A1)
とすれば、C列(抜き出したいパターン表示)ではなく、A列(製品名そのまま)のデータを表示できますよ。
ありがとうございます!うまくいきました!
ただ今日会社に行ってみて一つ問題がありました。
AB005-A11-1、つまり、最後のハイフンの後が他のものは2桁なのに、このように1桁の製品がありました。これはやはりうまく行かず、文字が返せません。今それをどうするか考えています。
他の方のご回答を検証するのに時間がかかりそうなので、しばらく空くこともあると思いますが、1か月以内には締めたいと思いますので今しばらくおまちください。
No.3
- 回答日時:
No.2です。
>実際の製品には、AB003ならSVとSDの2つを抜き出したいという場合もあります。
というコトですので、↓の画像のように対応表を変えてみました。
E列1列だけにし、アンダーバーで繋いでいます。
(画像では10行目までをデータ対象として、その範囲にはまず使うことはないであろう「*」アスタリクスで空白セルをつぶしています)
範囲は実際のデータ数に合わせてください。
そして作業列C2セルに
=IF(A2="","",LEFT(A2,FIND("-",A2)-1)&"_"&MID(A2,FIND("#",SUBSTITUTE(A2,"-","#",2))+1,10))
という数式を入れフィルハンドルでこれ以上データはない!というくらいまで下へコピーしておきます。
最後にB2セルに
=IF(OR(ISNUMBER(FIND(E$1:E$10,C2))),A2,"")
配列数式ですので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は
上記数式をドラッグ&コピー → B2セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定!
フィルハンドルで下へコピーすると画像のような感じになります。m(_ _)m
ありがとうございます!難しいですね。
今日会社に行って見てみると、AB005-A11-1、つまり、最後のハイフンの後が他のものは2桁なのに、このように1桁のもがありました。今それをどうするか考えています。
また、製品名をそのまま載せるわけには行かないので簡単に書きましたが、実はAB001ではなくABCD001で、セルの位置も実際と違っていたりするので、数式を一つ一つ置き換えながら検証しながらしないといけないので、このご回答の方法をまだ試せていません。会社に行ってもこれに取り掛かれない日もあり検証に少し時間がかかりそうです。
1か月以内にはご報告するようにします。
No.2
- 回答日時:
こんばんは!
>上記の2種類だけを抜き出すのならできたのですが2,30個あるのでどうしてもうまくいきません。
というコトですので、一案です。
↓の画像のように対応表を作成し、作業用の列を設けてみてはどうでしょうか?
作業列C2セルに
=MID(A2,11,10)
という数すきを入れ、結果のB2セルに
=IF(ISNUMBER(FIND(VLOOKUP(LEFT(A2,5),E:F,2,0),C2)),A2,"")
という数式を入れます。
最後にB2・C2セルを範囲指定 → C2セルのフィルハンドルで下へコピーすると
画像のような感じになります。
※ 作業列が目障りであれば遠く離れた列にするか
非表示にしてみてください。m(_ _)m
ありがとうございます!美しいです。
理想的な形なのですが、私が説明不足なところがありました。
簡単にAB001はSVで、AB002 ならB1とわかりやすく書いたのですが、実際の製品には、AB003ならSVとSDの2つを抜き出したいという場合もあります。その場合は対応表のAB003のSVとAB003のSDがVLOOKで競合してしまって(?)、SDのところが空欄になってしまいます。
試しに、対応表のE4とF4にAB001のSDと入れてみると、結果のB3のセルが空欄になってしまいます。
はじめからいっておかなくて申し訳ありません!
また気が向きましたら、ご返信いただけるとありがたいです。急ぎません。
No.1
- 回答日時:
該当する部分だけ表示する列を作り、
その列に表示されたものが、抜き出したいパターン一覧に含まれていれば、B列にA列のデータ(或いは抜き出したいパターン)を表示する。
というのでどうでしょう?
抜き出したいパターンというのが他にどんなものがあるのか分かりませんが、
今の例ですと、左から5文字&左から10~12文字目の8文字(「-」を含む)で判別できるように思います。
C1=LEFT(A1,5)&RIGHT(LEFT(A1,12),3)
とすれば、C1に「AB001-SV」が表示されるはずです。
必要なだけコピーしてください。
別のシートなり他の列なりに抜き出したいパターン一覧を作ります。
仮にAA列に作ったとして、
B1=IF(COUNTIF(AA:AA,C1)=0,"",C1)
これで、AA列の中にC1と一致するものがなければ空白、
あればC1を表示する。となります。
必要なだけコピーしてください。
C1(AB001-SV)は該当するので、B1に「AB001-SV」が表示されます。
あとはB列に表示された「AB001-SV」の数をCOUNTIFで数えれば、
該当した「AB001-SV」の数が分かります。
早速のご返信ありがとうございます。
個数確かに出ます!
私が言葉足らずだったのですが、理想的には、該当するA列の製品名をAB001-SVとう形ではなく、そのままの形で出せたらいいです。
ゆくゆくは抜き出したものを他に利用するかもしれないので。
とはいえ、とりあえず個数がでるので助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ノートパソコン 「MacbookPro13インチ Mid 2012」を使ってますが、フレックスケーブルの交換について 1 2022/05/06 22:07
- Excel(エクセル) エクセルで、 A1セルに「A」という値、 B1セルに「B」という値が入っています。 どちらも表示形式 5 2023/02/22 23:05
- Excel(エクセル) Excel 文字列を結合するときに重複をなくしたい 関数・VBA 2 2022/12/12 10:40
- Excel(エクセル) Excel 一つのセルに2つの関数を入れたい 9 2023/06/08 18:16
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
- 高校 行列のかけ算 2 2022/06/24 17:12
- 友達・仲間 友達に嫌われたかも 2 2022/04/30 20:09
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
- モニター・ディスプレイ 突っ張り棒につけれるマイクアームを探しています。下記リンクはモニターアームですがそのようにポールにつ 3 2022/09/07 01:18
- ロック・パンク・メタル ジミ・ヘンドリックスのCD、レコード 1 2022/03/30 08:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでセルの値が同じか...
-
エクセルを使っていて2024/5/15...
-
【マクロ】必要な項目(列)の...
-
(マクロ)データをAブックからB...
-
エクセルVBA、別ブックへ転記す...
-
Microsoft 365の Excel を使用...
-
エクセル②
-
エクセルの暗号化なしのバーの...
-
エクセルの計算
-
指定文字の間に
-
Excelで縦軸の書式を0:00形式の...
-
エクセルで年休を管理する方法...
-
エクセル:一覧表に存在する文...
-
Excel
-
Googleスプレッドシートでファ...
-
エクセルでの作業計算方法について
-
UNIQUE関数が使えないバージョ...
-
エクセルで日付を数字+アルフ...
-
エクセル 白黒印刷で白線を印刷...
-
Excel ピボットテーブルで日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報
度々ありがとうございます!
来週以降、会社に行って試してみます。
はじめから言っておかなくて、何度も申し訳ありません。
ほんとうに感謝です!!
ご回答ありがとうございます!
来週会社に行って試してみます。
他の業務があり、なかなか取り掛かれない日が多いので日数かかるかもしれません。
また結果ご報告します。
ありがとうございました。