アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBAがまったくわからないので、宜しくおねがいします。

大量データをB列の管理番号毎に、ファイルを作成し保存したいと思います。

これはVBAを使えば早くできると思うですが、どのように書けば
よいのかわかりません。

今出先で、B列の管理番号毎に分けることはわかっていたのですが。。。

どなたか教えていただけませんでしょうか?

現在はアクセスにデータをインポートし、クエリで管理番号を手打ちして
抽出して、保存してエクスポートしています。

エクセルVBAを勉強していないのですが、宜しくおねがいします。

質問者からの補足コメント

  • ラックさん

    お返事ありがとうございます。

    ①管理番号○○○のように管理番号という文字と実際の番号.xlsx
    としたいです。

    ②同じファイルはないです。あれば上書きで。

    ③タイトル行は一行です。

    ④保存先フォルダは管理番号という名前にしようと思います。

    どうぞよろしくお願いします。

    会社からこのページ見れずお返事遅れました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/02/27 18:10
  • 元データエクセルと同じ階層に管理番号というフォルダをつくり、
    その中に保存されるようにしたいです。②ですね。

    宜しくおねがいします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/02/27 19:08
  • たつさん

    ありがとうございます。

    管理番号は二つに別れることはないと思います。

    元データのシートは一つだけです。
    保存のシート名は何でも良いです。

    宜しくおねがいします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/02/27 19:13
  • ラックさんできました!

    感動!
    あと2、3回質問しないとできないと思っていました。

    書く場所については

    開発タブのビジュアルベーシックの挿入の標準モジュールにはりつけて見ました。

    保存するときにxlsmにしてから。
    マクロ➡実行

    で手順はよかったてすか?

    今回は管理番号毎にファイルを作成しましたが、
    応用として、例えば顧客IDごととかになったときは
    どの部分を変更すると、できるのでしょうか?
    そんなに単純ではないですか?

    参考までにお伺いします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2017/02/28 19:34

A 回答 (7件)

こんなものはいかがでしょうか?


-----------------------------------------------------------------------------
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」
この回答への補足あり
    • good
    • 0

手順は問題ないと思います。



「管理番号」の項目とかではなく列番号で行っているわけなので、一部の「2」とか「B」を変更するだけでも可能ですが「管理番号」も変更したほうが判りやすいと思います。

下図の、赤の部分は必須で、緑の部分は推奨となります
コードに色づけ出来ないので、図とNo.4と照合してみてください。
図は見づらいですが縮小されてしまうのでご了承下さい。
「エクセル2010 データを管理番号ごとに」の回答画像7
    • good
    • 0
この回答へのお礼

ラックさん

色をつけていただいたので、わかりやすいですね。
同じような作業が発生するときに変えて挑戦してみます。

最初から自分で考えて書くのはやっぱり難しそうです。
VBAができると全然違いますね。

ありがとうございました。

お礼日時:2017/02/28 21:07

念の為ですが、マクロ(VBA)の使い方が全く判らないのならば以下を参考に勉強してみてください。


http://www.moug.net/vba/beginners/
    • good
    • 0

No.4 の補足



※ VBAを実行する際は管理番号が記載されているシートがアクティブになっている必要があります。(わざわざ他のシートを開いた状態で実行するとは思いませんが念の為)
※ 実行時に「作業」と「Data」が一時的に作成されます。途中で強制停止した場合に残ります、次回実行する前に必ず削除して下さい。
※ 保存シート名は「Data」としていますが変更したいときは「Sheets(1).Name = "Data"」の「Data」を変更して下さい。
※ No.4 の最後に書かれている件ですが、画面の書き換えを停止していてもエクセルのウィンドウがアクティブの状態ではパカパカしています。またタイトルバーに「Excel(応答なし)」と表示されますがチャント動いていますのでそのままお待ち下さい。個人的には誤解を受けやすいので「Application.ScreenUpdating = False」と「Application.ScreenUpdating = True」は削除した方が良いと思います。
※ 整理番号が飛んでしまっても、作業中にソートしてまとめていますので問題ありません。
※ 整理番号は表示されている状態での文字列で比較していますがソートの関係で、たとえば、文字列で「A12345」の物と、数字で「12345」と入力され書式設定が「!A00000」などのために表示が「A12345」になっているは別物としてファイルが作成されます。もしもすべて文字列にしてもよければ対応も可能です。
    • good
    • 0

1)同じ管理番号が添付の図のように2つ以上のかたまりに分かれることはありますか。

(黄色部分)
2)保存するのは1つのシートだけですか。また、保存のシート名は何でも良いですか。
「エクセル2010 データを管理番号ごとに」の回答画像3
この回答への補足あり
    • good
    • 0

「④保存先フォルダは管理番号という名前にしようと思います。

」ですが
次のうちどれでしょうか?
① 絶対パスが決まっている → ドライブ名から全て提示してください(例:「C:\管理番号」)
② マクロを記述したファイルの有るフォルダーの中に「管理番号」というサブフォルダーがある。
③ その他 → 具体的に説明してください。
この回答への補足あり
    • good
    • 0

① ファイルの名前は「管理番号.xlsx」のようにするのでしょうか?


② 同じファイルが有ったときはどうするのでしょうか?
③ タイトル行は有りますか?有った場合何行ですか?
④ 保存先のフォルダーは決まっていますか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!