Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 11全般 : Microsoft 365)
右側に配置しているシートと一緒に、名前ごとに分けた個別ファイルを作成したいです
投稿日時: 23/02/08 20:30:24
投稿者: y_0770

大変お世話になっております。
 
以前、WinArrow様にVBAの修正をしていただきました。
その折は、本当に有難うございました。
 
やはり変更点が追加され、対応が必要となってしまいました…。
 
1)右側にシートが追加され(2番目のシート)そのシートごと、個別ファイルを作成することになりました…。
2)左側の元々のシート(1番目のシート)の”シート名”はA列の名前ではなく、元々のシート名のまま、個別ファイルを作成したいです(1番目のシートと2番目のシートと連動している数式が入っているためです)
 
以下は修正をしてくださいましたコードです(大変活用させていただき、今でも感謝しております…)
 
Option Explicit
Dim ws1 As Worksheet, ws2 As Worksheet
 
Sub MAIN()
Dim TName, TX As Long
 
    With ThisWorkbook
        Set ws1 = .Sheets(1)
        .Sheets.Add after:=ws1
        Set ws2 = ActiveSheet
    End With
         
    With ws1
        .UsedRange.Columns("A").Copy ws2.Range("A1")
    End With
    ws2.Columns("A").RemoveDuplicates Columns:=1, Header:=xlYes
'担当名を配列に格納
    TName = Application.Intersect(ws2.UsedRange, ws2.UsedRange.Offset(1)).Value
    Application.DisplayAlerts = False
    ws2.Delete
    Set ws2 = Nothing
    Application.ScreenUpdating = False
    For TX = LBound(TName) To UBound(TName)
        Call SheetSPLIT(TName:=TName(TX, 1))
    Next
     
End Sub
 
Private Sub SheetSPLIT(ByVal TName As String)
Dim Wb2 As Workbook
Dim ws2 As Worksheet, RX As Long
 
    'Sheet1を複写→新しいブック
    ws1.Copy
     
    Set Wb2 = ActiveWorkbook
    Set ws2 = Wb2.Sheets(1)
    With ws2
        .Name = TName
        If .AutoFilterMode Then .Range("A1").AutoFilter
        For RX = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
            If .Cells(RX, "A").Value <> TName Then
                .Rows(RX).Delete
            End If
        Next
        .Range("A1").AutoFilter field:=1
    End With
    Wb2.SaveAs Filename:=ThisWorkbook.Path & "\" & TName & ".xlsX"
    Wb2.Close
     
    Set Wb2 = Nothing
End Sub
 
お手数ですが、心よりご回答をお待ちしております…。
どうぞ宜しくお願い申し上げます…。
 
 

回答
投稿日時: 23/02/09 09:20:12
投稿者: simple

以前のスレッドというのが残っていたら、そのURLを示してください。
 
改めて、されたいことを箇条書きくらいにして示してもらいたいですね。
数式がはいっているそうですが、参照しているのはどちらがどちらをですか?
そのあたりも、回答者が想像するのではなく、きちんと説明してください。
 
>やはり変更点が追加され、対応が必要となってしまいました…。
とのことですが、作業依頼ということではなく、
ご自分がどのようにトライされ、どこに詰まっているのか説明してもらえますか?

回答
投稿日時: 23/02/09 11:59:42
投稿者: Suzu

左から 1番目と2番目 のシートを 新たなワークブックにコピーするのは
 

引用:
Sub Sampla()
  Dim wbk As Workbook
 
  Set wbk = ThisWorkbook
  With wbk
    .Worksheets(Array(.Worksheets(1).Name, .Worksheets(2).Name)).Copy
  End With
End Sub

 
で良いです。
 
普通にコピーすれば、シート名は、元のシート名を継承します。
それを、コード内で、名前を変更しているのですから、その部分を処理しない様にすれば良いでしょう。

回答
投稿日時: 23/02/09 22:19:51
投稿者: WinArrow

ヒント
 
シートの見出しで
[Cr;]キーを押しながら
Sheet1とSheet2をクリックすると、「シートのグループ」になります。
その状態でシートの複写を実行すると
2つのシートを新しいブックに複写することができます。
 
この操作を「マクロの記録」でコードを作成すれば、
 
現在のコードのどこを修正すれば分かると思います。
 
コードの作成依頼のような内容は、いただけません。
注意してください。
 
 

トピックに返信