• ベストアンサー

エクセル データ並び変換(縦から横) 不要行削除

同一キーに属する複数データが縦並び(行)になっているのを横並び(列)に直して、下段の データを行ごと削除したいのですが、どのような方法が考えられますでしょうか? キーの数は不特定で空白行はありません。データはキーも含めて、全て文字列です。 発想が貧困なもので、何から手を付けて良いかわかりません。お手数ですが、ご教示ください。   A  B  C 1  x  a 2  x  b 3  y  c 4  y  d 5  z  e 6  z  f ・ ・ ・ 199 200 ・ ↓   A  B  C 1  x  a  b 2  y  c  d 3  z  e  f ・ ・ ・ 99 100 ・

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

行の削除まで行おうというのであればVBAは必須です。でもVBAが全く分からないのであればサンプルを提示しても無意味でしょう。 もしSheet1に縦方向で並んでいるデータを、別シートに横方向に並べ替えるだけでよければ関数で可能です。その方法は以下の通りです 1)A列全体を選択→「データ」→「フィルタオプションの設定」→ 重複するデータは無視するにチェックしてOK  これによりA列のキーは重複のない状態で表示されますから、これをコピーして別シートのA1からAnに貼り付ける 2)A列全体を選択→「データ」→「フィルタオプションの設定」→ 重複するデータは無視するのチェックを外す 3)別シートのB1に以下の関数を貼り付ける =IF(ISERROR(SMALL(IF(Sheet1!$A$1:$A$500=$A1,ROW(Sheet1!$A$1:$A$500),""),COLUMN()-1)),"",INDEX(Sheet1!$A$1:$B$500,SMALL(IF(Sheet1!$A$1:$A$500=$A1,ROW(Sheet1!$A$1:$A$500),""),COLUMN()-1),2)) そして Shift+Ctrl+Enter で入力する(重要!) 4)B1をコピーして必要な分だけ他のセル(例えばC1~Z1やB2~Z100)に貼り付ける 以上の操作で横方向に並べ替えされた表が出来ます。出来上がった表をコピーし、「編集」→「形式を選択して貼り付け」→値 で貼り付ければ元のSheet1のデータは消すなりご自由に。

nonboo
質問者

お礼

ありがとうございます。確認用に使用してみます。 #2のご回答のような方法に、区分用の列を設け、並べ替えてから削除。 区分用の列を流用し、行数を変数として、これらをVBAで処理してみます。

その他の回答 (2)

回答No.2

考えられる方法は、 1.エクセルVBAを使う。 2.「キーの数(最大数)がいくつか特定できる」という条件付きでIF文【例:=IF(A3=A2,B3)】を列に書いていく。 の2通りがあると思います。

nonboo
質問者

お礼

ご回答ありがとうございます。やはりVBAで処理するのが適しているのですね。どのようなコードになるのか、 検索キーワードすら発想できないものですから、お手数ですが、教えていただけないでしょうか?

  • masao3
  • ベストアンサー率23% (74/311)
回答No.1

表計算ですので順番に整理するしかありません。 (1)B2をコピーしC1に貼付け (2)2列を全削除 (3)3列が2列に変更 (4)B3(B4)をコピーしC2(C3)に貼付け (5)3列(4列)を全削除 ※()内は最初の配列 以上を繰返すしか無いと思いますが?

nonboo
質問者

お礼

さっそくのご回答ありがとうございます。VBAで、変数~ループ処理というような感じになるのでしょうか? どのようなコードになるのでしょうか?

nonboo
質問者

補足

例えば、同一キーであることの確認はどのようなコードになりますでしょうか? 行数(キー数)が不特定の中から、同一キーであることを確認した上、下段のデータを上段のデータセルの 右隣のセルにコピーして、下段データを行ごと削除する、、、思いつきません。 元データの内容が頻繁に変わるものですから、何とか自動化したいのです。 よろしくお願いします。

関連するQ&A