ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:rizspa エクセルのデータの並べ替えの方法を教えてください
困り度:
  • すぐに回答を!
大量のデータを転記して別シートに並べ替えをしています。
A1 A2 A3 A4     
B1 B2 B3 B4   
C1 C2 C3 C4
  ↓
A1
A2
A3
A4
B1
B2
B3
B4
C1
C2
C3
C4

このように並べ替えをしたいのですが、
いくつかのファイルからひとつのワークシートにまとめて一覧にする作業なので、数値だけ並べ替えるのではなくリンクの状態で数式が並べ替て、後はリンク元のファイルを変更すると一気に数値が入る というような方法を探しています。

データが大量にあるので困っています。どなたか良い方法を教えてください。      
質問投稿日時:08/07/05 11:19
質問番号:4152655
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:imogasi 質問者には相応しくない(VBAは判らない)、関係ないかも知れないが、データが4列(一定)と限らないケースや、リンク貼り付けのことなども考えると
VBAで無いと解決しないでしょう。
例データ
A1 A2 A3 A4 A5 A6
B1 B2 B3
C1 C2 C3 C4 C5
コード
標準モジュールに
Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
d = sh1.Range("A65536").End(xlUp).Row
' MsgBox d
k = 2
For i = 1 To d
For j = 1 To 10 '最右列データがJ列までとする
If sh1.Cells(i, j) = "" Then Exit For
sh1.Cells(i, j).Copy
sh2.Activate
sh2.Cells(k, "A").Select
ActiveSheet.Paste Link:=True
k = k + 1
Next j
Next i
End Sub
これだとSheet1のデータを変えるとSheet2の対応データは変わる。
関数では=Sheet1!A3とか式を入れることになるが、関数では式を埋め込むことは出来ない。
ーー
既出回答は>はリンク元のファイルを変更すると・・を見てないのでは?
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/07/06 21:25
回答番号:No.4
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

良回答10pt

回答者:mike_g =OFFSET(Sheet1!A$1,(ROW(A1)-1)/4,MOD(ROW(A1)-1,4))
種類:回答
どんな人:経験者
自信:自信あり
回答日時:08/07/05 17:01
回答番号:No.3
この回答へのお礼どうもありがとうございます!気づくのが遅くなってしまって申し訳ありません。
これだとどの場合もこれひとつでいけるのですね。
どうにもまだ仕組みがしっかり理解できないのですが、本当に助かりました。
どうもありがとうございました。

回答

良回答20pt

回答者:noname#70958 #1です。

[ROW-1]の[1]の部分を「転記先の最初の行の行番号」にすればうまく行くはずです。

転記先の先頭が[Book1]Sheet2!$H$5なら、
 =OFFSET([Book1]Sheet1!$A$1,INT((ROW()-5)/4),MOD(ROW()-5,4))

転記先の先頭が[Book1]Sheet2!$BB$1069なら、
 =OFFSET([Book1]Sheet1!$A$1,INT((ROW()-1069)/4),MOD(ROW()-1069,4))

です。
----------------------------------------
転記先の先頭位置がちょこちょこ動くのであれば、
 =OFFSET([Book1]Sheet1!$A$1,INT((ROW()-ROW([Book1]Sheet2!$H$5))/4),MOD(ROW()-ROW([Book1]Sheet2!$H$5),4))
のように転記先の先頭セルの参照を入れておいた方が、
むしろ修正しやすいかもしれません。
----------------------------------------
一般的な書き方をすれば、
 =OFFSET(【ア】,INT((ROW()-ROW(【イ】))/【ウ】),MOD(ROW()-ROW(【イ】),【ウ】))
ア:元データの左上隅セルの絶対参照
イ:転記先の先頭セルの絶対参照
ウ:列数

INDEXの場合は…
 =INDEX(【ア】,INT((ROW()-ROW(【イ】))/【ウ】)+1,MOD(ROW()-ROW(【イ】),【ウ】)+1)
ア:元データ全体のセル範囲の絶対参照
イ:転記先の先頭セルの絶対参照
ウ:列数

となります。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/07/05 14:43
回答番号:No.2
この回答へのお礼教えていただいた方法で左側作業に入っていてすっかり御礼が遅くなってしまいました。
丁寧に教えていただいてどうもありがとうございました。何とか急場をしのぐことができました。
この辺のところがしっかり身につくと、いろいろな作業が飛躍的に早くなるのでしょうね。
本当にありがとうございました。

回答

 

回答者:noname#70958 元データが[Book1]Sheet1!$A$1以下にあるとします。
元データが4列の場合、転記先の任意の列の1行目を、

 =OFFSET([Book1]Sheet1!$A$1,INT((ROW()-1)/4),MOD((ROW()-1),4))

として下方にフィル。

※実際の列数に応じて4の部分を調整してください。
※OFFSETは「閉じた状態のブック」を参照できません。

もし、転記元のブックを閉じた状態で参照する必要があるのであれば、
INDEXを使って、

 =INDEX([Book1]Sheet1!$A$1:$D$3,INT((ROW()-1)/4)+1,MOD(ROW()-1,4)+1)

のようにした方が良いかもしれません。
この場合、元データの範囲全体をあらかじめ指定する必要があります。

以上ご参考まで。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/07/05 11:50
回答番号:No.1
この回答への補足早速ありがとうございます!
サンプルで試すと思い通りの結果になるのですが実際のシートでうまくいきません。サンプルと実際のシートの違いから考えると
この場合元データと転記先の頭の位置が同じ行数にないといけないということでしょうか?
元データを[Book1]Sheet1!$A$1、転記先を[Book1]Sheet2!$A$1だとうまくいくのですが、
元データを[Book1]Sheet1!$A$1、転記先を[Book1]Sheet2!$H$5のような場合、どこの数字を変更すればよいのでしょうか?
またAがHに、1が5に変更になったくらいなら手で直せると思うのですが、AがBB、1が1069 などという場合に何か良い方法はあるでしょうか?
どうにも行列に関する関数が苦手で・・・
お手数ですがよろしくお願いいたします。
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示良回答のみ表示