アプリ版:「スタンプのみでお礼する」機能のリリースについて

7列の表を一列に直したいのです。
A1,A2,A3・・B1,B2とあるものを別のシートに
A1→A1,B1→A2,C1→A3・・・と、すべてを一列にするにはどうしたらいいでしょうか?
Offsetを使うことも考えましたが、あまり効率がいいとも思えず、
マクロもどうすればいいかがわかりません。
表には数値だけでなく文字列もあるので、抽出はいらないのですが、
作業で一列になっていないと不便なのです。
いい方法はありませんか?
Excelは2003です。

A 回答 (6件)

マクロの例です。



Sub test1()
  Dim rng As Range
  Dim i As Long
  
  Set rng = Sheets("Sheet1").Range("A1:G10")
  For i = 1 To rng.Count
    Sheets("Sheet2").Cells(i, "A").Value = rng(i).Value
  Next i
  Set rng = Nothing
End Sub

Sub test2()
  Dim rng As Range
  Dim n As Long
  Dim i As Long
  
  Set rng = Sheets("Sheet1").Range("A1:G10")
  n = rng.Columns.Count
  Application.ScreenUpdating = False
  For i = 1 To rng.Rows.Count
    rng.Rows(i).Copy
    Sheets("Sheet2").Cells(i, "A").Offset((i - 1) * (n - 1)).PasteSpecial _
      Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
  Next i
  Application.ScreenUpdating = True
  Set rng = Nothing
End Sub
    • good
    • 0
この回答へのお礼

訂正をいただいたもので実行して成功しました。
助かりました!
ありがとうございました。
これで仕事がだいぶ楽になります。

お礼日時:2008/12/27 05:30

再び Cupperです


解決しているようですが、他の方法を追加アドバイスです

回答番号:No.1の補足から
>それだと20行くらいになったときに面倒になりませんか?
行数が増えたときに面倒とかいうのであればしかたがないですね
それでも、一回きりの作業であればマクロやら関数やら使わないで行うほうが効率が良いので
それらを使わない方法を紹介しました
1行目のセルを選択して ShiftキーとCtrlキーを同時に押しながら下矢印キーを押すなどの
“ショートカットキー”を使うと効率いいんですけど…
慣れるとマクロや関数を作る(教えてもらってコピーする)よりも早くできます


とりあえずマクロが紹介されていますので次に関数を紹介してみましょう

INT(ROW(A1)/COUNTA(1:1)) これで列の位置、MOD(ROW(A1),COUNTA(1:1)) これで行の位置を
示せますので OFFSET関数やINDIRECT関数を使って一度に参照することができます
ただし1行目にデータがひとつも無い場合、列方向を決める関数内でエラーになるので注意が必要です

 =OFFSET(INT((ROW(A1)-1)/COUNTA($1:$1)),MOD(ROW(A1)-1,COUNTA($1:$1)),1,1)

これを必要なだけ下にコピーすればOK
余計にコピーすると、そこには "0" が表示されます
場合によってはこの関数の結果をコピーして「形式を選択して貼り付け」で「値」を選んで貼り付けることも検討してください


 ※ OFFSET、INT、ROW、COUNTA、MOD の各関数の詳細は Excelのヘルプを参照してください
   行列を入れ替えるため、OFFSET関数では行と列を逆にしていることに注意してください
    • good
    • 0
この回答へのお礼

ありがとうございました。
時々作るなら便利ですね。
関数はとても参考になりました。
ただ、一日に10回は行う作業なので、
やはりマクロの方が私にはいい様です。
(行数もまちまちです)
今後の参考にしたいと思います。

お礼日時:2009/01/04 18:38

回答番号:No.3で、誤記がありました。


I列までとしましたが間違いです。
7列ということですからG列までに訂正してください。
失礼しました。
    • good
    • 0

表のあるシート名をSheet1と仮定します。


≪例1≫
Sheet1A列データを、別シートA列A1以下にコピー
貼り付けたデータセル先頭B列セルに、1と入力
1と入力したセルのフィルハンドルをダブルクリックで連番入力
Sheet1B列データを、別シートA列データセルの下にコピー
貼り付けたデータセル先頭B列セルに、1と入力
1と入力したセルのフィルハンドルをダブルクリックで連番入力
といった操作をSheet1のI列データまで繰り返す
すべてコピペし連番が入力されたら、B列を主キーにして「昇順」で「並べ替え」
B列の連番は不要になるので消去

≪例2≫
まず、別シートのA列にSheet1のA列からI列までの1行目のセル参照式を入力
=Sheet1!A1
=Sheet1!B1
=Sheet1!C1



=Sheet1!I1
上記参照式入力セル範囲を選択
編集メニューの「置換」で
=

#
に「すべて置換」
セル範囲選択枠の右下角の■(フィルハンドル)を下方にドラッグ&ドロップ
#Sheet1!A1
#Sheet1!B1
#Sheet1!C1




#Sheet1!I1
#Sheet1!A2
#Sheet1!B2
#Sheet1!C2




#Sheet1!I2
#Sheet1!A3
#Sheet1!B3
#Sheet1!C3



#Sheet1!I3


セル範囲選択状態のまま、編集メニューの「置換」で
#

=
に「すべて置換」
参照式が不要なら、A列をコピー、その場で「形式を選択して貼り付け」の「値」で貼り付け
    • good
    • 0
この回答へのお礼

裏技という感じで、参考になりました。
そういう方法があったんですね。
関数でいっぺんに解決というのを考えてましたが、
大穴でした。
それがあったか!と目からうろこでした。
Excelの奥の深さを感じました。
ありがとうございました。
どれが自分にとって使いやすいか、覚えやすいか、
それは人それぞれってことなんですね。

お礼日時:2008/12/27 05:52

状態がうまく把握できないのですが・・・


A1,A2,A3,・・・B1,B2,B3,・・・G1,G2,G3,・・・
と、7列あるデータを
A1→A1,B1→A2,C1→A3・・・
と、1列に並べたい?
では、もともとA2やA3に入っていたデータはどこへ?

この回答への補足

もともと入っていたデータはその下に入れたいのです。
A2にあったものは、つまり、A8にしたいんです。
別シートに移してやりたいのですが、できませんか?

補足日時:2008/12/27 03:52
    • good
    • 0

並べたい範囲をコピーして「行列を入れ替えて貼り付け」


そのあと、列単位で縦に並ぶように整形する

…と言うのはダメ?

この回答への補足

それだと20行くらいになったときに面倒になりませんか?

補足日時:2008/12/27 03:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!