Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10857 / 13644 ツリー ←次へ | 前へ→

【19487】sheet1に貼り付けたデータの分解について やす 04/11/4(木) 23:25 質問[未読]
【19488】Re:sheet1に貼り付けたデータの分解について ちゃっぴ 04/11/4(木) 23:35 回答[未読]
【19514】Re:sheet1に貼り付けたデータの分解について やす 04/11/5(金) 22:56 お礼[未読]
【19515】Re:sheet1に貼り付けたデータの分解について ちゃっぴ 04/11/5(金) 23:35 回答[未読]
【19534】Re:sheet1に貼り付けたデータの分解について やす 04/11/7(日) 14:47 お礼[未読]
【19537】Re:sheet1に貼り付けたデータの分解について ちゃっぴ 04/11/7(日) 16:44 回答[未読]

【19487】sheet1に貼り付けたデータの分解について
質問  やす  - 04/11/4(木) 23:25 -

引用なし
パスワード
   こんにちは
やすと申します。

教えて頂けないでしょうか?

EXCELのsheet1に店の名前が1000行貼り付けられています。
この1000行のデータを50行ずつ20の別のsheetを自動的に分解したいのですが
どのようにしたらよろしいのでしょうか?

こんなことが出来たら便利だとうなと思いながら
気が狂いそうになりながら毎日コピー&ペイストを繰り返していました。

VBAをはじめたばかりでよく分かりませんので
教えて頂けないでしょうか?

よろしくお願い致します。

【19488】Re:sheet1に貼り付けたデータの分解につ...
回答  ちゃっぴ  - 04/11/4(木) 23:35 -

引用なし
パスワード
   >こんなことが出来たら便利だとうなと思いながら
>気が狂いそうになりながら毎日コピー&ペイストを繰り返していました。

ご苦労さまです。こういうときこそのVBAです。
がんばってぜひ実現させてください。

ちなみに私がVBAを覚えたのも似たようなことがきっかけです。
とあるProgramの設計書を管理することになり、必要に迫られて・・・
30000ファイルの書式変更なんて手作業でやってられないですよね。

で方法ですが、手作業でもそれほどたいしたことないような印象を
受けますが・・・

とりあえず、下記の手順をマクロ記録してみてください。

1. 新しいシートを作成
2. 50行を選択し、新規シートに貼り付け

これができれば、あとはFor 〜 Nextステートメントで Step 50
でぶん回してやるだけです。

【19514】Re:sheet1に貼り付けたデータの分解につ...
お礼  やす  - 04/11/5(金) 22:56 -

引用なし
パスワード
   ちゃっぴ さん

大変有難うございました。

マクロ記録でやればよいのですね。
何から書けばよいのか分からず難しく考えていました。
現在、VBAを習いに行っているんですが、マクロ記録は一番最初に習いました。
恥ずかしい思いです。

ただ、For 〜 Nextステートメントで Step 50
でぶん回してやるの意味がよく分からなかったのですが、
これは
1. 新しいシートを作成
2. 50行を選択し、新規シートに貼り付け
を50回マクロ記録で行うということなのでしょうか?

かなり恥ずかしいことを質問しているのではないかと思えてきましたが
よろしくお願い致します。

▼ちゃっぴ さん:
>>こんなことが出来たら便利だとうなと思いながら
>>気が狂いそうになりながら毎日コピー&ペイストを繰り返していました。
>
>ご苦労さまです。こういうときこそのVBAです。
>がんばってぜひ実現させてください。
>
>ちなみに私がVBAを覚えたのも似たようなことがきっかけです。
>とあるProgramの設計書を管理することになり、必要に迫られて・・・
>30000ファイルの書式変更なんて手作業でやってられないですよね。
>
>で方法ですが、手作業でもそれほどたいしたことないような印象を
>受けますが・・・
>
>とりあえず、下記の手順をマクロ記録してみてください。
>
>1. 新しいシートを作成
>2. 50行を選択し、新規シートに貼り付け
>
>これができれば、あとはFor 〜 Nextステートメントで Step 50
>でぶん回してやるだけです。

【19515】Re:sheet1に貼り付けたデータの分解につ...
回答  ちゃっぴ  - 04/11/5(金) 23:35 -

引用なし
パスワード
   >ただ、For 〜 Nextステートメントで Step 50
>でぶん回してやるの意味がよく分からなかったのですが、
>これは
>1. 新しいシートを作成
>2. 50行を選択し、新規シートに貼り付け
>を50回マクロ記録で行うということなのでしょうか?

そういう時は、まずはヘルプを確認しましょう。
(これをやらない人はいつまでたっても進歩しません。)

なお、Step50でなくてもできますよ。
50行毎に別シートにコピーとのことなので、

シートが1枚変わるたびに、行は何行移動しますか?

これが、わかればあとは簡単にできると思います。
変数(ループカウンタ)を使用してループするだけなので・・・

【19534】Re:sheet1に貼り付けたデータの分解につ...
お礼  やす  - 04/11/7(日) 14:47 -

引用なし
パスワード
   ちゃっぴさん 

大変有難うございます。
VBAの本を買い考えてみました。
見て頂きたく思います。

シートが1枚変わるたびに行は30行移動します。
30行ずつ移動してシートに貼り付けしてコピーを繰り返したいのですが
繰り返す部分の式をどのように表現したらよいのでしょうか?
よろしくお願い致します。

Sub Macro2()
'
' Macro2 Macro
  Range("A1:A30").Select
  Selection.Copy
  Sheets("Sheet2").Select
  Range("A1").Select
  ActiveSheet.Paste
  Sheets("Sheet1").Select
  ActiveWindow.SmallScroll Down:=10
  Range("A31:A60").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("Sheet3").Select
  Range("A1").Select
  ActiveSheet.Paste
   
End Sub

Sub 繰り返し処理()
  Dim i As Integer
  For i = 1 To 25 Step 30
  
  
  Next i
End Sub

▼ちゃっぴ さん:
>>ただ、For 〜 Nextステートメントで Step 50
>>でぶん回してやるの意味がよく分からなかったのですが、
>>これは
>>1. 新しいシートを作成
>>2. 50行を選択し、新規シートに貼り付け
>>を50回マクロ記録で行うということなのでしょうか?
>
>そういう時は、まずはヘルプを確認しましょう。
>(これをやらない人はいつまでたっても進歩しません。)
>
>なお、Step50でなくてもできますよ。
>50行毎に別シートにコピーとのことなので、
>
>シートが1枚変わるたびに、行は何行移動しますか?


>これが、わかればあとは簡単にできると思います。
>変数(ループカウンタ)を使用してループするだけなので・・・

【19537】Re:sheet1に貼り付けたデータの分解につ...
回答  ちゃっぴ  - 04/11/7(日) 16:44 -

引用なし
パスワード
   記録はできたようですね。
ではこの記録された内容について考えてみましょう。

>  Range("A1:A30").Select
>  Selection.Copy

まず、上記の部分ですが、"A1:A30"をCopyしていますね。
ここの部分は「Sheet1」の"A1:A30"ですよね?

なのでこのように書き換えることができます。

WorkSheets("Sheet1").Range("A1:A30").Copy '・・・(1)

どこのシートの   どこの場所を   コピーする

という感じです。
ちなみに、この"Sheet1"はある特定のBookのシートですよね?
なのでBookを特定して

WorkBooks("あるBook")WorkSheets("Sheet1").Range("A1:A30").Copy '・・・(2)

と書くこともできます。
マクロ記録では、操作一回ごとに記録されますが、
このようにBookやSheetを特定して書くことができれば、
Select, Activateは必要なくなります。
Select, Activateを使用しないコーディングを心がけましょう。

>  Sheets("Sheet2").Select
>  Range("A1").Select
>  ActiveSheet.Paste

なお、ここで貼り付けを行ってますが、Copyをヘルプで引くと、
Destination〜というのがあると思いますので前の部分と合わせて

WorkSheets("Sheet1").Range("A1:A30").Copy _
  Destination:=WorkSheets("Sheet2").Range("A1") '・・・(3)

このように書くことができます。

>Sub 繰り返し処理()
>  Dim i As Integer
>  For i = 1 To 25 Step 30
>   
>  Next i
>End Sub

ここで初めて、ループ処理に入れることを考えますが、
(3)で示したものですと、ちょっと面倒になります。
なぜなら、Sheetやセルを指定している引数が文字列だからです。
For 〜 Nextでまわすループカウンタは数値ですよね?
なので、数値が使えるように書き換えてやります。

WorkSheets(1).Cells(1, 1).ReSize(30, 0).Copy _
  Destination:=WorkSheets(2).Cells(1, 1) '・・・(4)

この方法ですと、SheetはIndexを使って指定しています。
SheetのIndexは画面のSheetの並び順ですのでこの場合、
左から1番目のSheetのあるデータを左から2番目シートにコピーする
という意味になります。

同様にCells, ReSizeについてもお調べください。

また、次のSheetの場合、このようになりますよね?

WorkSheets(1).Cells(31, 1).ReSize(30, 0).Copy _
  Destination:=WorkSheets(3).Cells(1, 1) '・・・(5)

ここで変化している数値を方程式にしてみてください。
たとえばSheetが1つ右にずれるたびに行は何行動きますか?
Sheetの増分を「i」とすると、行の増分「j」はどのようにあらわせますか?

k = ??? i
  ~~~
   ↑ここに入るものを考えてください。

10857 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free