
大変お世話になっております。
以下の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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAに関して 2 2023/11/09 20:57
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】全シートのセルの...
-
Excelマクロのエラーを解決した...
-
特定の文字を含むシートだけマ...
-
excelのマクロで該当処理できな...
-
VBA 存在しないシートを選...
-
実行時エラー'1004': WorkSheet...
-
ExcelVBA:複数の特定のグラフ...
-
エクセルのシート名変更で重複...
-
VBA 検索して一致したセル...
-
ブック名、シート名を他のモジ...
-
ユーザーフォームに入力したデ...
-
別のシートから値を取得するとき
-
同ブックの別シートの表から、...
-
エクセル・マクロ シートの非...
-
Excel VBA マクロ 先頭行の固定...
-
XL:BeforeDoubleClickが動かない
-
エクセルで通し番号を入れてチ...
-
エクセルVBAでダブルクリックを...
-
IFステートの中にWithステート...
-
ExcelのVBAのマクロで他のシー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
特定の文字を含むシートだけマ...
-
ユーザーフォームに入力したデ...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
別のシートから値を取得するとき
-
VBAで指定シート以外の選択
-
実行時エラー'1004': WorkSheet...
-
実行時エラー1004「Select メソ...
-
シートが保護されている状態で...
-
IFステートの中にWithステート...
-
VBA 検索して一致したセル...
-
ブック名、シート名を他のモジ...
-
Worksheet_Changeの内容を標準...
-
XL:BeforeDoubleClickが動かない
-
VBA 存在しないシートを選...
-
Excel VBA リンク先をシート...
-
userFormに貼り付けたLabelを変...
-
ExcelVBA シート名を複数セルか...
-
【Excel VBA】Worksheets().Act...
おすすめ情報
大変申し訳ございません。
コードの全文をご記載いただけると、有難い限りです。
お手数をお掛けしてしまいまして、本当に申し訳ございません。
どうぞ宜しくお願い申し上げます。