• ベストアンサー

エクセルで項目を以下のようにするには?

下記のようなデーターがあり、項目を並び替えてセルに表示させたいのですが、素早く出来る方法が分からず、困っています。   順   モデル名  番号  数量   1   x-10  32  100   2   y-13  19  200   3   z-25  36  285   4   w-65  43  155と言うような規則でデーターが横に並んでいるのですが これを  順    1     モデル名 x-10     番号    32     数量    100      順    2     モデル名 y-13     番号    19     数量    200          ↓          ↓ のように縦に上から下へ項目を表示させたいのですが、どのような方法がありますか?VLOOKやインデックス等の関数を使いトライしていますが上手く行きません。行列を入れ替えて貼付け等もしていますが、手間が係り作業が進みません。どうすれば縦並びに出来るのでしょうか?いちいちセルコピー~貼付けなどしなくても簡単の操作で一発に出来る方法はありませんか。よろしくお願いします。

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

  • ベストアンサー
  • samui
  • ベストアンサー率31% (6/19)
回答No.4

データがsheet1の左上に詰めてあるなら sheet2のA1に =INDIRECT("sheet1!R" & CEILING(ROW()/4,1) & "C" & MOD(ROW()-1,4)+1,FALSE) と入力した後数式を下方向にコピーします。

1960ken
質問者

お礼

 ご返答有難うございます。ご説明いただいた式を表に挿入してチャレンジしてみます。1行の式でできるとは!!  よく精通しておられる方はやはり違いますね。 色んな手順がありそうなんですが、明日も休日なのでじっくり作りたいと思います。本当に有難うございました。

1960ken
質問者

補足

昨日はご返答、どうも有り難うございました。早速、色んな方からアドバイスされた手順を実行し、思うように配置を変えることが出来ました。  とりわけ、samuiさんから連絡いただいた手順は私のような者でも理解でき、応用、汎用も効きそうです。  ずっと、これを実現するために手を焼いておりましたが、ようやく可能とすることが出来ました。  アドバイスいただいた関数式を参考にして、もっと効率的なものを作りたいと思います。  本当に有難うございました。

その他の回答 (4)

回答No.5

VBAを作ってみました。 条件は ・「Sheet1」にデータがあって、その領域の左上隅のアドレス(ここでは「順」と書いてあるセル)が、"A1"であること。 ・出力先のシートは「Sheet2」であること VBAは以下の通りです。 「* 5」と書いてあるところを「* 4」にすると、出力が空白のないデータになります。 Sub Macro1() ' ' OrgSheetName = "Sheet1" TargetSheetName = "Sheet2" Worksheets(OrgSheetName).Activate Range("A1").Select Set tbl = Selection.CurrentRegion r = tbl.Rows.Count c = tbl.Columns.Count Set targetSheet = Worksheets(TargetSheetName) For crow = 2 To r For ccol = 1 To c targetSheet.Cells((crow - 2) * 5 + ccol, 1).Value = tbl.Cells(1, ccol).Value targetSheet.Cells((crow - 2) * 5 + ccol, 2).Value = tbl.Cells(crow, ccol).Value Next ccol Next crow End Sub

1960ken
質問者

お礼

 ご返答有難うございます。 非常に詳しく解説いただいて、これならVBAアレルギーの私でも何とか試せそうです。英語の記述が非常に苦手な私ですが、トライして見ます。

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

見出し名(漢字)に当たる 順 モデル名 番号 数量 はそれぞれA1、A2,A3,A4に1回いれ、A4で+ハンドルを出し 下方向へ引っ張ると繰り返しが望みの回数現れる。 後はB列に横に4項目並んでいるものを、縦1列に並べ変えればよい。 E1:H5に 順 モデル 番号 数量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 とあったとすると B1に=OFFSET($E$2,INT((ROW()-1)/4),MOD(ROW()-1,4)) と入れてB16まで式を複写すると A1:B16が 順 1 モデル名 2 番号 3 数量 4 順 5 モデル名 6 番号 7 数量 8 順 9 モデル名 10 番号 11 数量 12 順 13 モデル名 14 番号 15 数量 16 となります。INT,MOD関数がミソです。質問例と変わってしまいましたが、うまく実際例で置き換えてください。A1:B16にあたるところが別シートの場合もSheet1! $A$2のようにしてやってください。

1960ken
質問者

お礼

ご返答有難うございます。ご説明いただいた手順で式を組んでみます。どうもすみません。

  • TinyPine
  • ベストアンサー率30% (719/2386)
回答No.2

VBAでマクロを組むしか無いと思います。 いきなりマクロを組むのは大変でしょうからマクロの記録機能を使ってとりあえずのマクロを作成し、それをモディファイされてはいかがでしょうか。 マクロの登録 ツールからマクロを選択し、新しいマクロの登録を選択します。マクロ名登録が出ますので適当な名前を付けます。 そのご、1回コピー,貼り付けで総ての作業を行います。 その後ツールからマクロを選択し、記録の停止を選択します。 マクロの実行 表を作ります。 ツールからマクロを選択し、マクロを選択します。先ほど作成したマクロを選択して実行させます。 マクロはシート状にボタンを作成して関連付ければ一々ツールから選択しなくてもボタンを押せば実行出来ます。 記録されたマクロは無駄が多いので、これを参考にして作り直すと良いでしょう。 マクロを使用されるのが始めてでしたら、このシートを開けるとき、セキュリティーレベルによっては警告が表示されますが、OKを選択した下さい。

1960ken
質問者

お礼

 ご返答有難うございます。 やはりマクロでないと無理でしょうか?毎回編集する表が変るもので項目数、データー数などが変動します。  貼付け作業操作をせずに配置換えをしょうとするとマクロになりますか。  関数は少しくらい使えるのですが、マクロは手順記録ばかりでVBAコードやモジュール、プロシージャ等が難しくて私のスキルでは荷が重いのですが(コードを覚える根気がないかも)やってみます。 どうもすみませんでした。

noname#96725
noname#96725
回答No.1

こんばんは。 下の方法ならお望み通り素早く一発で出来ますよ。 表の範囲を全選択→コピー→周りが広く空いている適当なセルを選び→編集→形式を選択して貼り付け→行列を入れ替えるにチェックを入れる→OK

1960ken
質問者

補足

ご返答ありがとうございます。 その方法は知っていますが、毎回、参照する表がかわり、都度貼付け操作をしていますが、時間が係ってどうしょうもないのです。  関数その他で一発で配置換えを出来る方法を探しています。セルを相対、絶対参照に切り替えたりして数式をコピーしても上手く行かず、手順を少なくしてするにはどうすればよいのか思案しています。