• ベストアンサー

Excel2002 同一列内に存在する複数データの取り出し方法

こんにちは。いつもお世話になっております。 ExcelからAccessにデータ移行する際、Excelのデータフォーマットを変更する必要があり、質問させていただきました。 下記のようなSheetがあります。 氏名ID=お客様IDのことです。 ○月加入=加入した月ごとに列があります。(下記では3月まで) 中身のデータ(A001等)=商品コードをあらわします。 ---------------------------------------------------   氏名ID  1月加入 2月加入 3月加入 1  0001   A001 2  0002       A001   B001 3  0003       B001 --------------------------------------------------- このSheetを、下記のように変換したいのです。 ---------------------------------------------------   氏名ID  1月加入 2月加入 3月加入  契約商品 1  0001   A001            A001 2  0002       A001        A001 3  0002            B001   B001 4  0003       B001        B001 ---------------------------------------------------- 上記のように変換できたら、各月の部分は削除し、お客様IDと商品IDだけのSheetにするつもりです。 要は、一人のお客様が加入している契約商品を、1つの列にまとめ、複数契約がある場合は行を追加して、お客様:商品=多:1の表にしたいのです。 マクロ、VBAなど、組み合わせでもかまいませんが、このような我侭な要求が達成できますでしょうか? 達人の方々、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#130090
noname#130090
回答No.1

こんなもんでどうでしょう? Sub siwake()   Dim i As Long, j As Long, k As Long   Dim cstm As String   Dim startM As Integer, endM As Integer   '1月startなので   startM = 1   '3月endなので   endM = 3   Do While Range("A2").Offset(i) <> ""     cstm = Range("A2").Offset(i)     For j = startM To endM         If Range("A2").Offset(i, j) <> "" Then           Range("G2").Offset(k) = cstm           Range("G2").Offset(k, j) = Range("A2").Offset(i, j)           Range("G2").Offset(k, endM + 1) = Range("A2").Offset(i, j)           k = k + 1         End If     Next     i = i + 1   Loop End Sub

camo-tech
質問者

お礼

お礼が遅くなりました。 ご回答のソースをちょっとだけいじり、実行した結果、バッチリうまく動いてくれました。 Accessへの取り込みもうまく行き、非常に喜んでおります。 また、機会がございましたらよろしくお願いします。

その他の回答 (1)

noname#204879
noname#204879
回答No.2

   A    B    C    D    E 1 氏名ID 1月加入 2月加入 3月加入 契約商品 2 0001  A001            A001 3 0002       A001       A001 4 0002           B001   B001 5 0003       B001       B001 E2: =LOOKUP("黑",B2:D2)

camo-tech
質問者

お礼

ありがとうございました。 #1さんの回答でうまく行きました^^;

関連するQ&A

  • アクセス2003 複数の列に分かれたデータを1列にまとめたい

    例えば (A列)氏名/(B列)電話番号/(C列)携帯電話番号 というcsvデータがあり、これをアクセスに取り込んだときに (A列)氏名/(B列)電話番号or携帯電話番号 というように、2列のデータを1列にしたいのですが うまいやり方はないでしょうか? 元のデータをエクセル上でコピペすれば済むのですが 余計な手間はかけたくないので、よろしく御願いします。

  • 【EXCEL】A列に複数あるデータに対応するB列のデータを表示させる

    既出かもしれませんが質問です。Accessでやると簡単なのでしょうが、Excelの関数のみで行えますか? 具体的には、sheet1、2、3のデータを使用して、 (1)sheet3でリンクさせて表示(使用するのはsheet1、2のみ) (2)かつsheet3で並べ替えて表示(使用するのはsheet1、2、3) となりますが、とりあえず(1)だけでも早急にできるようにしたいと思っています。 【sheet1】(データベース2:A列=検索被対象コード、B列=氏名、C列=社員コード(各行はB列=C列です)) A列 B列 C列 1912 A子 123 1912 B子 1234  1912 C子 2345 2001 C子 2345 2001 D子 34567 2001 A子 123 【sheet2】(データベース2:A列=社員コード、B列=氏名、C列=地域コード(各行はA列=B列=C列です。)) A列 B列 C列 123   A子 3 1234 B子 1  2345 C子 2 2345 C子 2 34567 D子 4 123  A子 3 【sheet3】(表示用:A1=検索対象コード、A3以下=sheet1A列の中から対象となるC列の情報を、(可能であればsheet2C列の地域コード順に)表示させたい) A列 B列 2001(sheet1A列の検索対象コード:手入力により可変とする。) 2345(sheet1C列のC子の社員コード(sheet2C列の地域コード2)) 123(sheet1C列のA子の社員コード(sheet2C列の地域コード3)) 34567(sheet1C列のD子の社員コード(sheet2C列の地域コード4))

  • (Excel)複数列のデータを1列に

    こんにちは. (1)のようなデータが20年分あり,(2)のように縦一列に変換したいのですが,よい方法はありませんでしょうか? 形式は同じですが,年によって行と列の数は変動します.シートは年毎です. 空白はブランクです.また,最終的にはブランクは削除します. No.1764958に類似する質問がありましたが,上手く使えませんでした. どうかよろしくお願い致します. (1) | 年月日 |A|B|C|・・・・ 1|2007/10/30|1|1|1| 2|2007/10/31| |1| | 3|2007/11/01|1| |1| 4|2007/11/02|1| | |   ・   ・   ・ ↓ (2) 1|2007/10/30|1|A| 2|2007/10/31| |A| 3|2007/11/01|1|A| 4|2007/11/02|1|A| 5|2007/10/30|1|B| 6|2007/10/31|1|B| 7|2007/11/01| |B| 8|2007/11/02| |B| 9|2007/10/30|1|C| 10|2007/10/31| |C| 11|2007/11/01|1|C| 12|2007/11/02| |C|   ・   ・   ・

  • エクセルで複数の列を1列にまとめる方法

    エクセルの1つのシートの複数の列にデータがあって、それを1つの列にまとめる方法を教えてください。 A列のデータの最後の次にB列のデータ、C列のデータと次々にデータをつなげたいのです。 よろしくお願いします。

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

    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行もあるので この方法だと大変なので、行数をしていして、コピーする 方法とかあれば教えてください! 一度にいくつもすみませんが、教えてくださると 嬉しいです。

  • excel2003 2列のデータを1列に

    エクセル2003にて 下記のように2列のデータを1列に表示させたいと思っております。 A列  B列              C列 田中 佐藤              田中 鈴木 池田 このように>      鈴木 後藤 内藤              後藤                     佐藤                     池田                     内藤 C列に入れる数式をお教えください。 よろしくお願いします。

  • Excelで2箇所のデータを1箇所にまとめる方法は

    2箇所にあるデータを1つにまとめるにはExcelの機能で簡単にする方法はありますか? 例えば シート1 A B C D 1 氏名 12月 2 申告 未申 ク 3 A 0 1 1 4 B 0 1 0 5 D 1 0 0 シート2 A B C D E F G 1 氏名 1月 2月 2 申告 未申 ク 申告 未申 ク 3 A 0 1 0 2 0 0 4 C 0 1 0 0 1 0 5 D 0 0 0 0 2 0 これの合計をシート3にまとめるには、Excelのどのような機能でプログラムで簡単にまとめられますか? シート3 A B C D 1 氏名 2 申告 未申告 ク 3 A 4 B 5 C 6 D B列の申告、C列の未申告、D列のクにExcelの機能を使って簡単に合計をまとめるのを作成したいです。シート1と2にはシート1と2に同じ人もいればシート1にしかいない人、シート2にしかいない人がいます。ただ、データは同じです。シート1は12月のデータ、シート2には1月、2月のデータがあります。シート1にはA1は氏名、A3はA,A4はC,A5はD,、B2は申告、B3は0,B4は0,C1は12月、C2は未申告、C3は1,C4は1です。他のシートも同じように見てください。ズレテ表示されてしまっているかもしれません。実際にはシート2には6月までのデータもまとめたいです。宜しくお願いします。Excelの検索機能等を使ってシート3にシート1と2のデータをまとめる事が出来ますか?回答宜しくお願いします。 シート3に計算式を入れます。例えばB3にSUM=(sheet1!,B3)(sheet2!,B3,E3) シート3のB4にSUM=(sheet1!,B4)(sheet2!,B4,E4) B5にSUM=(sheet1!,B5)(sheet2!,B4,E5)を入れる方法だとシート1とシート2に違った人がいる為に下に向かって同じ式をコピーしていくのが出来なくて困っています。上記の式だとコピーしただけだから職場の人にも駄目だと言われています。他のやり方が分からないので誰か教えて下さい。宜しくお願いします。

  • [EXCEL2000]複数の列からデータを取り出して1列にまとめたい!

    (1)一行にA列、B列、C列があります。 (2)各行のどれか1つの列には、必ずデータが入っています。 (3)データの入っているセルからデータを取り出し、D列の同じ行のセルに移します。(コピーでもかまいません) (4)結果、D列には、A列~C列のデータが1列にまとまる! 具体的には↓のようになりますが、どのような関数を使えばよいですか?教えてください。 (具体例) A列 B列 C列 D列 12         12        50  50      32     32

  • EXCEL2003の複数条件でのデータ表示方法

    下記のような管理表があり次のような条件でデータを表示させたいと思っております。 ・A列が「1」のとき、B列が「有期契約」だった場合、「有」と表示                 「無期契約」だった場合、「無」と表示 ・Aが「空白」だった場合は、B列に「空白」を表示 ・Aが「*」だった場合は、B列に「空白」を表示 ・下記B列は3行一セットになってます(例:「有期契約」なら3行とも「有期契約」が表示されている) ・上記条件をふまえ、下記C列のように、B列3行を見たときにC列に一つだけ値を表示させたい。 とりあえず下記のような関数を作成してみましたが、B列から一つだけ表示させる方法が分からず お手上げです・・・ =IF(A2="","",IF(A2="*","",IF(A2="1",IF(B2="有期契約","有","無"),""))) 丸投げのようで申し訳ございませんが、皆様のお知恵を借りたく、よろしくご教示お願い致します。 A         B        C      契約種別  契約分類   ----------------------------------------------- 1       有期契約      有 2       有期契約 1       有期契約 ------------------------------------------------ 2       無期契約      無 2       無期契約 1       無期契約 ----------------------------------------------- 1       有期契約      有         有期契約 *       有期契約 ------------------------------------------------

  • 複数列の集計(Excel)

    下記のような物をExcel2000で作りたいのですが可能でしょうか? まず、データとして下のようなリストがあります。 A(列)     B(列)     C(列)     D(列) 日付1     数値1   日付2    数値2 2004/6/1   100    2004/7/2   500 2004/1/3   300    2004/1/3   400 2004/3/15   540    2004/5/4   980 2004/1/1   800    2004/8/6   230 2004/1/3   200    2004/2/8   450    ・      ・       ・      ・    ・      ・       ・      ・    ・      ・       ・      ・ 列数は決まってますが、行数は増えていきます。 そして別のシートに下のようなリストが別にあり、 A(列)       B(列)       C(列)      D(列) 2004/1/1    2004/1/2    2004/1/3    2004/1/4・・・(31日まで続きます) ここにある日付と先ほどのリストの日付1と日付2を照合して、 日付1で一致したら数値1の数値を 日付2で一致したら数値2の数値を 持ってきて、なおかつそれを合計した数値を表示したいのです。 上のデータを使って表現すると下のようになって欲しいのです。 A(列)       B(列)       C(列)      D(列) 2004/1/1    2004/1/2    2004/1/3    2004/1/4・・・(31日まで続きます) 800                  900 つまりはその日毎の数値の合計値が欲しいのですが、 検索値となる日付が2列(複数列)に分かれてしまっていて うまくいきません。 自分の仕事を丸投げするようで大変申し訳ないのですが どなたかお教えいただけませんでしょうか?

専門家に質問してみよう