Excel VBA質問箱 IV

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

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


8128 / 13645 ツリー ←次へ | 前へ→

【35021】開いているBook上全てのSheetを選択するには miku02 06/2/19(日) 11:16 質問[未読]
【35022】Re:開いているBook上全てのSheet... Blue 06/2/19(日) 11:35 回答[未読]
【35023】Re:開いているBook上全てのShee... ponpon 06/2/19(日) 11:40 発言[未読]
【35024】ponponさん、いつもありがとうございます! miku02 06/2/19(日) 13:12 質問[未読]
【35027】Re:開いているBook上全てのSheet... かみちゃん 06/2/19(日) 15:23 発言[未読]
【35032】かみちゃん、いつもありがとうございます! miku02 06/2/19(日) 17:20 質問[未読]
【35033】Re:開いているBook上全てのSheet... かみちゃん 06/2/19(日) 17:42 発言[未読]
【35035】よかったですw miku02 06/2/19(日) 17:53 お礼[未読]

【35021】開いているBook上全てのSheetを...
質問  miku02  - 06/2/19(日) 11:16 -

引用なし
パスワード
   開いているBook上全てのSheetを選択するにはどの様に記述すればよいのでしょうか?

作業をしているBook上のSheet全てに、マクロで指定した作業を一括してさせたいのですが、全てのSheetを選択する方法が分かりませんでした。。。。。


よろしくお願いします!

【35022】Re:開いているBook上全てのShee...
回答  Blue  - 06/2/19(日) 11:35 -

引用なし
パスワード
   ▼miku02 さん:
>作業をしているBook上のSheet全てに、マクロで指定した作業を一括してさせたい
>のですが、全てのSheetを選択する方法が分かりませんでした。。。。。
普通は、For Each で処理するようにします。

全てのシートのA1に"あ"を入れる例)

Dim ws As Worksheet
  
For Each ws In Worksheets
  ws.Range("A1").Value = "あ"
Next

【35023】Re:開いているBook上全てのShee...
発言  ponpon  - 06/2/19(日) 11:40 -

引用なし
パスワード
   こんにちは。

>全てのSheetを選択する方法が分かりませんでした

Worksheets.Selectで選択は、できますが、
Activeなシートは一つだけなので、

>作業を一括してさせたいのですが

の場合は、
以下のように、For Nextで回して処理します。

Sub test()
  Dim sh As Worksheet
  
  For Each sh In Worksheets
   With sh
     .Range("A1").Value = "A"
   End With
  Next
End Sub

【35024】ponponさん、いつもありがとうございます...
質問  miku02  - 06/2/19(日) 13:12 -

引用なし
パスワード
   色々試しているのですが、作成したマクロを実行させたいので、

Application.Run "PERSONAL.XLS!四本値並べ替え"

と挿入したいのですが、エラーがでてしまいます。。。。。

どう組み込めば良いのでしょうか?


挿入したい四本値並べ替えのマクロの内容は下記の通りです

Sub 四本値並べ替え()
  ActiveCell.Offset(0, 2).Columns("A:A").EntireColumn.Select
  Selection.Insert Shift:=xlToRight
  ActiveCell.Offset(0, 5).Columns("A:A").EntireColumn.Select
  Selection.Cut Destination:=ActiveCell.Offset(0, -5).Columns("A:A"). _
    EntireColumn
  ActiveCell.Offset(0, -7).Range("A1").Select
End Sub


初心者なもので上手く説明できていなかったらすみません。。。。。

【35027】Re:開いているBook上全てのShee...
発言  かみちゃん  - 06/2/19(日) 15:23 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Sub 四本値並べ替え()

まず、このマクロ、何をしているのかわかりません。
コードを見る限り、
アクティブセルから、2列右隣に1列挿入して、
その列から5列右隣の列をその列に貼り付ける
ということでしょうか?
それをマクロの記録で記録して、整理すると、以下のようなコードだけでできると
思うのですが?

Sub Macro1()
 With ActiveCell
  .Offset(, 2).EntireColumn.Insert Shift:=xlToRight
  .Offset(, 2 + 5).Cut .Offset(, 2)
 End With
End Sub

それで、このマクロを題名のとおりのことをしたいならば、

Sub Macro2()
 Dim wb As Workbook
 Dim ws As Worksheet
 
 For Each wb In Workbooks
  wb.Activate
  For Each ws In Worksheets
   ws.Activate
   MsgBox wb.Name & " の " & ws.Name & "がアクティブです"
  Next
 Next
End Sub

とすればよく、
上記 Macro2 の MsgBox部分の次に
Call Macro1
とすれば、ご希望のことはできるかと思います。
なお、それぞれのシートのアクティブセルが基準になりますので、動作が不安定
になることも想定されるので、気をつけてください。
Call Macro1
の前に
Range("A1").Select
とかしてアクティブセルを指定しておけばいいかもしれません。

【35032】かみちゃん、いつもありがとうございます...
質問  miku02  - 06/2/19(日) 17:20 -

引用なし
パスワード
   元のマクロは、C列をアクティブにして、右クリックで列を挿入、空いたその列にH列を移動させたのですが、下記の様なマクロになってしまいます。。。。。

何か手順を間違えているのでしょうか?

相対参照にして記録しています。


Sub Macro1()
  ActiveCell.Offset(0, 2).Columns("A:A").EntireColumn.Select
  Selection.Insert Shift:=xlToRight
  ActiveCell.Offset(0, 5).Columns("A:A").EntireColumn.Select
  Selection.Cut Destination:=ActiveCell.Offset(0, -5).Columns("A:A"). _
    EntireColumn
  ActiveCell.Offset(0, -7).Range("A1").Select
End Sub


元データは下記の通りです。行の最後の数値の列を時刻の後ろに移動させて並べ替えたかったのです。

2006/2/15    9:00    3030    3030    3020    3030    26600
2006/2/15    9:01    0    0    0    0    0
2006/2/15    9:02    0    0    0    0    0
2006/2/15    9:03    3030    3030    3020    3030    5400
2006/2/15    9:04    3020    3020    3020    3020    100
2006/2/15    9:05    0    0    0    0    0
2006/2/15    9:06    3020    3020    3020    3020    5400
2006/2/15    9:07    3020    3020    3010    3020    4800
2006/2/15    9:08    3020    3020    3010    3020    1100
2006/2/15    9:09    3020    3020    3020    3020    3700
2006/2/15    9:10    3020    3020    3020    3020    300
2006/2/15    9:11    3020    3020    3020    3020    3700
2006/2/15    9:12    3020    3020    3020    3020    500
2006/2/15    9:13    3020    3020    3020    3020    2100


とりあえず色々いじってみて、下記の様にしたら、目的の動作は果たす事ができました。

Sub Macro2()
 Dim ws As Worksheet
 
 For Each ws In Worksheets
   ws.Activate
   Range("A1").Select
   Call Macro1
 Next
End Sub


Call を使ってマクロを呼び出せばいいんですね。

勉強になります!


手探り状態なので、本当にこれで合ってるのか分からないので、おかしなミスをおかしていたら指摘してください。

今後ともよろしくおねがいします。

【35033】Re:開いているBook上全てのShee...
発言  かみちゃん  - 06/2/19(日) 17:42 -

引用なし
パスワード
   >元のマクロは、C列をアクティブにして、右クリックで列を挿入、空いたその列にH列を移動させたのですが、下記の様なマクロになってしまいます。
>何か手順を間違えているのでしょうか?

全然、大丈夫です。
ただ、ご提示のコードがややこしく感じたので、私なりに簡単なほうをご紹介させていただいた次第です。
また、サンプルを拝見して、感じたのですが、
H列を「切り取り」をして、
C列に「切り取ったセルを挿入」という操作でもできると思います。
それであれば、マクロの記録をして、整理すると
Sub Macro2()
 Columns("H:H").Cut
 Columns("C:C").Insert Shift:=xlToRight
End Sub
というコードだけでもできると思ったのです。
これですと、アクティブセルがどこにあろうと気にしなくていいと思います。

>手探り状態なので、本当にこれで合ってるのか分からないので、おかしなミスをおかしていたら指摘してください。

コードはおかしくないと思います。
うまく動いて、後で何をしているかわかるのであれば、それでいいのではないでしょうか?

【35035】よかったですw
お礼  miku02  - 06/2/19(日) 17:53 -

引用なし
パスワード
   いつも丁寧にありがとうございます。

本当に助かります。

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