• ベストアンサー

エクセルシートの票データの置き換えについて、

エクセルのシートに (A1)から(D50)まで一覧表があり、それぞれ200個のセルに文字が入力されています。 これを別のシートに縦一列に並び替えたいのですが、 A1=(A1) A2=(B1) A3=(C1) A4=(D1) A5=(A2) A6=(B2) A7=(C2) A8=(D2) A9=(A3) A10=(B3)  ・  ・  ・ A199=(C50) A200=(D50) 出来れば簡易言語で、それで無理ならマクロでも結構です。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >出来れば簡易言語で、それで無理ならマクロでも結構です。 こちらのカテゴリでお聞きになっているので、どうしても、VBAの回答になってしまうと思いますね。ただ、簡単な書き方というか、記録マクロに近い状態で書くと、以下のようになります。 Sub Macro1Revised() Dim Sh1 As Worksheet Dim Sh2 As Worksheet Set Sh1 = Worksheets("Sheet1") Set Sh2 = Worksheets("Sheet2") With Sh2.Range("A1:A200")  .FormulaLocal = _  "=OFFSET(" & Sh1.Name & "!$A$1,INT((ROW(A1)-1)/4),MOD(ROW(A1)-1,4))"   .Value = .Value End With Set Sh1 = Nothing: Set Sh2 = Nothing End Sub '----------------------------------------------- 'VBAらしくするなら、こんな風にもありかな? '選択範囲が4角形で、1列にするなら可能なのです。 '----------------------------------------------- Sub TransferValues() Dim i As Long Application.ScreenUpdating = False For Each c In Worksheets("Sheet1").Range("A1").CurrentRegion  i = i + 1  Worksheets("Sheet2").Cells(i, 1).Value = c.Value Next c Application.ScreenUpdating = False End Sub '----------------------------------------------- なお、余談ですが、マイクロソフト側のOfficeの「マクロ」のオフィシャルな定義ですが、『プログラマーズガイド』の中の「プログラミングの基礎」では、 マクロは、引数を持たないパブリックなSub プロシージャだけのことを指す、としています。すべてのマクロは、プロシージャではあるが、すべてのプロシージャがマクロであるとは限らない、マクロの記録機能を使って生成されるプロシージャとOfficeアプリケーションの[マクロ]ダイアログボックスから実行できるプロシージャは、すべてマクロである、と言っております。 パブリックなSub というのは、Public キーワードを付けて宣言しますが、端にその区別だけであって、パブリック・プロシージャを作成する時には、Public キーワードを使用する必要はありません、となっています。 知っている人は、百も承知の話ですが、もう、マイクロソフトのオフィシャルな書籍なんて顧みられることはありませんから、その内容が意外っていう人もいるかもしれません。

noname#18526
質問者

補足

皆さん有難うございます。実用化しました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

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

>簡易言語 この言葉はエクセルでは使わないと思います。関数や関数式による 解法でしょうか。昔はPIPSとか、EPOCALCJとか色々もてはやされましたが。 >マクロ エクセルVBAです。アクセスと違って、マクロは特別なものはなく、エクセルVBAです。「マクロの記録」で使われているために、よく使われていますが。 ーーーー 本題 関数式による解法。 各列の最下行がばらばらだと、関数では難しい。そろっているとして、 例として、簡単のため、7行の表データにしました。 Sheet1の A2:D8(A1:D7ではないです、注意。式が変わるので) A-D列以外の列にたとえばF列以外に F2に =INDEX($A$2:$D$8,MOD(ROW()-2,7)+1,INT((ROW()-2)/7)+1) と入れて、式をした方向に複写 1 2 3 4 5 6 7 8 9 10 11 12 13 以下略。 50行なら =INDEX($A$2:$D$51,MOD(ROW()-2,50)+1,INT((ROW()-2)/50)+1) sheet2に作るなら A2などに =INDEX(Sheet1!$A$2:$D$51,MOD(ROW()-2,50)+1,INT((ROW()-2)/50)+1)

すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.2

Private Sub CommandButton1_Click()   Dim I As Integer   Dim J As Integer   Dim R As Integer   For I = 1 To 50     For J = 1 To 4       R = R + 1       Worksheets(2).Cells(R, 1) = Worksheets(1).Cells(I, J)     Next J   Next I End Sub ※Excel 門外漢ですので、参考程度に!

すると、全ての回答が全文表示されます。
  • yakou850
  • ベストアンサー率49% (25/51)
回答No.1

自分のやり方を書かせてもらいます。 参考になればいいのですが・・・。 設定:Sheet1の200個のデータをSheet2に縦横変換して書く For i=1 to 200 sheets("Sheet2").Cells(i,1) = sheets("Sheet1").Cells(1,i) Next i こういったソースではどうですか?

すると、全ての回答が全文表示されます。

関連するQ&A