エクセルVBAがまったくわからないので、宜しくおねがいします。
大量データをB列の管理番号毎に、ファイルを作成し保存したいと思います。
これはVBAを使えば早くできると思うですが、どのように書けば
よいのかわかりません。
今出先で、B列の管理番号毎に分けることはわかっていたのですが。。。
どなたか教えていただけませんでしょうか?
現在はアクセスにデータをインポートし、クエリで管理番号を手打ちして
抽出して、保存してエクスポートしています。
エクセルVBAを勉強していないのですが、宜しくおねがいします。
No.4ベストアンサー
- 回答日時:
こんなものはいかがでしょうか?
-----------------------------------------------------------------------------
Sub 管理番号ごとに分割()
Dim 保存先 As String
Dim 行 As Long
Dim ファイル名 As String
Application.ScreenUpdating = False
保存先 = ThisWorkbook.Path & "\管理番号"
If Dir(保存先, vbDirectory) = "" Then MkDir 保存先
ActiveSheet.Copy Before:=Sheets(1)
Sheets(1).Name = "作業"
Cells.Sort _
Key1:=Range("B2"), _
Order1:=xlAscending, _
Header:=xlYes, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
SortMethod:=xlStroke, _
DataOption1:=xlSortNormal
行 = Cells(Rows.Count, 2).End(xlUp).Row
Do While 行 >= 2
ActiveSheet.Copy Before:=Sheets(1)
Sheets(1).Name = "Data"
For 行 = 2 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(行, 2).Text <> Cells(行 + 1, 2).Text Then
Rows(行 + 1 & ":" & Rows.Count).Delete Shift:=xlUp
Sheets(1).Copy
ファイル名 = 保存先 & "\管理番号" & Cells(2, 2).Text & ".xlsx"
If Dir(ファイル名) <> "" Then Kill (ファイル名)
ActiveWorkbook.SaveAs _
Filename:=ファイル名, _
FileFormat:=xlOpenXMLWorkbook, _
Password:="", _
WriteResPassword:="", _
ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWindow.Close
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
Rows("2:" & 行).Delete Shift:=xlUp
Exit For
End If
Next
行 = Cells(Rows.Count, 2).End(xlUp).Row
Loop
If Sheets(1).Name = "作業" Then
Application.DisplayAlerts = False
Sheets(1).Delete
Application.DisplayAlerts = True
End If
Application.ScreenUpdating = True
MsgBox ("終了しました")
End Sub
-----------------------------------------------------------------------------
※ 終了までスピードアップの為、画面の書き換えを止めています。不安になって嫌でしたら、次の2行を削除して下さい。
「Application.ScreenUpdating = False」
「Application.ScreenUpdating = True」
No.7
- 回答日時:
手順は問題ないと思います。
「管理番号」の項目とかではなく列番号で行っているわけなので、一部の「2」とか「B」を変更するだけでも可能ですが「管理番号」も変更したほうが判りやすいと思います。
下図の、赤の部分は必須で、緑の部分は推奨となります
コードに色づけ出来ないので、図とNo.4と照合してみてください。
図は見づらいですが縮小されてしまうのでご了承下さい。
ラックさん
色をつけていただいたので、わかりやすいですね。
同じような作業が発生するときに変えて挑戦してみます。
最初から自分で考えて書くのはやっぱり難しそうです。
VBAができると全然違いますね。
ありがとうございました。
No.6
- 回答日時:
No.5
- 回答日時:
No.4 の補足
※ VBAを実行する際は管理番号が記載されているシートがアクティブになっている必要があります。(わざわざ他のシートを開いた状態で実行するとは思いませんが念の為)
※ 実行時に「作業」と「Data」が一時的に作成されます。途中で強制停止した場合に残ります、次回実行する前に必ず削除して下さい。
※ 保存シート名は「Data」としていますが変更したいときは「Sheets(1).Name = "Data"」の「Data」を変更して下さい。
※ No.4 の最後に書かれている件ですが、画面の書き換えを停止していてもエクセルのウィンドウがアクティブの状態ではパカパカしています。またタイトルバーに「Excel(応答なし)」と表示されますがチャント動いていますのでそのままお待ち下さい。個人的には誤解を受けやすいので「Application.ScreenUpdating = False」と「Application.ScreenUpdating = True」は削除した方が良いと思います。
※ 整理番号が飛んでしまっても、作業中にソートしてまとめていますので問題ありません。
※ 整理番号は表示されている状態での文字列で比較していますがソートの関係で、たとえば、文字列で「A12345」の物と、数字で「12345」と入力され書式設定が「!A00000」などのために表示が「A12345」になっているは別物としてファイルが作成されます。もしもすべて文字列にしてもよければ対応も可能です。
No.2
- 回答日時:
「④保存先フォルダは管理番号という名前にしようと思います。
」ですが次のうちどれでしょうか?
① 絶対パスが決まっている → ドライブ名から全て提示してください(例:「C:\管理番号」)
② マクロを記述したファイルの有るフォルダーの中に「管理番号」というサブフォルダーがある。
③ その他 → 具体的に説明してください。
No.1
- 回答日時:
① ファイルの名前は「管理番号.xlsx」のようにするのでしょうか?
② 同じファイルが有ったときはどうするのでしょうか?
③ タイトル行は有りますか?有った場合何行ですか?
④ 保存先のフォルダーは決まっていますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メール添付されているファイル...
-
excelとCSVについて質問です! ...
-
マクロ VBA ファイル名を連番...
-
エクセルでCSVファイルとして保...
-
エクセルがwindows終了時に未保...
-
エクセル2019でPDFファイル名に...
-
エクセルでVBAを使用して1分毎...
-
開いてるファイル(エクセル等)...
-
csvファイルを上書き保存でカン...
-
Excelで指定範囲だけを(.prn)保...
-
ピボットテーブルの更新ができない
-
エクセルで、ファイル内に入力...
-
Illustratorファイルに読み取り...
-
OneDriveに保存したファイルは...
-
エクセルでセル値をファイル名...
-
excelでhtmlでの保存を元に戻...
-
CSVの上書き保存
-
エクセル文書を保存したらメモ...
-
【スプレドシート】IMPORTRANGE...
-
パワーポイントをエクセルファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルを上書き保存したのに...
-
エクセル文書を保存したらメモ...
-
いきなりPDFでPDFファイルを開...
-
メール添付されているファイル...
-
マクロ VBA ファイル名を連番...
-
Excel画面の自動更新 Excelファ...
-
エクセルがwindows終了時に未保...
-
エクセルでCSVファイルとして保...
-
エクセルでVBAを使用して1分毎...
-
OneDriveの存在を知った。エク...
-
Illustratorファイルに読み取り...
-
ピボットテーブルの更新ができない
-
開いてるファイル(エクセル等)...
-
エクセル表のCSV化ができない
-
GetSaveAsFilenameでフォルダを...
-
エクセル 更新していないのに...
-
csvファイルを上書き保存でカン...
-
「変更を保存しますか?」と聞...
-
マクロVBA特定フォルダーに次々...
-
エクセル2019でPDFファイル名に...
おすすめ情報
ラックさん
お返事ありがとうございます。
①管理番号○○○のように管理番号という文字と実際の番号.xlsx
としたいです。
②同じファイルはないです。あれば上書きで。
③タイトル行は一行です。
④保存先フォルダは管理番号という名前にしようと思います。
どうぞよろしくお願いします。
会社からこのページ見れずお返事遅れました。
元データエクセルと同じ階層に管理番号というフォルダをつくり、
その中に保存されるようにしたいです。②ですね。
宜しくおねがいします。
たつさん
ありがとうございます。
管理番号は二つに別れることはないと思います。
元データのシートは一つだけです。
保存のシート名は何でも良いです。
宜しくおねがいします。
ラックさんできました!
感動!
あと2、3回質問しないとできないと思っていました。
書く場所については
開発タブのビジュアルベーシックの挿入の標準モジュールにはりつけて見ました。
保存するときにxlsmにしてから。
マクロ➡実行
で手順はよかったてすか?
今回は管理番号毎にファイルを作成しましたが、
応用として、例えば顧客IDごととかになったときは
どの部分を変更すると、できるのでしょうか?
そんなに単純ではないですか?
参考までにお伺いします。