• ベストアンサー

エクセルで365×24の表を8760×1に並び替えたいです

 エクセルで、下のような365×24の表で    A  B  C  ・・X 1  ● ● ●   ●           2  ● ● ●   ● 3  ● ● ●   ●        ・                365  ● ● ●   ●            で、これを8,760×1の表に簡単に変換したいのですがやり方がわかりません。少なかったらコピーして行と列を入れ替えるで、やってもいいのですが今回はこれが、かなりの量があり手作業だと時間がかかりすぎ、実用的ではありません。ですので、この作業を簡単に出来る方法を探しております。どうぞ宜しくお願いします。  なお、こちらはオフィス2000、2002を使用しております。

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

  • ベストアンサー
回答No.2

 まずCSVファイルに書き出します。すると次のようになっているでしょう。 ●,●,●,●,● ●,●,●,●,● ●,●,●,●,●  それで、縦一列ですので、「カンマ」をすべて「改行」に置換します。ワープロソフト、またはテキストエディタを使います。  すると、次のようになります。  これを再度、Excelで読み込みます。以上です。 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

senmi00
質問者

お礼

 回答有難うございました。教えていただいた方法でうまく出来ましたが、今回はかなりの量のデータを処理しなくてはいけなかったので、この方法では時間がちょっとかかりすぎてしまいました。  しかし、このようなやり方があるとは思わなかったので、勉強になりました。どうもありがとうございました。

その他の回答 (3)

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

関数式でやる思考プロセスを説明します。 エクセルの関数は式を入れるセル以外の、他のセルに値をセットできません。(VBAは自由です。) (本件は別のセルに持ってくるだけで、演算は要りません ので、望みのセルを指定するだけで良いのです。) 受けるセル側で、どこからかの来て欲しいセルを表現(指定)すれば良いのです。 A列の下に続けてB列をその下にC列を続けるやり方を 考えます。 例えば値を持ってくる(受ける)セル1000行目には どの行の、どの列なのか?を考えます。 A列1-365を越えるとBの1-365を持ってくる。 これで730セル埋まります。1000-730=270ですからC列の270行目のセルを持ってくるべきことが 判ります。このことを一般化して、 (A)列は現在行1000を365で割った2に1足した 2+1=3(-->C列)が決める。 (B)元の表の上からの第何番行数は、余りの270が決める。 以上は元の表の左上隅($A$1)を基点にして考えてい る。 以下は4行の元表例で説明します。 行は=MOD(ROW()-1,4)+1を使うと、1、2、3、4、1、2、3、4・・・の繰り返しが出来る。 列は=INT((ROW()-1)/4)+1を使うと、1,1,1,1,2,2,2,2,3、3、3、3・・・が出来る 左上隅を基点に列、行を指定してセルを表現する関数に OFFSET関数があることを思い出して、これを使う。 (知ってないと思い出せませんが) ただOFFSET関数はOFFSET(基点、行、列) ですが行や列は「隔たり」行数や列数を指定せねばならないので-1しておく必要があります。 それで空いた列の第1行に =OFFSET($A$1,MOD(ROW()-1,365),INT((ROW()-1)/365))といれ、下へ複写します。8760行まで+ハンドルを引っ張るのは大変ですがほかに楽な方法はないでしょう。 ---- VBAならOFFSETに当たるのはCells(i,j)です。この問題ではCells(i,1)です。こちらなら元の表のx行、y列から収まるべきiを計算します。i=(x-1)*365+jになります。 xは1-365、yは1-24をFOR分でネストして 繰り返します。

senmi00
質問者

お礼

 回答有難うございました。詳しく教えていただいたのですが、私には少しハードルが高くちょっと理解できない部分がありましたが、これから少しづつ勉強していきたいです。  今回は本当に有難うございました。

  • junijuni
  • ベストアンサー率25% (12/48)
回答No.3

こんなのもありかな… Sub Rearranges() nRow = 365 nCol = 24 For i = 1 To nRow For j = 1 To nCol ’A1、A2、A3…、B1、B2と一行にするときはこっち ActiveSheet.Cells((j - 1) * 10 + i, nCol + 1) = ActiveSheet.Cells(i, j) ’A1、B1、C1…、A2、B2と一行にするときはこっち ActiveSheet.Cells((i - 1) * 4 + j, nCol + 1) = ActiveSheet.Cells(i, j) Next Next End Sub マクロで実行します。 条件に応じてコメント行を使い分けてください。 行数が変わる場合はnRowの値を、 列数が変わる場合はnColの値を変更してください

senmi00
質問者

お礼

 回答有難うございました。マクロについて、よくわからなくうまくできなかったのですが、今回教えていただいて、興味がわきました。これから少しづつ勉強できたらいいなと思いました。  今回は有難うございました。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 どこかの列(仮にY列)を作業列として使用します。 Y1に、 =OFFSET($A$1,INT((ROW()-1)/24),MOD(ROW()-1,24)) と入力して、8760行目までコピーします。 これだと、 A1,B1,C1・・・X1,A2,B2・・・W365,X365 の順になります。(行優先) もし列優先で、 A1,A2,A3・・・A365,B1,B2・・・X364,X365 のようにするなら、数式を、 =OFFSET($A$1,MOD(ROW()-1,365),INT((ROW()-1)/365)) にします。 数式をコピーして全データを表示出来たら、そのデータ範囲を選択してコピーし、別の場所に[形式を選択して貼り付け]の[値]貼り付けして下さい。

senmi00
質問者

お礼

 回答有難うございました。教えていただいた関数を入力してうまく出来ました。すばやい解凍有難うございました。

関連するQ&A

  • エクセルの表の作り方

    いつもお世話になっております。 質問なのですが、yahoo、またはiタウンページの電話帳からA列に企業名、B列に電話番号、C列に住所が入った表を作りたいと思っております。 電話帳をコピー→エクセルにて形式を選択して貼り付け(テキスト) まではできたのですが、空白の行が入り、またすべてA行に入ってしまったりしてなかなかうまくいきません。 どのようにして作成すれば簡単にできるでしょうか。 大量にあるため、なるべく作業の少ないものが希望ですが、 急ぎのため何か手段をご存知の方いらっしゃいましたら ご教授よろしくお願いいたします。

  • エクセルの表で

    エクセルの表で行と列を入れ替えて、今までA列にあったものを1行目にB列にあったものを2列目に表示させる方法があったとおもいますが、どうやりますか?

  • エクセル 表のフォーマットを変えずに貼りたい

    office2010です。 シートAに、例えば4行×5列の表があります。 この表は、行や列の幅を適切な大きさに調整してあります。 この表をシートBに貼ると、表の行と列の幅は、シートBの幅になってしまいます。 シートAの票の形を崩さずに、シートBに貼るにはどうすれば良いのでしょうか?

  • エクセルの表をラベルに変換

    エクセルで作った一覧表を、マクロで宛名ラベルのような表に 変換したいです。 たとえば、            A     B      C 1列  152-25   静岡県   松田 2列  258-52   北海道   鈴木 のような表を       A      B      C 1列  152-25 2列  静岡県  3列  松田 のように変換することはできるでしょうか。 マクロ等初心者で、本を読んでもよくわかりません。 よろしくお願いします。

  • エクセルの貼り付けについて

    シート1には  A B 1あ い 2う  3え お という表があります シート2には  C 1か 2き  という表があります シート1の2行目はしばらく使わないので 非表示にして Cの列をコピーして貼り付けをしたところ 2行目に「き」と入力されてしまいました このきを3行目に表示させるコピー&ペーストの方法ありませんか? エクセル2016使用

  • エクセル表からエクセル表を作成するには

    例えば、ハガキソフトで作った住所録を別のエクセル表にコピーしたい。 → 特定の列を指定して 【何行あるか分からないデータを、特定の列を指定して、別表にしたい】こんな事簡単にできませんか? うまく説明できませんが、行データを読んで、別表の特定セルへコピーしてやりたい、データ行は何行あるかは不明(表を見れば分かるのですが・・)な場合。 要は最初の行からデータ終わりの行を読んで、別表へコピーしたいのですが、宜しくご教授お願いします。

  • エクセルでファイル間での表のコピーを自動で行いたいのですが。

    エクセルでファイル間での表のコピーを自動で行いたいのですが。 エクセルで別ファイルに表のコピーを自動で行いたいのですが。 AファイルとBファイルに同じ表が作成されていて (まったく同じではありません、例えばBファイルの表には最後の列や行には合計行があるとか) Aファイルの表が変更された場合Bファイルの表も自動的に変更されて欲しいのですが 表の中の値だけでなく 表の行や列が増えたり減ったりという事も変更したいのですが

  • EXCELの表を参照して値を返す方法

    例えば下記のような表があるとします。 表1(シート1)  A列  B列  ~10  A 11~20  B 21~30  C 31~50  D  ・  ・  ・ 151~  Z 表2(シート2) 45   X 21   X 133   X Xの箇所に表1のA列を参照してB列の値(AとかC)を返す方法はないでしょうか?IF文を使った場合7レベルまではできるのですが、それ以上のネストは無理なようです。ちなみに表1は30分類(行)ほどあります。 よろしくお願いします。  

  • Dreamweaverにエクセルの表を移植

    ドリームウェーバーで、表を作成することができますよね。今、手元にエクセルで作られた表があります。見た目はエクセルもドリームウェーバーの表も良く似ていますが、このエクセルの表と同じ物をHTML上に移植しなければなりません。 今は、ドリームウェーバーで、200行近い行を作って、ひとつひとつテキストをひとますずつ、コピペではめ込んでいるんですが、気の遠くなるような作業で、えいやっと!列を、ドカンとペーストするような簡単な方法がないか頭を抱えています。 エクセル上の列をコピーして、ドリームウェーバーにはめ込もうとしても、枠外にペーストされてしまいます。(泣)

  • Excelで複数条件を満たし残高を計算する関数

    画像のようなEXCELの表があります。 B列No.(第一条件)、C列商品名(第二条件)が一致するものを 仕入から販売を引いてF列のような数字になるように残高を出したいです。 どんな関数でも構いません。 関数でできる方法があれば教えてください。 実際のデータ量が2000行くらいあるので手作業でするのが大変で…。 よろしくお願いしますm(_ _)m OS:WindowsXP Office:2007

専門家に質問してみよう