• ベストアンサー

エクセル2003 横のデータを縦に並べたいです。

以前にも同じような質問をされている方がいるかもしれませんが、 どなたかお知恵をお貸しください。 関数を使用して処理したいと考えております。 下記にファイルの一部を抜粋致しましたので、 ご教授のほど宜しくお願い致します。 現在の形    A      B      C      D      E 1 SHIRTS カラー黒  サイズ38  サイズ39  サイズ40 上記のような形で4000行くらいあります。 列は最長でABまで使用しております。 上記のようなデータを下記のような形に並べ替えたいと思っております。 希望の形    A      B      C 1 SHIRTS カラー黒 サイズ38  2 SHIRTS カラー黒 サイズ39 3 SHIRTS カラー黒 サイズ40 サイズの展開を横表示から縦表示に変更したいのです。 素人質問で申し訳ありませんが、どなたか宜しくお願い致します。

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

  • ベストアンサー
  • avanzato
  • ベストアンサー率54% (52/95)
回答No.3

こんにちは。 4000行ある時点で数式(関数)で処理をすることに抵抗を感じます。 VBAを使用したほうが賢明かと思います。 標準モジュールを追加し以下コードをお試しください。 尚、動作としてはSheet1にあるデータをSheet2に展開すると言った流れになっています。 質問の中で「最長でAB列まで」と言うことでしたが念のためBBやCB・・・までデータがあったとしても動作するよう作ってあります。 Sub Sample()   Dim I As Long, X As Long   Dim R1 As String, R2 As String   I = 1: X = 1   Application.ScreenUpdating = False   Do While Range("Sheet1!A" & I).Value <> "" 'Sheet1の行移動ループ     R1 = "": R2 = "C"     Do While Range("Sheet1!" & R1 & R2 & I).Value <> "" 'Sheet1の列移動ループ       Range("Sheet2!A" & X).Value = Range("Sheet1!A" & I).Value       Range("Sheet2!B" & X).Value = Range("Sheet1!B" & I).Value       Range("Sheet2!C" & X).Value = Range("Sheet1!" & R1 & R2 & I).Value       If R2 = "Z" Then '列移動コード         If R1 <> "" Then           R1 = Chr(Asc(R1) + 1)         Else           R1 = "A"         End If       Else         R2 = Chr(Asc(R2) + 1)       End If       X = X + 1 'Sheet2の次の行へ     Loop     I = I + 1 'Sheet1の次の行へ   Loop   Application.ScreenUpdating = True   MsgBox ("完了") End Sub

kylie0909
質問者

お礼

こんばんは。 ご丁寧にありがとうございます。 画像まで付けていただき、とてもわかりやすかったです。 ご指摘の通り、関数で処理するには無理があったようです。 明記していただいたとおりに作成してみたところ、 あっさり処理することができました。 本当にありがとうございました。 心から感謝いたします。

その他の回答 (2)

noname#204879
noname#204879
回答No.2

「現在の形」が Sheet1 にあり、「希望の形」を Sheet2 に作成するものとします。 Sheet2!A1: =OFFSET(Sheet1!A$1,(ROW(A1)-1)/3,) Sheet2!B1: =OFFSET(Sheet1!B$1,(ROW(A1)-1)/3,) Sheet2!C1: =OFFSET(Sheet1!C$1,(ROW(A1)-1)/3,MOD(ROW(A1)-1,3))

kylie0909
質問者

お礼

こんばんは。 簡潔にお答えいただきありがとうございます。 明記していただいたような方法があるのですね。 とても勉強になりました。 質問へのご回答ありがとうございました。 本当に助かりました。

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

>>関数を使用して処理したいと考えております。 むりだと思います。 VBAでマクロをつくって作業するしかないです。 雛形として  1行分を縦にする作業をおこない、これをマクロに記録します。 あとはこれを入力のデーター行数分、繰り返すようにマクロを改造すればできあがりです。

kylie0909
質問者

お礼

こんばんは。 やはり関数で処理するには厳しいようですね。 ご意見ありがとうございます。 おっしゃるとおり、VBAを使用し作業いたします。 ご回答していただきありがとうございました。

関連するQ&A