• ベストアンサー

Excel2003で縦並セルを横並びに

Excel2003で下記の縦並びの表を、横並びにする方法を教えてください。 No1 1 データ No1 2 データ No1 3 データ No2 1 データ No2 2 データ No3 1 データ No3 2 データ No3 3 データ No3 4 データ ↓ No1 1 データ 2 データ 3 データ No2 1 データ 2 データ  No3 1 データ 2 データ 3 データ 4 データ 宜しく御願い致します。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

エクセル関数は、データ内容の組み換えは苦手です。計算用に開発されていて、きの聞いた関数が無いのです。 関数でやってみましたが、随分複雑になりました。 ーー それでVBAでやってみて、載せます。 標準モジュールにコピペして実行。 No列(A列)でソートしてあることが必須。 Sub test02() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d = sh1.Range("A65536").End(xlUp).Row MsgBox d m = sh1.Cells(2, "A") sh1.Cells(2, "A").Copy sh2.Cells(2, "A") k = 2: L = 2 For i = 2 To d If sh1.Cells(i, "A") = m Then sh1.Cells(i, "B").Copy sh2.Cells(k, L) L = L + 1 sh1.Cells(i, "C").Copy sh2.Cells(k, L) L = L + 1 Else k = k + 1 sh1.Cells(i, "A").Copy sh2.Cells(k, 1) sh1.Cells(i, "B").Copy sh2.Cells(k, 2) sh1.Cells(i, "C").Copy sh2.Cells(k, 3) L = 4 m = sh1.Cells(i, "A") End If Next i End Sub ーー 例データ Sheet1で No1 1 データ1 11 No1 2 データ2 12 No1 3 データ3 13 No2 1 データ4 21 No2 2 データ5 22 No3 1 データ6 31 No3 2 データ7 32 No3 3 データ8 33 No3 4 データ9 34 No4 1 データ10 41 No5 1 データ11 51 結果 Sheet2 No1 1 データ1 2 データ2 3 データ3 No2 1 データ4 2 データ5 No3 1 データ6 2 データ7 3 データ8 4 データ9 No4 1 データ10 No5 1 データ11 >データは種類により下地の色、フォント色を変えてますがこれをそのまま移行したいです。 関数の回答に対し、こう言うのは、エクセルの関数の特徴・本質を知らない人の言うことです。 関数で書式を移したりできません。 上記VBAはその点考慮しましたが。

sapporolove
質問者

お礼

有難うございました。 VBAに未だ慣れてなく、理解するのに、時間が掛かりそうです。 じっくりと取り組みます。 お世話になりました。

その他の回答 (3)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

>データは種類により、フォント色、下地の色を変えています。 そのまま移行させるのなら、マクロによる処理かと思います。 データがある条件でフォント色・塗りつぶし等が決まっているのなら、 移行した後で対応できるかも知れません。 ただ、決まっていない場合なら、私にはちょっとお手上げです。

sapporolove
質問者

補足

有難うございした。 元データの色は、列は増えますが、移行後に処理可能です。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

次の方法は如何でしょうか。 ■別シート(シート2)にA列の抽出 (1)シート2任意セルを選択→データ→フィルタ→フィルタオプションの設定 (2)指定した範囲を選択→リスト範囲に元シートのA列を選択、抽出範囲を別シートのA1を選択、重複するレコードは無視するを選択→OK  先頭行と次行が重複しますので先頭行を削除して下さい。 ■別シート(シート2)にB列の抽出 (1)次の数式をB1に設定し、縦横に必要分コピー  配列数式の為、入力完了時にshift+ctrl+enterキーを同時押下して下さい。 =IF(COUNTIF(Sheet1!$A:$A,$A1)>COLUMN(A$1)-1,INDEX(Sheet1!$B:$B,SMALL(IF(Sheet1!$A$1:$A$2000=$A1,ROW(Sheet1!$A$1:$A$2000),99999),COLUMN(A$1))),"") ※データ件数は仮に2000件としていますので調整して下さい。

sapporolove
質問者

補足

有難うございました。 データの内、数字番号の並び替えは、教えていただいた方法で出来たのですが、B列に数字番号、C列にデータが入っています。 C列(データ)を反映させるのは、どうすれば良いのでしょうか? それと、データは種類により下地の色、フォント色を変えてますがこれをそのまま移行したいです。 式の内、99999の意味は何でしょうか?データ数は388件です。 よろしく御願いいたします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

シート構成(データの配置)はどのようになっているのでしょうか?

sapporolove
質問者

補足

有難うございました。 A列にNp、B列に子番号(1,2,3,4,5,6)、C列にデータです。 データは種類により、フォント色、下地の色を変えています。 宜しく御願いいたします。

関連するQ&A