
大変お世話になっております。
以下のVBAですと、シート名がA列に入力されている文字と同様になってしまいます。
分割する元ファイルのシート名をそのまま残し、A列に入力されている文字にてファイルの名前を付け分割をしたいです。お手数ですが、修正をお願い申し上げます。
ご回答をお待ちしております。
どうぞ宜しくお願い申し上げます。
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
No.3ベストアンサー
- 回答日時:
>Sheet1を複写→新しいブック
>ws1.Copy → こちらで止まってしまいました…。
>何かご助言をいただけるととても有難い限りです…。
ws1.Copyを
ThisWorkbook.Worksheets(1).Copy
に変えます。
.Name = TName
を
'.Name = TName
に変えます。
上記の2か所が、修正する箇所です。
全文を提示すると、以下のようになります。
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を複写→新しいブック
ThisWorkbook.Worksheets(1).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
tatsumaru77 様!
お忙しい中、ご回答をしていただきまして本当に有難うございました!
ご提示くださいましたコードを、今使わせていただきました…!
あっという間にファイルが分割され、シート名も希望通り元のファイルと同様です!
20分程かかっていた作業時間が、お陰様で1分もかかりません…!
tatsumaru77 様、心より感謝申し上げます…!
また質問をさせていただくかと思います…。
その際にもどうか宜しくお願い申し上げます…!
この度は本当に有難うございました!
大変恐縮ですが、次回以降も是非宜しくお願い申し上げます…!
No.2
- 回答日時:
そもそも、提示されたマクロをこちらで実行すると、エラーになります。
'Sheet1を複写→新しいブック
ws1.Copy・・・①
①の箇所でエラーになり、止まります。
あなたの環境では、提示されたマクロが、最後まで止まらずに実行されてますでしょうか。
もし、そうであれば、No1の方、言われたのは、
'Sheet1を複写→新しいブック
ws1.Copy
Set Wb2 = ActiveWorkbook
Set ws2 = Wb2.Sheets(1)
With ws2
.Name = TName・・・・②
の箇所の②をコメントアウトして下さいと言うことです。
つまり、
'.Name = TName
のようになります。
一応、全文を掲載すると以下のようになります。
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
tatsumaru77 様
お忙しい所、ご回答をいただきまして本当に有難うございました…!
ご掲載くださいましたコードを試してみたのですが、
'Sheet1を複写→新しいブック
ws1.Copy → こちらで止まってしまいました…。
何かご助言をいただけるととても有難い限りです…。
ご迷惑をおかけしてしまいまして大変申し訳ございません。
ご多忙中 恐縮ですが、引き続きどうぞ宜しくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
エクセルVBA Ifでシート名が合...
-
Excel チェックボックスにチェ...
-
実行時エラー'1004': WorkSheet...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
XL:BeforeDoubleClickが動かない
-
ExcelVBA:複数の特定のグラフ...
-
【ExcelVBA】全シートのセルの...
-
【ExcelVBA】動的にボタン、ボ...
-
実行時エラー1004「Select メソ...
-
【VBA】全ての複数シートから指...
-
エクセル・マクロ シートの非...
-
excelのマクロで該当処理できな...
-
VBA 入力月で該当シートを選択...
-
【excel・vba】特定文字列の1行...
-
【Excel VBA】Worksheets().Act...
-
同じ作業を複数のシートに実行...
-
VBA 指定した回数分、別シート...
-
Excel VBA リンク先をシート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
VBA 存在しないシートを選...
-
エクセルで通し番号を入れてチ...
-
VBA 検索して一致したセル...
-
XL:BeforeDoubleClickが動かない
-
VBA 指定した回数分、別シート...
-
VBAマクロでシートコピーした新...
-
シートが保護されている状態で...
-
ブック名、シート名を他のモジ...
-
【VBA】全ての複数シートから指...
-
別のシートから値を取得するとき
-
ExcelのVBAのマクロで他のシー...
-
Excel チェックボックスにチェ...
おすすめ情報
大変申し訳ございません。
コードの全文をご記載いただけると、有難い限りです。
お手数をお掛けしてしまいまして、本当に申し訳ございません。
どうぞ宜しくお願い申し上げます。