エクセルで作った表(3列、1000行)

   列1  列2  列3
行1 A1 A2 A3
行2 B1 B2 B3
行3 C1 C2 C3


    列1
行1 A1
行2 A2
行3 A3
行4  (ブランク行)
行5 B1
行6 B2
行7 B3
行8  (ブランク行)
のようにしたいのですが、方法がわかりません。
1000行あるので、手作業だと大変ですので、何かのツールを使えばできるのではと考えています。
この場合、
(1)エクセルのマクロで、こんな処理(並べ替え)はできますか?
(2)アクセスでこのエクセルシートをインポートして、アクセスのクエリーで処理して
  再度エクセルにエキスポートする方法は現実的でしょうか?
 それが出来るとしたら、クエリーの何という機能を使えばよいのでしょうか?

恐縮ですが、ご存知の方がいらっしゃいましたら教えて下さい。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答8件)

id:garyo No.1

回答回数1782ベストアンサー獲得回数96

ポイント30pt

http://www.vector.co.jp/

Vector:ソフトウェア・ライブラリ&PCショップ

URLはダミーです。

こんな感じでしょうか?

Sub Macro1()

For y = 1 To 1000

For x = 1 To 3

Worksheets(”Sheet2”).Cells((y - 1) * 4 + x, 1) = Worksheets(”Sheet1”).Cells(y, x)

Next x

Next y

End Sub

id:Dan

ありがとうございました。

マクロで出来るのですね。助かります。

これからマクロの使い方を勉強します。

感謝します。

2004/08/04 14:43:10
id:jino No.2

回答回数12ベストアンサー獲得回数0

ポイント10pt

セルのデータだけをコピーして別のシートのA1を選択

ツールバーの貼り付けの右に

下向きの三角があるのでそれをクリックするとベローンと出てきますのでその中から

[行列を入替える]

をクリックで出来ます

id:Dan

ありがとうございました。

でも、行列を入れ替えるのではないのです。

2004/08/04 14:46:12
id:taknt No.3

回答回数13539ベストアンサー獲得回数1198

ポイント20pt

最初に 左端を一列あけてください。

それから

Sub Macro1()

’ Macro1 Macro

’ マクロ記録日 : 2004/8/4

’ Keyboard Shortcut: Ctrl+q

Dim a As Integer

Dim b As Integer

Dim c As Integer

Dim d As Integer

b = 1

c = 2

d = 1

For a = 1 To 1000

Cells(d, 1) = Cells(b, c)

c = c + 1

If c >= 5 Then

c = 2

b = b + 1

d = d + 1

End If

d = d + 1

Next a

End Sub

を実行すればいいでしょう。

id:Dan

ありがとうございました。

やってみます。

2004/08/04 14:47:42
id:jino No.4

回答回数12ベストアンサー獲得回数0

私の以前の回答が質問の意図を完全に勘違いしてました。見なかったことにしてください。

(>_<)

id:Dan

了解しました。

わざわざご連絡いただきありがとうございました。

2004/08/04 14:48:45
id:aki73ix No.5

回答回数5224ベストアンサー獲得回数27

ポイント30pt

マクロが一番手軽でしょう

作ってみました

Private Sub CommandButton1_Click()

Sheets("Sheet1").Select

For I = 1 To 1000

For J = 1 To 3

Sheets("Sheet2").Cells(J + I * 4 - 4, 1).Value = Cells(I, J).Value

Next

Next

End Sub

id:Dan

ありがとうございました。

大変助かります。感謝感謝です。

2004/08/04 14:49:15
id:garyo No.6

回答回数1782ベストアンサー獲得回数96

ポイント20pt

http://www.hatena.ne.jp/1091595446#####

エクセルで作った表(3列、1000行)    列1  列2  列3 行1 A1 A2 A3 行2 B1 B2 B3 行3 C1 C2 C3 を     列1 行1 A1 行2 A2 行3 A3 行4  (ブランク行) .. - 人力検索はてな

URLはダミーです。

>(2)アクセスでこのエクセルシートをインポートして、アクセスのクエリーで処理して

>再度エクセルにエキスポートする方法は現実的でしょうか?

あまり現実的ではないです。

レポートとして印刷するのであれば極簡単ですが、データとして扱った場合は難しいですね。

id:Dan

ありがとうございました。

ではエクセルのマクロでの処理が良いのですね。

2004/08/04 18:03:22
id:LED No.7

回答回数23ベストアンサー獲得回数0

ポイント20pt

http://www.hatena.ne.jp/1091595446#

エクセルで作った表(3列、1000行)    列1  列2  列3 行1 A1 A2 A3 行2 B1 B2 B3 行3 C1 C2 C3 を     列1 行1 A1 行2 A2 行3 A3 行4  (ブランク行) .. - 人力検索はてな

マクロの方が多いので基本機能でエイヤとやる方法を…

1.行1〜3を全て選択します。

2.Ctrl+Cを押します。

3.別のシートのA1セルを右クリックして形式を選択して貼り付けをクリックします。

4.表示されるダイアログで「行列を入れ替える」をチェックします。

5.縦に並び変わるので、あとは手動でB列を全選択してA列の末尾に貼り付け、C列も同様に全選択してA+B列の末尾に貼り付けます。

半手動ですが、読み込んだCSVをサクット要素ごと並び替えしたい時等に便利な方法です。

マクロになれてない方はこちらの方が早いのではないでしょうか?

id:Dan

ありがとうございました。

でも1000行あるので、ちょっと・・・

2004/08/04 18:26:30
id:dambusters No.8

回答回数17ベストアンサー獲得回数1

ポイント30pt

A列からC列までの3列のうち、1行目から1000行目までの部分について、

事例のように値が入力されている場合には、たとえば、同じワークシートのA列からC列を除く列の、1行目から4000行目までの範囲に、次の関数を設定すれば、マクロを使わずに、御希望の結果がでると思われます。

=IF(MOD(ROW(),4)=0,””,INDIRECT(CHOOSE(MOD(ROW(),4),”A”,”B”,”C”,””)&TEXT(INT(ROW()/4)+1,”#”)))

あとは、上記の式を設定した範囲をコピーし、形式を選択して貼り付け...画面を開き、「値」として貼り付ければ、他のワークシート等で利用できます。

id:Dan

ありがとうございました。

そういう方法もあるのですね。

試してみます。

2004/08/05 09:13:33

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません