エクセルでのリストの編集方法を教えてください。

下記のような商品リストがあります。全て文字列形式です。
A列:商品コード (例:ATR-0001)半角英数
B列:バリエーション名 (例:カラー)全角
C列:バリエーション値 (例:ブラック)全角
D列:バリエーション品番 (例:-bk)半角英数


このとき、A列の値が同じでかつ、B列の値が同じ行の場合、
C列の値をつなげた値をE列に、
D列の値をつなげた値をF列に返したいです。

A列とB列が同じ値なら、E列、F列に入る値も同一で結構です。
ただ、つなげる際は値と値を半角コロンで区切る必要があります。

同じ値が何行並ぶかどうかは一定ではなく商品ごとに異なります。

VBAでも数式でも結構です。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

データが商品コード、バリエーション名の順で


ソートされているのが前提です。

作業列を2つ使います。
E2に
=IF(AND(A2=A1,B2=B1),E1&":"&C2,C2)
F2に
=IF(AND(A2=A3,B2=B3),"",E2)
G2に
=IF(F2="",G3,F2)
と入力して、E2:G2を最終行まで複写します。

ちなみにE2の式は1行目に入れたらエラーになります。
もしタイトル行がなく1行目からデータなら、E1のみ
=C1
として、E2以降に上記の式を入れてください。
「エクセルでの条件付きの値結合」の回答画像3
    • good
    • 0
この回答へのお礼

すごい。できました。
わかりにくい質問にも関わらずありがとうございます。
また、画像を添付できることを知っていれと後悔しております。

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

お礼日時:2009/05/21 18:20

#1の補足を見ても、質問の内容が良くわからない。

4-5行ぐらいで且つA-F列の実例を挙げて、コウだから、このセルの結果をこのようにしたい、と言う風に、文章で説明しないと。質問のしかたの常識と思う。エクセルの解説書には、実例の表と、結果にいたる説明文が有るでしょう。
基本的に同行のA-F列を&で結合してお仕舞いと思うが、上行と同じの場合、空白セルにしてあるとかのことか難しくしているのか。
回答者は、学校側が条件・方法を決めて試験を受けているようなのではない。VBAでも数式でも結構ですと言っても、VBAは特に、コードを書いてくれというのは、規約違反だと思う。質問者がそれを作れる近いレベルまで勉強してから疑問の的を絞って言ってほしい。

この回答への補足

申し訳ございません。
確かに、自分だけしかわからない質問内容でした。
下記に例を記入して補足させていただきます。

A1:商品コード  B1:バリエーション名  C1:バリエーション値  D1:バリエーション品番
A2:ATR-0001  B2:カラー       C2:ブラック      D2:-bk
A3:ATR-0001  B3:カラー       C3:ホワイト      D3:-wh
A4:ATR-0001  B4:サイズ       C4:L         D4:-l
A5:ATR-0001  B5:サイズ       C5:M         D5:-m

この時、
A2とA3が同じ値でかつ、B2とB3が同じ値なので、
E2とE3には、『ブラック:ホワイト』と、
F2とF3には、『-bk:-wh』と入るようにしたいです。

A~D列には空白セルはなく、ソートされた状態です。

どんな数式を組合わせれば実現するでしょうか。

よろしくお願いいたします。

補足日時:2009/05/21 18:00
    • good
    • 0

>このとき、A列の値が同じでかつ、B列の値が同じ行の場合



「何」と同じなんですか。A,B共判りません

>C列の値をつなげた値をE列に、
>D列の値をつなげた値をF列に返したいです。

これも、「何」とC列、D列をつなげるのか判りません

この回答への補足

説明不足で申し訳ございません。

例えば、A1とA2の値が同じでかつB1とB2の値が同じ場合、
同じ行のC列(C1とC2)の値をつなげ、E1とE2へ
また、
同じ行のD列(D1とD2)の値をつなげ、F1とF2へ返したいと言う内容です。

補足日時:2009/05/21 14:28
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel:条件付き文字列の結合方法

Excel本当の初心者です。ヘルプなど使って、自分なりにがんばって
考えたのですが、やりたいことがどうしてもできず、お力を貸して
ください!
やりたいのは、下記の通りです。

Sheet1のような表があります。カテゴリー毎にID が
付いていて、表は20,000行位あります。
同じID(カテゴリー)のものは、C列の商品名を”、”で
結合して、1行にまとめたいのです。
Sheet2のような結果を得たいのです。

Sheet1
A列     B列     C列
ID      カテゴリー  商品名

12345    くだもの   りんご
12345    くだもの   みかん
12345    くだもの   イチゴ
67891    野菜     いんげん
23456    お菓子    チョコ
23456    お菓子    お煎餅


Sheet2
A列     B列     C列
ID      カテゴリー  商品名

12345    くだもの   りんご、みかん、イチゴ
67891    野菜     いんげん
23456    お菓子    チョコ、お煎餅


Sheet1のA列とB列を「フィルタの重複レコードを無視する」を
したものをSheet2のA列とB列に貼り付けて、ISNUMBERとFIND
を使ってと思ったのですが、Sheet2のC列で商品名の結合を"、 "
で結合しようと思ったのですが、重複IDがない物もあれば、
10個も20個もあるものもあるので、CONCATENATEではできなくて...

どんな関数を使えば良いのでしょうか?
それと、事前にSheet1にフィルタをかけてSheet2に貼り付けたり
ぜずに、Sheet2のA列とB列とも関数でやる事はできるのでしょうか?

あともうひとつ、教えてただきたい事があります。
いつも一番上の行に式を入れて、下にドラッグすることで
下の行にコピーしているのですが、20,000行もあるので
この方法だと大変なので、行数をしていして、コピーする
方法とかあれば教えてください!

一度にいくつもすみませんが、教えてくださると
嬉しいです。

Excel本当の初心者です。ヘルプなど使って、自分なりにがんばって
考えたのですが、やりたいことがどうしてもできず、お力を貸して
ください!
やりたいのは、下記の通りです。

Sheet1のような表があります。カテゴリー毎にID が
付いていて、表は20,000行位あります。
同じID(カテゴリー)のものは、C列の商品名を”、”で
結合して、1行にまとめたいのです。
Sheet2のような結果を得たいのです。

Sheet1
A列     B列     C列
ID      カテゴリー  商品名

12345    く...続きを読む

Aベストアンサー

#7です。すいません、忘れてました。

>事前にSheet1にフィルタをかけてSheet2に貼り付けたりぜずに、
>Sheet2のA列とB列とも関数でやる事はできるのでしょうか?

●関数によるフィルタ
#7の作業列ア(D列)を引き続いて使います。

5.作業列エ [ID別の連番を使って、ID毎に連番を振る]
 Sheet1!G2:=COUNTIF($D$2:D2,1)

6.ID [自セルの行番号を使って、IDを引く]
 Sheet2!A2:=OFFSET(Sheet1!$A$1,MATCH(ROW()-1,Sheet1!$G$2:$G$29999,0),)
 ※自セルが4行目であれば、3番目のIDを探す。

7.カテゴリー [IDを使って、カテゴリーを引く]
 Sheet2!B2:=VLOOKUP(A2,Sheet1!$A$2:$B$29999,2,0)

QExcelで条件に合致した範囲の文字列の結合の仕方について

任意のセルの値を元に検索をして、合致した別のシートのセルの隣のセルの内容を結合して一つのセルに入力させる方法を教えて下さい。



Aのシートには既に以下のような内容が入っています
番号 内容
1 A青森
1 B岩手
1 C秋田
2 A山形
2 B宮城
2 C福島

Bのシートには番号だけを振り
この番号を元に検索をして、Aのシート内の内容を取得し結合したものを
Bのシートの内容の項目に自動で入力できるようにしたいです。

Bのシート
番号 内容
1 A青森 / B岩手 / C秋田
2 A山形 / B宮城 / C福島

少し調べてみたのですが、通常excelでは範囲を指定しての結合は出来ないようですね。
検索したら出てきた方法で、VBAを使っての範囲の結合は出来るようになりました。
そこまでは良かったのですが、条件に合致した範囲を自動的に結合する方法は見つけることが出来ませんでした。

検索条件の範囲を記述する事は出来たのですが、それを結合の関数に反映させる事が出来なかったのです。
このような式です。
="A!"&ADRESS(MATCH(A2,A!A:A,0),2,4)&":"&"B"&MATCH(A2,A!A:A,0)+(COUNTIF(A!AA,B!A2))-1
Aのシートで最初に合致したセル番地を取得し、結合させる範囲の終わりは、最初に条件に合致したセルの行番号+(条件に合致した個数-1)
としています。
この式で出力される値はA!B2:B4となり、この値を直接結合用の関数の中に入力すると問題なく結合された結果が表示されます。
しかし、結合用の関数の中に上の式を入れた場合や、その結果が表示されているセルを指定しても#VALUEとなったり、A!B2:B4が表示されるだけです。
当然と言えば当然なのかもしれませんが。。

何か解決方法をご存知のかた、お教え下さい。

任意のセルの値を元に検索をして、合致した別のシートのセルの隣のセルの内容を結合して一つのセルに入力させる方法を教えて下さい。



Aのシートには既に以下のような内容が入っています
番号 内容
1 A青森
1 B岩手
1 C秋田
2 A山形
2 B宮城
2 C福島

Bのシートには番号だけを振り
この番号を元に検索をして、Aのシート内の内容を取得し結合したものを
Bのシートの内容の項目に自動で入力できるようにしたいです。

Bのシート
番号 内容
1 A青森 / B岩手 / C秋田
2 A山形 / ...続きを読む

Aベストアンサー

INDIRECT関数で範囲を指定してはどうか。
ADDRESS関数でエラーになるなら、指定方法が適切でないと思われる。
ならば他の手段で範囲を指定することを考えてみよう。
…するとINDIRECT関数になるのではないだろうか…

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExcelで複数セルからの文字の結合

A1~A20までのセルにそれぞれ文字が入っています。
=A1&A2&A3&…&A20
で、A1~A20までの内容を結合できると思います。
これ以外で、もっと簡単な式で同じ結果を出す方法は無いでしょうか?

Aベストアンサー

こんにちは。

>もっと簡単な式で同じ結果を出す方法は無いでしょうか?

「&」演算子を使う以外には、基本的にはないと思います。

領域を統合するという関数は、ワークシートには用意されていません。名前は、たぶん、JOINという名が付けられるはずですが、それは未だ採用されていません。

Concatenate関数は、別にExcel用にあるのではなく、他機種が、「&」演算子が使えないためにあるだけに過ぎません。

そこで、myJoin というユーザー定義関数を考えてみました。

設定の仕方
Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。
次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、このコードを貼り付けて、再び、Alt + F11 で、画面を閉じます。

ただし、登録したブックのみの有効です。

'<標準モジュール>
Function myJoin(範囲 As Range, Optional 区切り文字 As String) As Variant
Dim c As Range, buf As String
  If 範囲.Rows.Count = 1 Or 範囲.Columns.Count = 1 Then
   For Each c In 範囲
     buf = buf & 区切り文字 & c.Value
   Next c
   If 区切り文字 <> "" Then
     myJoin = Mid$(buf, 2)
     Else
     myJoin = buf
   End If
   Else
   myJoin = CVErr(xlErrRef) 'エラー値
  End If
End Function

使い方:

=MYJOIN(A1:A20)

=MYJOIN(A1:A20,",")
とすると、「,」区切りで出てきます。

必ず、縦1列か横1行の範囲を指定してください。
どちらか一方が2列か2行以上の場合は、エラーが出ます。

汎用的にどこにでも使いたい場合は、アドイン化しなければなりません。マクロが少し分る方の、Public ステートメントをつけるというのは良くある誤解です。

こんにちは。

>もっと簡単な式で同じ結果を出す方法は無いでしょうか?

「&」演算子を使う以外には、基本的にはないと思います。

領域を統合するという関数は、ワークシートには用意されていません。名前は、たぶん、JOINという名が付けられるはずですが、それは未だ採用されていません。

Concatenate関数は、別にExcel用にあるのではなく、他機種が、「&」演算子が使えないためにあるだけに過ぎません。

そこで、myJoin というユーザー定義関数を考えてみました。

設定の仕方
Alt +  F11 ...続きを読む

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

QExcelですが、同一データが複数あるとき、検索して、その全部を抽出する方法

Excelですが、検索キーに、同一データ(レコード)が複数あるとき、検索して、その全部を抽出表示する方法を教えてください。

Vlookupは、同一データが複数あるとき、最初の行(レコード)を1つだけ抽出してきます。2つ目、3つ目の行は抽出できませんが、その全部を抽出する方法がありますでしょうか。

例えば、以下の例で、「A株式会社」をキーに検索した場合、<検索結果>シートのように、該当のレコード3つ(行2~4)を抽出して表示するようにしたいのですが、方法はありますでしょうか。よろしくお願いします。

<データシート>
 列A  列B    列C 列C
行1 No 会社名   所属 担当者
行2 1 A株式会社  ○事業部  坂下順人
行3 2 A株式会社  △事業部  滿山友人
行4 3 A株式会社  △事業部  目標達子
行5 4 B株式会社  設計部山下清人
行6 5 B株式会社  営業部横浜美人
行7 6 C株式会社  営業部川崎次郎
行8・・・・・・・・・・・・

<検索結果:別のシートにおいて>
行1 会社名 所属  担当者
行2 A株式会社 ○事業部 坂下順人
行3 A株式会社 △事業部 滿山友人
行4 A株式会社 △事業部 目標達子

Excelですが、検索キーに、同一データ(レコード)が複数あるとき、検索して、その全部を抽出表示する方法を教えてください。

Vlookupは、同一データが複数あるとき、最初の行(レコード)を1つだけ抽出してきます。2つ目、3つ目の行は抽出できませんが、その全部を抽出する方法がありますでしょうか。

例えば、以下の例で、「A株式会社」をキーに検索した場合、<検索結果>シートのように、該当のレコード3つ(行2~4)を抽出して表示するようにしたいのですが、方法はありますでしょうか。よろしくお...続きを読む

Aベストアンサー

#03です
>最後のROW(T1)で、T1を参照しておりますが

ROW(T1)は「1番目」を意味しています。T1セルに何もなくても関係ありません。コピーしたの行はROW(T2)になりますが、これは2番目のという意味です

#REF!エラーになりますか?
私が示した条件と何か変えていませんか?
別シートのA1に「抽出する会社名」を入力してあれば、回答したような結果になるはずですが‥ (テストしてありますので)

ただし2000行もあるならVBAの方が良いかもしれません
きっと「シートが重くなる」と思います

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qエクセルの複数条件に一致したセルを抽出したいのですが、関数で教えてくだ

エクセルの複数条件に一致したセルを抽出したいのですが、関数で教えてください。

               A列   B列    C列
Aファイルには 行 【注文月日】、【氏名】、【商品金額】が記入されています。
Bファイルには 行 【注文月日】、【氏名】、【税金額】が記入されています。

AファイルのD列に、Aファイルの【注文月日】かつ【氏名】がBファイルの【注文月日】かつ【氏名】と一致する場合のBファイルC列の【税金額】を表示したいのです。

VLOOKUP関数では条件が1つだけなので使用できませんが、似たような関数で複数条件ができる関数があるなら教えてください。

Aベストアンサー

こんばんは!
一例です。
↓の画像で右側(Bファイル)の方に作業用の列を設けています。
作業列D2セルを
=A2&B2
としてオートフィルで下へずぃ~~~!っとコピーします。

そして、AファイルのD2セルに
=IF(OR(A2="",COUNTIF([Bファイル.xls]Sheet1!D$2:D$1000,A2&B2)=0),"",INDEX([Bファイル.xls]Sheet1!C$2:C$1000,MATCH(A2&B2,[Bファイル.xls]Sheet1!D$2:D$1000,0)))
という数式を入れ、オートフィルで下へコピーすると
画像のような感じになります。
尚、数式はBファイルの1000行目まで対応できるようにしていますが、
データ量によって範囲指定の領域はアレンジしてみてください。

以上、参考になれば良いのですが
他に良い方法があれば読み流してくださいね。m(__)m

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

QexcelのVLOOKUPで検索値を2つにできますか?

excelのVLOOKUPで検索値を2つにしたいです
私の知っているVLOOKだと下記のことは対応できます
例えば、A列に会社名、B列に住所、C列に電話番号 とあった場合
「住所が検索値と同一なら電話番号を表示しなさい」という指示は出せます

そこで質問です
「会社名と住所が検索値と同一なら電話番号を表示しなさい」
というような、複数の検索値を持つ事はできないのでしょうか?

参考になるURLなどでも結構ですので、ご存知の方よろしくお願いいたします

Aベストアンサー

元の表をA列に会社名、B列に住所、C列に「=A2&B2」、D列に電話番号のようにして
=VLOOKUP(会社名&住所,$D$2:$C$100,2,FALSE)
のようにすれば可能です。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報