- ベストアンサー
エクセル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 サイズの展開を横表示から縦表示に変更したいのです。 素人質問で申し訳ありませんが、どなたか宜しくお願い致します。
- みんなの回答 (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
その他の回答 (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))
お礼
こんばんは。 簡潔にお答えいただきありがとうございます。 明記していただいたような方法があるのですね。 とても勉強になりました。 質問へのご回答ありがとうございました。 本当に助かりました。
- NOBNNN
- ベストアンサー率50% (93/186)
>>関数を使用して処理したいと考えております。 むりだと思います。 VBAでマクロをつくって作業するしかないです。 雛形として 1行分を縦にする作業をおこない、これをマクロに記録します。 あとはこれを入力のデーター行数分、繰り返すようにマクロを改造すればできあがりです。
お礼
こんばんは。 やはり関数で処理するには厳しいようですね。 ご意見ありがとうございます。 おっしゃるとおり、VBAを使用し作業いたします。 ご回答していただきありがとうございました。
お礼
こんばんは。 ご丁寧にありがとうございます。 画像まで付けていただき、とてもわかりやすかったです。 ご指摘の通り、関数で処理するには無理があったようです。 明記していただいたとおりに作成してみたところ、 あっさり処理することができました。 本当にありがとうございました。 心から感謝いたします。