エクセルにてデータが同じものを横列に並べ替えたデータ
を作成したいのですがどなたか簡単に出来る方法を教えて
下さい。

元データ(A,Bとも文字データ)
A1 B1
A1 B2
A1 B3
A2 B1
A2 B3
A2 B4
A3 B1

を以下のように(Aが同じ場合に横にBを並べ替え)
A1 B1 B2 B3
A2 B1 B3 B4
A3 B1

よろしくお願いします。

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

A 回答 (3件)

皆さんの難しい式は読解しておりませんが、A列が仲間同士で並んでいなくても対応できるVBAコードです。


非連続セルをコピー貼り付けすると、エクセルが勝手に詰めてくれた事を思い出して組んでみました。
正統的でも、分かりやすくもないコードですが、ご参考まで。
’Sheet1のデータをSheet2に転記します。
Sub test()
Dim targetRange As Range, myCell As Range, destCell As Range
Dim myDic As Object, myKey As Variant

Set myDic = CreateObject("Scripting.Dictionary")
Set targetRange = Sheets("Sheet1").Range("A1").CurrentRegion
Set destCell = Sheets("Sheet2").Range("A1")
For Each myCell In targetRange.Columns(1).Cells
If Not myDic.exists(myCell.Value) Then
myDic.Add myCell.Value, myCell.Offset(0, 1)
Else
Set myDic.Item(myCell.Value) = Union(myDic.Item(myCell.Value), myCell.Offset(0, 1))
End If
Next myCell
For Each myKey In myDic.keys
destCell.Value = myKey
myDic.Item(myKey).Copy
destCell.Offset(0, 1).PasteSpecial Paste:=xlValues, Transpose:=True
Set destCell = destCell.Offset(1, 0)
Next myKey
Set myDic = Nothing
End Sub
    • good
    • 0

シート1のAおよびB列の2行目から下方にデータがあるとします。


シート1のC列は作業列としてC2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,INT(MAX(C$1:C1)+1)+0.0001,INT(MAX(C$1:C1))+COUNTIF(A$2:A2,A2)*0.0001))

シート2にはお望みの表を作るとしてA2セルには次の式を入力して横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(COUNTIF(Sheet1!$C:$C,ROW(A1)+0.0001)=0,"",IF(COLUMN(A1)=1,INDEX(Sheet1!$A:$A,MATCH(ROW(A1)+0.0001,Sheet1!$C:$C,0)),IF(COUNTIF(Sheet1!$C:$C,ROW(A1)+(COLUMN(A1)-1)*0.0001)=0,"",INDEX(Sheet1!$A:$B,MATCH(ROW(A1)+(COLUMN(A1)-1)*0.0001,Sheet1!$C:$C,0),2))))

この方法は配列数式にするなどの複雑なしかも計算に負担がかかるような方法を使用しておりません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
関数でもできるとこをがわかり大変勉強になりました。

お礼日時:2011/04/23 23:32

こんにちは!


一例です。
↓の画像のようにSheet1のデータをSheet2に表示するようにしてみました。

Sheet1に作業用の列を設けています。
作業列C2セルに
=IF(COUNTIF($A$2:A2,A2)=1,ROW(),"")
としてオートフィルでずぃ~~~!っと下へコピー!

Sheet2のA2セルに
=IF(COUNT(Sheet1!C:C)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!C:C,ROW(A1))))

B2セルに
=IF(OR($A2="",COUNTIF(Sheet1!$A:$A,$A2)<COLUMN(A1)),"",INDEX(Sheet1!$B$1:$B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$A2,ROW($A$1:$A$1000)),COLUMN(A1))))
(これは配列数式になってしまいますので、Shift+Ctrlキーを押しながらEnterキーで確定します。)

このB2セルを列方向にコピーしておきます。
最後にA2~最終列2行目を範囲指定し、下へオートフィルでコピーすると画像のような感じになります。

なればよいのですが・・・m(__)m
「EXCELで重複行の横並びについて教えて」の回答画像1
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
関数でもできるとこをがわかり大変勉強になりました。

この度は、図まで示していただきありがとうございました

お礼日時:2011/04/23 23:33

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

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

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

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

Qエクセルで縦に並んだデータを横に並び替えたい

エクセルで↓ のようなデータがあります

 | A | B | C | D
1|A店|りんご| 2 |
2|A店|みかん| 3 |
3|A店|バナナ| 4 |
4|B店|りんご| 3 |
5|B店|バナナ| 2 |

これを以下のようなかたちにしたいのですが、一つずつ移動する以外に方法はありますか?

 | A | B | C | D | E | F | G |
1|A店|りんご| 2 |みかん| 3 |バナナ| 4 |
2|B店|りんご| 3 |バナナ| 2 |


100以上データがあり、手作業で移すのは大変です。
ちなみにVBAなどはほとんど理解できません。

何か解決策があればと質問させていただきたました。
よろしくお願いします。

Aベストアンサー

E列に店名リストを作成する
(なければフィルタオプションの設定で重複するレコードを無視するを使うとよい)

F1セルに 1 右へ連番
N2セルに =COUNTIF(A:A,E2) 下へオートフィル
F2セルに
=IF(F$1>$N2*2,"",INDEX($B:$C,MATCH($E2,$A:$A,0)+F$1/2,1))
G2セルに
=IF(F$1>$N2*2,"",INDEX($B:$C,MATCH($E2,$A:$A,0)+G$1/2-1,2))
F2:G2セルを選択して、右へオートフィル、そのまま下へオートフィル

E:N列を選択して 切り取り 別シートへ貼り付け

QExcelで隣のセルと同じ内容に列を並べ替える方法

質問の意味がわかりにくくて申し訳ございません。

ただいま600人分の名簿を並べ替える作業をしておりまして、
毎年の作業で、いつもおっくうになっております。

毎年同じ600人分の名簿をいくつかのグループに分けるために列を新たに挿入し、
そこに1や2や3といった数字を打ち込み、並べ替え機能をつかって、
グループ分けをしておりました。

しかし、すでに氏名(漢字)のデータですが並べ替えたデータがあり、
そのデータと同じように、旧データを並べ替えたいのです。

うまく質問の意図が伝えることができずすみません。

例えば、

A|E *****
B|C *****
C|D *****
D|A *****
E|B *****

このような感じです。*はそれぞれの人特有のデータなので、ABCDE順に並べ替えても引き継がせたいデータです。

ECDABの隣にすでにあるABCDEの氏名(漢字)のデータをコピーし、
ECDABをABCDEの順番に並べ替えたいのです。


少しわかりにくいかもしれませんが、
もし何か良い方法ありましたら、お教えいただけますと幸いです。
よろしくお願い致します。

質問の意味がわかりにくくて申し訳ございません。

ただいま600人分の名簿を並べ替える作業をしておりまして、
毎年の作業で、いつもおっくうになっております。

毎年同じ600人分の名簿をいくつかのグループに分けるために列を新たに挿入し、
そこに1や2や3といった数字を打ち込み、並べ替え機能をつかって、
グループ分けをしておりました。

しかし、すでに氏名(漢字)のデータですが並べ替えたデータがあり、
そのデータと同じように、旧データを並べ替えたいのです。

うまく質問の意図が伝えることができずす...続きを読む

Aベストアンサー

例えばシート1のA2セルから下方にはECDABと氏名が並び横の列にはそれぞれの人のデータが入力されているとします。
そこでシート2には並び変えたい氏名の順序でA2セルから下方にABCEと入力します。
シート2のB2セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。

=IF(COUNTIF(Sheet1!$A:$A,$A2),IF(VLOOKUP($A2,Sheet1!$A:$XX,COLUMN(B1),FALSE)="","",VLOOKUP($A2,Sheet1!$A:$XX,COLUMN(B1),FALSE)),"")

その後にシート2全体を選択してから右クリックして「コピー」し、その後にシート2のA1セルにカーソルを移して右クリックし、「形式を選択して貼り付け」で「値」にチェックをして貼り付けます。

Qエクセル 重複する値を横に並べ カレンダー化

教えてください。

エクセルで重複する検索値を横にならべる方法を探していて次のサイトを見つけました。

http://excel-forest.net/2016/07/19/not-vlookup/

基本的にやりたいことはこれなんですけど、この表を添付画像の用にカレンダーのように整えることは可能でしょうか?
○でなくても、日付がそのまま記載でもかまいません。

よろしくお願いします。

Aベストアンサー

私は「特に40代・男性」ではありませんが・・・
Sheet2!B2: =IF(SUMPRODUCT((Sheet1!$A$2:$A$14=$A2)*(Sheet1!$B$2:$B$14=B$1)),"○","")

QEXCEL並び替え同じ文字の入ったセルを並べて表示する方法。関数。

お世話になります。
00101 00105
00104 00103
00103 00104

となっているものを
00101
00103 00103
00104 00104
00105
と同じ数字が横に表示されて同じ数字がないものは片方だけ表示される(上記のような状態)にする方法を教えてください。
関数を使うのであれば式を教えてくださいませ。
00101を縦横一列目としていただければわかりやすいです。

Aベストアンサー

こんばんは!
外していたらごめんなさい。
B列にA列と同じ数値が複数ある場合も列方向に複数表示するようにしてみました。

↓の画像のように作業用の列を2列使わせてもらっています。

作業列C2セルに
=IF(COUNT($A$2:$B$100)<ROW(A1),"",SMALL($A$2:$B$100,ROW(A1)))
D2セルに
=IF(OR(C2="",COUNTIF($C$2:C2,C2)<>1),"",C2)
として、C2・D2セルを範囲指定し、D2セルのフィルハンドルでずぃ~~~!っと下へコピーします。

そして、結果のF2セルは
=IF(COUNT($D$2:$D$100)<ROW(A1),"",SMALL($D$2:$D$100,ROW(A1)))

G2セルは
=IF(COUNTIF($A$2:$B$100,$F2)<COLUMN(A1)+1,"",$F2)
としれG2セルを列方向にオートフィルでコピーします。

最後にF2~コピーした列2セルを範囲指定し、
最後の列のフィルハンドルで下へコピーすると
画像のような感じになります。
尚、数式はA列の100行目まで対応できるようにしています。

以上、長々と書きましたが参考になれば幸いです。
的外れなら読み流してくださいね。m(__)m

こんばんは!
外していたらごめんなさい。
B列にA列と同じ数値が複数ある場合も列方向に複数表示するようにしてみました。

↓の画像のように作業用の列を2列使わせてもらっています。

作業列C2セルに
=IF(COUNT($A$2:$B$100)<ROW(A1),"",SMALL($A$2:$B$100,ROW(A1)))
D2セルに
=IF(OR(C2="",COUNTIF($C$2:C2,C2)<>1),"",C2)
として、C2・D2セルを範囲指定し、D2セルのフィルハンドルでずぃ~~~!っと下へコピーします。

そして、結果のF2セルは
=IF(COUNT($D$2:$D$100)<ROW(A1),"",SMALL($D$2:$D...続きを読む

Qアクセス 項目毎にデータを横に並べる方法

こんにちは。宜しくお願いします。
アクセスのデータで

商品/SEQ/値段
a   1  500
a   2  600
a   3  700
b   1  200
c   1  450
c   2  520

というデータを
商品/値段1/値段2/値段3/・・・
a   500  600   700
b   700
c   450  520
のように横に並べたいのですが、
このようにする方法はありますでしょうか?
最終的にエクセルファイルにするので、アクセスかエクセルで何か方法があれば教えて下さい。

Aベストアンサー

クロス集計クエリでできます。
クエリの新規作成でウィザードが開いたらクロス集計クエリウィザードを選び順次進めます。
テーブルを選択し行見出しに商品を選択、列見出しにSEQを選択、集計する値があるフィールドで値段を選び集計方法は先頭にし集計値を表示するのチェックを外します。
このクエリを開けば出来ます。
または
クエリの新規作成でデザインビューを開きSQLビューに切替えて下記のSQLをコピーすれば出来ます。(テーブル名や商品などのフィールド名は使うテーブル名に直してください。)

TRANSFORM First(テーブル名.値段) AS 値段の先頭
SELECT テーブル名.商品
FROM テーブル名
GROUP BY テーブル名.商品
PIVOT テーブル名.SEQ;

このクエリを使ってExcelにエクスポートすれば良いと思います。

Qエクセルで重複しているデータの抽出のしかたを教えてください。

エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。
A列に日付 B列に企業名このデータが300件ほどあります。

 Å列      B列
1月 1日    AAAA社
1月 4日   BBBB社
1月 8日   CCCC社
2月 1日   BBBB社
2月20日    DDDD社
3月 2日   AAAA社

と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。
これを簡単に抽出する方法はないでしょうか?
教えてください お願いいたします。

Aベストアンサー

企業名がセルB2からセルB300まで入力されていると仮定します。
セルC2に IF(COUNTIF($B$2:B2,B2)>1,"*","") を入力し、セルC300までコピーして下さい。すると重複したデータの二番目以降に "*" のマークが付きます。
(注) 数式を下のセルまでコピーするため、COUNTIF($B$2 は絶対参照にして下さい。

Q2つのエクセルのデータを同じように並べ替えたい

エクセルの並べ変えで困っております。
よろしくお願いします。

2つのエクセルデータがあります。
2つのエクセルデータの内容は違うのですが、2つのデータでの共通点は、
(1)1行ごとに入力管理している。
(2)「A列」だけには共通の同じ「基本番号」が入力してある。

片方のエクセルの基準番号通りの配置で、もう片方のデータの行を並べ
変えるにはどうしたらよいのでしょうか?

Aベストアンサー

> (2)「A列」だけには共通の同じ「基本番号」が入力してある。

という条件の下では、

・作業用に、両方のエクセルファイルに、B列を挿入。
・「片方」のB列に、上から連番を振る。
・両方とも、A列を基準にソートをする。
・「片方」のB列をコピーして、「もう片方」のB列に貼り付ける。
・両方とも、B列を基準にソートをする。
・両方とも、B列を削除する。

これて、「もう片方」が「片方」と同じ並び順になるはず。

検証してないので、不具合があるかもしれません。

Q2つのシート間での重複データのチェック

Excelについて教えてください。
以下の2つのシートがあります。

Sheet1
すずき 03-0000-0000
やまだ 03-1111-1111
たなか 03-2222-2222

Sheet2
03-1111-1111
03-4444-4444
03-0000-0000
03-2222-2222

Sheet1には名称と電話番号、Sheet2には別所から抽出した電話番号のみのデータがあります。
Sheet1のデータの中からSheet2に電話番号があるものだけを知りたいのですが、たとえばSheet1の 各行のC列 に Sheet2に一致する番号があった場合は●等付けるにはどうすればよいでしょうか。

よろしくお願いします

Aベストアンサー

シート1のC列に式を入れます。
=IF(ISNA(VLOOKUP(B1,Sheet2!A:A,1,FALSE))=TRUE,"-","●")

【式の説明】
シート1のセルB1の値が、シート2のA列に、存在する場合は●を、存在しない場合は-をセット。

Qエクセル 同じ値を探して隣の数値をコピーする

エクセルで以下の作業を簡単にする方法を教えて下さい。

Sheet1の1行目には見出しがあり、A列とB列の2行目から下にデータが入っています。(約200行)
A列     B列
田中    13
山本     8
谷口    11
鈴木    6
佐々木    9
奥村     15




Sheet2のA列1行目から下には別のデータが入っています。(約600行)
A列
太田川
山村
田中
多賀先
鈴木
奥村
幸田




Sheet2のA列のデータと完全一致するデータ(名前)をSheet1のA列から探して、同じ名前があれば、その隣のB列にある数値をSheet2のB列に貼り付ける。
見つからない場合はSheet2のB列は空欄のままです。
Sheet2
A列      B列
太田川     
山村
田中    13
多賀先
鈴木     6
奥村    15
幸田


Aベストアンサー

シート2のB2セルには次の式を入力して下方にドラッグコピーします。

=IF(COUNTIF(Sheet1!A:A,A2)=0,"",VLOOKUP(A2,Sheet1!A:B,2,FALSE))

Qアクセスで同じ種類のものを横に並べたい

お世話になります。
アクセスでデータを取り込んだデータをエクセルで吐き出す為、横に並べたいと思っています。
種類 品物
a  aa-1
a  aa-3
a  aa-5
b  bb-3
c  cc-1
c  cc-2
上記のようなデータを
種類 品物1   品物2   品物3
 a  aa-1    aa-3    aa-5
 b  bb-3
 c  cc-1    cc-2

というようにクロス集計をしたいと思っています
品物1 品物2 品物3にあたる列見出しをどのようにしたら良いか分かりません。
種類ごとにカウントでくる関数ってありますでしょうか?
よろしくお願いします。

Aベストアンサー

>種類ごとにカウントでくる関数ってありますでしょうか?

関数はないと思いますが、クエリを工夫すればカウントは可能です。

SELECT X.種類, X.品物, '品物' & Count(N.種類) AS 列見出
FROM テーブル名 AS X INNER JOIN テーブル名 AS N
ON (X.種類=N.種類) AND (X.品物>=N.品物)
GROUP BY X.種類, X.品物;

又は、

SELECT X.種類, X.品物,
'品物' & DCount("*","テーブル名","種類 ='" & X.種類 & "' AND 品物 <= '" & X.品物 & "'") AS 列見出
FROM テーブル名 AS X;

どちらのクエリでも、同じ結果が出ます。
上記の方がパフォーマンスは良いと思います(しかし難解です)。
下記のクエリの方が分かり易いかも。
お好きな方を使ってください。

このクエリで、種類ごとのカウントをし、
ついでに"品物"という文字列をつけて、列見出用に使います。
このクエリを「集計準備」という名前で保存したとします。

次に、上記のクエリを元に、クロス集計をします。

TRANSFORM First(集計準備.品物) AS 品物の先頭
SELECT 集計準備.種類
FROM 集計準備
GROUP BY 集計準備.種類
PIVOT 集計準備.列見出;

これで、ご希望の結果になると思います。

ただし、全く同じ種類、品物がある場合、
この方法では、うまく動きませんので、注意して下さい。

全く同じレコードが含まれている場合は、
オートナンバー等の主キーを追加し、
それを集計に利用する必要があると思います。


----補足----
SQL文からクエリを作るには、
クエリの新規作成 → テーブルは追加しない
表示 → SQLビュー
として、SQL文をコピー&ペーストして下さい。
テーブル名は正しいテーブル名に置き換えて下さい。

>種類ごとにカウントでくる関数ってありますでしょうか?

関数はないと思いますが、クエリを工夫すればカウントは可能です。

SELECT X.種類, X.品物, '品物' & Count(N.種類) AS 列見出
FROM テーブル名 AS X INNER JOIN テーブル名 AS N
ON (X.種類=N.種類) AND (X.品物>=N.品物)
GROUP BY X.種類, X.品物;

又は、

SELECT X.種類, X.品物,
'品物' & DCount("*","テーブル名","種類 ='" & X.種類 & "' AND 品物 <= '" & X.品物 & "'") AS 列見出
FROM テーブル名 AS X;

どちらのクエリでも...続きを読む


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

人気Q&Aランキング

おすすめ情報