Excel VBA質問箱 IV

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

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


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

【62156】マクロのシート名を変更する方法ってありますか? じゅんこ 09/6/25(木) 13:21 質問[未読]
【62159】Re:マクロのシート名を変更する方法ってあ... Hirofumi 09/6/25(木) 15:01 発言[未読]
【62161】Re:マクロのシート名を変更する方法ってあ... じゅんこ 09/6/25(木) 16:00 発言[未読]
【62165】Re:マクロのシート名を変更する方法ってあ... Hirofumi 09/6/25(木) 18:59 回答[未読]
【62166】Re:マクロのシート名を変更する方法ってあ... じゅんこ 09/6/25(木) 19:36 お礼[未読]
【62167】Re:マクロのシート名を変更する方法ってあ... Hirofumi 09/6/25(木) 19:51 回答[未読]
【62168】Re:マクロのシート名を変更する方法ってあ... Hirofumi 09/6/25(木) 23:22 回答[未読]
【62160】Re:マクロのシート名を変更する方法ってあ... イブX 09/6/25(木) 15:10 発言[未読]
【62162】Re:マクロのシート名を変更する方法ってあ... じゅんこ 09/6/25(木) 16:16 発言[未読]

【62156】マクロのシート名を変更する方法ってあり...
質問  じゅんこ  - 09/6/25(木) 13:21 -

引用なし
パスワード
   いつもお世話になっています。

マクロを作っていて、同じ作業を複数のシートで行うんですが
Sheet1のデータをSheetA〜SheetGまで一旦データの種類ごとに分けて
再びSheet1に戻す作業を一つのブックで10シートほどしないといけないんですが
マクロの中のシート名を変更するマクロは可能でしょうか?

どのようなアプローチでしていいのか全くわからず
この質問方法では丸投げになってしまうのですが
どうしてもわからないので、考え方だけでも教えていただきたいのです
どなたかよろしくお願いします。

【62159】Re:マクロのシート名を変更する方法って...
発言  Hirofumi  - 09/6/25(木) 15:01 -

引用なし
パスワード
   ▼じゅんこ さん:
>いつもお世話になっています。
>
>マクロを作っていて、同じ作業を複数のシートで行うんですが
>Sheet1のデータをSheetA〜SheetGまで一旦データの種類ごとに分けて
>再びSheet1に戻す作業を一つのブックで10シートほどしないといけないんですが
>マクロの中のシート名を変更するマクロは可能でしょうか?
>
>どのようなアプローチでしていいのか全くわからず
>この質問方法では丸投げになってしまうのですが
>どうしてもわからないので、考え方だけでも教えていただきたいのです
>どなたかよろしくお願いします。

コードの全面書き換えも含めて、可能だと思いますが?
実際のコードを見なければ、何処をどう直さなければならないかを論ずる事は出来ないと思いますので、コードをUpして見たらどうでしょうか?

【62160】Re:マクロのシート名を変更する方法って...
発言  イブX  - 09/6/25(木) 15:10 -

引用なし
パスワード
   これぐらいでどうでしょうか?

Dim ShNm as variant,RgSt as variant
ShNm = Array("SheetA", "SheetB", "SheetC", "SheetD", "SheetE", "SheetF")
RgRg = Array("A1:d5", "A6:D10", "A11:D15", "A16:D20", "A21:D25", "A26:D30")
i=0
For Each Sht In ShNm
  Sheets("Sheet1").Range(RgRg(i)).Value = Sheets(Sht).Range(RgRg(i)).Value
  i = i + 1
Next

【62161】Re:マクロのシート名を変更する方法って...
発言  じゅんこ  - 09/6/25(木) 16:00 -

引用なし
パスワード
   ▼Hirofumi さん:
長すぎて途中でカットしています。
この場合は分割しても最後まで載せたほうがいいですか?
ただ、このプログラムの"Sheet1"を全て他のシート名に変更したいのです。
よろしくお願いします。
Sub 間取わけ()
  Selection.AutoFilter
  Selection.AutoFilter Field:=9, Criteria1:="ワンルーム"
  Cells.Select
  Selection.Copy
  Sheets("ワンルーム").Select
  Cells.Select
  ActiveSheet.Paste
  Sheets("Sheet1").Select
  Selection.AutoFilter Field:=9
  Selection.AutoFilter Field:=8, Criteria1:="1"
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("1部屋").Select
  Cells.Select
  ActiveSheet.Paste
  Sheets("Sheet1").Select
  Selection.AutoFilter Field:=8, Criteria1:="2"
  Application.CutCopyMode = False
  Selection.Copy
  ActiveWindow.ScrollWorkbookTabs Position:=xlLast
  Sheets("2部屋").Select
  Cells.Select
  ActiveSheet.Paste
  Sheets("Sheet1").Select
  Selection.AutoFilter Field:=8, Criteria1:="3"
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("3部屋").Select
  Cells.Select
  ActiveSheet.Paste
  Sheets("Sheet1").Select
  Selection.CurrentRegion.Select
  Application.CutCopyMode = False
  Selection.EntireRow.Delete
  Rows("1:1").Select
  Selection.Insert Shift:=xlDown
  Selection.AutoFilter
  Sheets("Sheet1").Select
  Selection.AutoFilter Field:=8, Criteria1:="2"
  Cells.Select
  Selection.CurrentRegion.Select
  Selection.EntireRow.Delete
  Rows("1:1").Select
  Selection.Insert Shift:=xlDown
  Selection.AutoFilter
  Selection.AutoFilter Field:=9, Criteria1:="ワンルーム"
  Cells.Select
  Selection.CurrentRegion.Select
  Selection.EntireRow.Delete
  Rows("1:1").Select
  Selection.Insert Shift:=xlDown
  Selection.AutoFilter
  Selection.AutoFilter Field:=8, Criteria1:="1"
  Cells.Select
  Selection.CurrentRegion.Select
  Selection.EntireRow.Delete
  Cells.Select
  Selection.Copy
  Sheets("4部屋").Select
  Cells.Select
  ActiveSheet.Paste
  Sheets("Sheet1").Select
  Application.CutCopyMode = False
  Selection.Delete Shift:=xlUp
  Sheets("4部屋").Select
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollColumn = 4
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 6
  ActiveWindow.ScrollColumn = 7
  ActiveWindow.ScrollColumn = 8
  ActiveWindow.ScrollColumn = 9
  ActiveWindow.ScrollColumn = 10
  ActiveWindow.ScrollColumn = 11
  ActiveWindow.ScrollColumn = 12
  ActiveWindow.ScrollColumn = 13
  ActiveWindow.ScrollColumn = 14
  Cells.Select
  Range("N1").Activate
  Selection.Sort Key1:=Range("V1"), Order1:=xlDescending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal
  Sheets("3部屋").Select
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollColumn = 4
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 6
  ActiveWindow.ScrollColumn = 7
  ActiveWindow.ScrollColumn = 8
  ActiveWindow.ScrollColumn = 9
  ActiveWindow.ScrollColumn = 10
  ActiveWindow.ScrollColumn = 11
  ActiveWindow.ScrollColumn = 12
  ActiveWindow.ScrollColumn = 13
  Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal
  Sheets("2部屋").Select
  Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal
  Sheets("1部屋").Select
  Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal
  Sheets("1部屋").Select
  Rows("1:1").Select
  Selection.AutoFilter
  Selection.AutoFilter Field:=9, Criteria1:="1LDK"
  Cells.Select
  Selection.Copy
  Sheets("1LDK").Select
  Cells.Select
  ActiveSheet.Paste
  Sheets("1部屋").Select
  Selection.CurrentRegion.Select
  Application.CutCopyMode = False
  Selection.EntireRow.Delete
  Cells.Select
  Selection.Sort Key1:=Range("V1"), Order1:=xlDescending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal
  Sheets("1LDK").Select
  Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal
  Sheets("ワンルーム").Select
  Selection.Sort Key1:=Range("V2"), Order1:=xlDescending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal
  Rows("1:1").Select
  Selection.Copy

【62162】Re:マクロのシート名を変更する方法って...
発言  じゅんこ  - 09/6/25(木) 16:16 -

引用なし
パスワード
   ▼イブX さん:
コピペしてみたんですが、動かなかったので
今から少し勉強して変更してみます。
ありがとうございます。

【62165】Re:マクロのシート名を変更する方法って...
回答  Hirofumi  - 09/6/25(木) 18:59 -

引用なし
パスワード
   「間取わけ」の元"Sheet1"と成っていた所を引数として外に出し
実行する場合、以下の様に別のプロシージャ(例、「Sub Main_1」、「Sub Main_2」)から
引数とし変更したいシート名を与えて呼び出します

尚、元のコードが自動記録そのままの様なコードなので
多分こうなるのではないかと言う推測で直して居ますので
実際に同じ様に動くのかは、確信の無い所です

Option Explicit

Public Sub Main_1()

  '「間取わけ」プロシージャにシート名を引数として与え
  '呼び出す
  間取わけ "Sheet1"
  
End Sub

Public Sub Main_2()

  '「間取わけ」プロシージャにシート名を引数として与え
  '呼び出す
  間取わけ "Sheet2"
  
End Sub

Private Sub 間取わけ(strSheetname As String)

  With Sheets(strSheetname).Range("A1")
    .AutoFilter Field:=9, Criteria1:="ワンルーム"
    .CurrentRegion.Copy Destination:=Sheets("ワンルーム").Range("A1")
    Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)).EntireRow.Delete
'    .AutoFilter
    '
    .AutoFilter Field:=8, Criteria1:="1"
    .CurrentRegion.Copy Destination:=Sheets("1部屋").Range("A1")
    Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)).EntireRow.Delete
'    .AutoFilter
    '
    .AutoFilter Field:=8, Criteria1:="2"
    .CurrentRegion.Copy Destination:=Sheets("2部屋").Range("A1")
     Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)).EntireRow.Delete
'    .AutoFilter
    '
    .AutoFilter Field:=8, Criteria1:="3"
    .CurrentRegion.Copy Destination:=Sheets("3部屋").Range("A1")
    Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)).EntireRow.Delete
    .AutoFilter
    '
    .CurrentRegion.Copy Destination:=Sheets("4部屋").Range("A1")
    .CurrentRegion.EntireRow.Delete
  End With
  
  With Sheets("4部屋")
    .Cells.Sort _
        Key1:=.Range("V1"), Order1:=xlDescending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _
        DataOption1:=xlSortNormal
  End With
  
  With Sheets("3部屋")
    .Range("A1").CurrentRegion.Sort _
        Key1:=.Range("A2"), Order1:=xlDescending, _
        Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _
        DataOption1:=xlSortNormal
  End With
  
  With Sheets("2部屋")
    .Range("A1").CurrentRegion.Sort _
        Key1:=.Range("A2"), Order1:=xlDescending, _
        Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _
        DataOption1:=xlSortNormal
  End With
  
  With Sheets("1部屋")
    .Range("A1").CurrentRegion.Sort _
        Key1:=.Range("A2"), Order1:=xlDescending, _
        Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _
        DataOption1:=xlSortNormal
  End With
  
  With Sheets("1部屋")
    With .Range("A1")
      .AutoFilter Field:=9, Criteria1:="1LDK"
      .CurrentRegion.Copy Destination:=Sheets("1LDK").Range("A1")
      Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)).EntireRow.Delete
      .AutoFilter
    End With
    .Cells.Sort _
        Key1:=.Range("V1"), Order1:=xlDescending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _
        DataOption1:=xlSortNormal
  End With

  With Sheets("1LDK")
    .Range("A1").CurrentRegion.Sort _
        Key1:=.Range("A2"), Order1:=xlDescending, _
        Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _
        DataOption1:=xlSortNormal
  End With
  
  With Sheets("ワンルーム")
    With .Range("A1").CurrentRegion
      .Sort _
          Key1:=.Range("V2"), Order1:=xlDescending, _
          Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
          Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _
          DataOption1:=xlSortNormal
    
      .Copy Destination:=Sheets("????").Range("A1")
    End With
  End With

End Sub

【62166】Re:マクロのシート名を変更する方法って...
お礼  じゅんこ  - 09/6/25(木) 19:36 -

引用なし
パスワード
   ありがとうございます。
まだ試していませんが、明日頑張ってみようと思います。
また、結果を報告しますね。

【62167】Re:マクロのシート名を変更する方法って...
回答  Hirofumi  - 09/6/25(木) 19:51 -

引用なし
パスワード
   ごめん、

    Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)).EntireRow.Delete

は、
    Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)) _
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete

の間違い

因って以下の様に修正して下さい

  With Sheets(strSheetname).Range("A1")
    .AutoFilter Field:=9, Criteria1:="ワンルーム"
    .CurrentRegion.Copy Destination:=Sheets("ワンルーム").Range("A1")
    Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)) _
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    .AutoFilter
    '
    .AutoFilter Field:=8, Criteria1:="1"
    .CurrentRegion.Copy Destination:=Sheets("1部屋").Range("A1")
    Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)) _
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    .AutoFilter
    '
    .AutoFilter Field:=8, Criteria1:="2"
    .CurrentRegion.Copy Destination:=Sheets("2部屋").Range("A1")
     Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)) _
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    .AutoFilter
    '
    .AutoFilter Field:=8, Criteria1:="3"
    .CurrentRegion.Copy Destination:=Sheets("3部屋").Range("A1")
    Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)) _
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    .AutoFilter
    '
    .CurrentRegion.Copy Destination:=Sheets("4部屋").Range("A1")
    .CurrentRegion.EntireRow.Delete
  End With

【62168】Re:マクロのシート名を変更する方法って...
回答  Hirofumi  - 09/6/25(木) 23:22 -

引用なし
パスワード
   もう一か所、以下も直して下さい

  With Sheets("1部屋")
    With .Range("A1")
      .AutoFilter Field:=9, Criteria1:="1LDK"
      .CurrentRegion.Copy Destination:=Sheets("1LDK").Range("A1")
      '◆修正行↓
      Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)).EntireRow.Delete
      .AutoFilter
    End With
    .Cells.Sort _
        Key1:=.Range("V1"), Order1:=xlDescending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _
        DataOption1:=xlSortNormal
  End With



  With Sheets("1部屋")
    With .Range("A1")
      .AutoFilter Field:=9, Criteria1:="1LDK"
      .CurrentRegion.Copy Destination:=Sheets("1LDK").Range("A1")
      '★修正後↓
      Application.Intersect(.CurrentRegion, .CurrentRegion.Offset(1)) _
          .SpecialCells(xlCellTypeVisible).EntireRow.Delete
      .AutoFilter
    End With
    .Cells.Sort _
        Key1:=.Range("V1"), Order1:=xlDescending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _
        DataOption1:=xlSortNormal
  End With

に直して下さい

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