外出自粛中でも楽しく過ごす!QAまとめ>>

EXCELVBAであるシートに作業をさせるVBAを作成しました。
同じ作業を複数のシートに
実行させるにはどうしたらいいのでしょうか。
宜しくお願い致します。

**************作成したVBA**********

Sheets("sheet1").Select
ActiveWindow.SmallScroll Down:=66
Range("D2:D101").Select
Selection.Cut
  …50行ほどあります…

***********************************


sheet1とsheet2に同じ作業をさせたい
以下のやりかただと長くなるためまとめたい
  
**************作成したVBA**********

Sheets("sheet1").Select
ActiveWindow.SmallScroll Down:=66
Range("D2:D101").Select
Selection.Cut
  …50行ほどあります…

Sheets("sheet2").Select
ActiveWindow.SmallScroll Down:=66
Range("D2:D101").Select
Selection.Cut
  …50行ほどあります…

Sheets("sheet3").Select
ActiveWindow.SmallScroll Down:=66
Range("D2:D101").Select
Selection.Cut
  …50行ほどあります…

***********************************

このQ&Aに関連する最新のQ&A

A 回答 (1件)

全く同じ処理なら、シートのグループ化という方法もあります。




Sheets(Array("Sheet1", "Sheet3")).Select
処理
 :

http://officetanaka.net/excel/vba/tips/tips32.htm
    • good
    • 2
この回答へのお礼

回答ありがとうございました。
早速修正したらできました。
ありがとうございました。

お礼日時:2007/09/19 16:25

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAであるマクロを全てのシートに対して流したい

お世話になります。

現在シート単位に実行するマクロ1があります。

これを、全てのシートに対して、マクロ1を実行したいのですが、どのようにすればよいでしょうか?
※現在は、シートが終わる毎に手動でマクロ1を実行して、それが終われば次のシートへという形です。

大変お手数ですが、何卒よろしくお願いします。

Aベストアンサー

全てのシートに同じマクロ、ということは
そのマクロはアクティブシートに対して処理してるはずですから
該当シートをアクティブにしながら実行されなければいけないので
以下のようになります。

'-------------------------------------------
Sub Test()
Application.ScreenUpdating = False
 Dim Sht As Worksheet
   For Each Sht In Worksheets
     Sht.Select
     Call マクロ1
   Next Sht
Application.ScreenUpdating = True
End Sub
'--------------------------------------

全てのシートをアクティブにしながら実行しますので画面がちらつきます。
それを抑えるのが、ScreenUpdatingメソッドです。

違いを見る為に最初は、それを抜いて実行してみてください。

 

全てのシートに同じマクロ、ということは
そのマクロはアクティブシートに対して処理してるはずですから
該当シートをアクティブにしながら実行されなければいけないので
以下のようになります。

'-------------------------------------------
Sub Test()
Application.ScreenUpdating = False
 Dim Sht As Worksheet
   For Each Sht In Worksheets
     Sht.Select
     Call マクロ1
   Next Sht
Application.ScreenUpdating = True
End Sub
'------------------------------...続きを読む

QExcelVBAを複数シートで実行する方法

Excelで以下のマクロを教えて下さい
・Aというマクロ処理を特定(複数)のシートのみ実行する
・Aというマクロ処理を全てのシートで実行する

Aマクロは作成済みなのですが、複数シートでマクロを実行する方法がわかりません


宜しくお願い致します

Aベストアンサー

No1です。

> 試してみたのですがアクティブなシートしか変更が反映されませんでした。

どのようなマクロか存じませんが、そのために
st.Activate '(アクティブにする必要があるなら)
としたのですがこの部分は使用されなかったのでしょうか?

> マクロをインポートして実行するだけではないのでしょうか?

意味不明です。
マクロAはどこに記述されているのですか?
どのようなコードなのですか?

Q作ったマクロを複数のシートで実行できるようにしたい。

excelで以下のマクロを作りました。

Sub Macro1()
  Dim 文字 As Range
  For Each 文字 In Range("e6:ai21")
   Select Case 文字.Text
    Case "|"
     文字.Font.Name = "MS Pゴシック"
     文字.Font.Size = 35
    Case Else
     文字.Font.Name = "MS明朝"
     文字.Font.Size = 11
   End Select
   Next 文字
  End Sub

1つのシートのセル範囲(e6:ai21)に対するマクロです。

このマクロを、シートが10個(sheet1~sheet10)ありその内の8個(sheet3~sheet10に1度にできるようにするにはどうすればいいのですか。

教えてください。よろしくお願いします。

Aベストアンサー

ちょっとスマートになりました。シートがいくつあっても対応できます。
Sub Macro1()
 Dim 文字 As Range
 Dim i As Integer

  For i = 1 To Sheets.Count
    With Sheets(i)
     For Each 文字 In Range("e6:a121")
      Select Case 文字.Text
       Case "|"
        文字.Font.Name = "MS Pゴシック"
        文字.Font.Size = 35
       Case Else
        文字.Font.Name = "MS明朝"
        文字.Font.Size = 11
       End Select
      Next 文字
    End With
  Next i
End Sub

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qフォルダ内の全てのBookに同じ処理を繰り返す

フォルダ内にエクセルファイルが約3,000個あります。
この全てのBookに同じ処理をしたいのですが、マクロで繰り返す方法がわからないので教えて下さい。
処理をする内容は簡単なもので、マクロで作りました。

・ 各Bookには1つのシートしか存在せず、シート名は重要ではないので全て「Sheet1」になっています。
・ 各Bookのデータの配置や表形式は同じです。
・ レコードの行数がBookによって異なります。

処理の内容をマクロで作るところまではできましたが、知識がないためタイムアウトです。

ご教示宜しくお願い致します。

Aベストアンサー

だいたいこんな流れで。

sub macro1()
 dim myPath as string
 dim myFile as string

 mypath = "C:\test\"

’指定フォルダのブックを順繰り拾う
 myfile = dir(mypath & "*.xls*")
 do until myfile = ""

 ’ブックを開いて処理を行い保存して閉じる
  workbooks.open mypath & myfile
  activesheet.range("A1") = "DONE"
  activeworkbook.close true

  myfile = dir()
 loop
end sub


必要に応じて
・画面の表示を抑制する
・再計算を手動にする
といった手管を追加して高速化を図ります。

QExcel VBAで複数シートをコピーする

Excel VBAで複数のシートを新たらしいブックにコピーする方法が分かりません。

一応、Selectで全てのシートを選択し
コピーする方法は分かるのですが
出来ればSelectなどの画面遷移をプログラム内に含ませたくありません

シートは n件存在します。
ご存知の方がおられましたら
ぜひ、教えて頂けないでしょうか?

Aベストアンサー

すいません、勉強不足でした。
ただ単純に「全てのシートを選択」し「新規ファイルにコピー」という動作であれば、
sheets.Select
sheets.Copy
だけでできました。

Qエクセル VBA シート毎に同じ動作をしたい・・・

エクセルVBAでシート毎に同じ動作をしたいのです。

例えば
A・B・C・D・E
とシートがあるのですが、A以外のものを全部印刷したいのです。

今までは
Worksheets("B").Select
Range("A1:AG44").Select
Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True

Worksheets("C").Select
Range("A1:AG44").Select
Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
と これを繰り返していたのです。
これをやると文章も長くなりますし、シート名が変わったときには、VBAもすべて書き直しと言う状況になってしまいます。
何か打開策はありますでしょうか?
よろしくお願いいたします。

Aベストアンサー

Sub Print_Test()
For Each sh In Worksheets '全ワークシートに繰り返す
If sh.Name <> "A" Then 'シート名がAでなければ
sh.Range("A1:AG44").PrintOut From:=1, To:=1, Copies:=1, Collate:=True
End If
Next '次のシートに
End Sub

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Q[初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。

VBAで指定列からAを検索し、発見したら隣のセルに0を入れるマクロを組みたいのですが、組み方がVBA初心者の為わかりません。
(例)
L列に、A、B、C、D、E、Fとランダムに文字が入っていて、
文字Aを検索し、発見したら隣のI列に値0を入れるというマクロです。

Sub Search()
Dim A As String
Set A = Worksheets("Sheet1").Cells.Find("A")
If A Is Nothing Then
ActiveCell.Offset(0, 1).Value = 0

End If
End Sub
と過去の質問で考えてみたのですが、Aがあった時、、、、
とコードが書けないです。
大変困っているので、ご教授頂けないでしょうか?
出来れば、そのままマクロに出来るコードを教えて頂けないでしょうか?
宜しくお願い致します。

Aベストアンサー

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表格が、この「Find」 です。

>Set A = Worksheets("Sheet1").Cells.Find("A")

>過去の質問で考えてみたのです

どうも、Find メソッドは、あるレベル以下の人は、省略する傾向があるようです。何が大事で、何が大事でないかというのは、やってみなければ分かりませんが、検索語だけを入れる書き方は、実務では、あまりしないほうがよいと思います。

だいたい、以下のTestFind2 ぐらいまでに、省略は、とどめたほうがよいです。

それは、Find は、必ずしも自分が思っているデフォルトとは違うことがあるので、「明示的(意図的に)」にオプションは入れたほうがよいです。
例えば、大文字小文字の違いを付けるなら、MatchCase:=True, 数式まで探すなら、LookIn:=xlFormulas

なお、Find メソッドは、5年経っても、たぶん完全に覚えられません。面倒なコードのひとつです。ですが、これはパターンが決まっているので、ひとつパターンが決まったら、それに当てはめればよいだけです。

#3さんで示されているMougのサンプルコードと似てはいるのですが、Mougのサンプルコードでは、Verionによって、失敗することがあります。

'--------------------------------------
'記録マクロをそのまま使う方法
Sub TestFind1()
Dim c As Range
 Set c = Columns("L:L").Find(What:="A", _
           After:=ActiveCell, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           SearchOrder:=xlByRows, _
           SearchDirection:=xlNext, _
           MatchCase:=False, _
           MatchByte:=False, _
           SearchFormat:=False)
 c.Offset(0, 1).Value = 0
End Sub
'--------------------------------------
'TestFind1 をアレンジしてみる
Sub TestFind2()
Dim c As Range
'検索語
Const MYTXT As String = "A"
 Set c = ActiveSheet.Columns("L:L").Find(What:=MYTXT, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           MatchCase:=False)
 If Not c Is Nothing Then
    c.Offset(0, 1).Value = 0
 End If
End Sub

'---------------------------------------
'複数ある場合(パターンを使った方法)
'---------------------------------------
Sub TestFind3()
  Dim c As Range
  Dim FirstAdd As String
  Const MYTXT As String = "A"
  Set c = ActiveSheet.Columns("L:L").Find( _
    What:=MYTXT, _
    LookIn:=xlValues, _
    LookAt:=xlPart, _
    MatchCase:=False)
  
  If Not c Is Nothing Then
    FirstAdd = c.Address
    Do
      c.Offset(, 1).Value = 0
      Set c = ActiveSheet.Columns("L:L").FindNext(c)
      If c.Address = FirstAdd Then Exit Sub
    Loop Until c Is Nothing
  End If
End Sub

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング