|
VBAド素人さん
はじめまして具頭と申します(^0^)/
早速ご依頼のMacroを組んでみました♪
一応僕の環境では問題なかったので、
もしよろしければ是非試してみてください☆ミ
お互いVBAの勉強頑張りましょうネ!
※下記Macroを『標準モジュール』に貼り付けてください
-------------------------------------------------------------------------
Sub Macro1()
Dim OpenBooks As Integer
Dim myCrtPath As Variant
Dim myAns As Integer
Dim TargetPath As String
Dim i As Integer
'現在開かれているBookの数を数えます
OpenBooks = Workbooks.Count
If OpenBooks > 1 Then
MsgBox "※このBook以外の全てのBookを閉じてからMacroを実行してください", vbCritical
Exit Sub
End If
'カレントドライブを確認します
myCrtPath = CurDir("C")
myAns = MsgBox("『" & myCrtPath & "』" & vbCrLf & _
"に新規Bookが保存されますがよろしいですか?", vbYesNo, "Macro実行")
'カレントドライブを変更します
If myAns = vbNo Then
TargetPath = Application.InputBox _
("空欄にご希望の保存先Pathを入力してください", "保存先を入力", _
Type:=2)
Select Case TargetPath
Case ""
MsgBox "処理を中断します"
Exit Sub
Case False
MsgBox "処理を中断します"
Exit Sub
Case Else
ChDir Path:=TargetPath
End Select
End If
'ステートメントが記載されるBook名を変更します
BookName = Application.InputBox _
("ご希望のBook名を入力してください", "保存先を入力", _
Default:="Test", Type:=2)
Select Case BookName
Case ""
MsgBox "処理を中断します"
Exit Sub
Case False
MsgBox "処理を中断します"
Exit Sub
Case Else
ActiveWorkbook.SaveAs Filename:=BookName
End Select
i = 1
Range("A2").Select
Application.ScreenUpdating = False
'ループ処理開始
Do While ActiveCell <> ""
If ActiveCell = ActiveCell.Offset(1) Then
'新しいBookを作成
Workbooks.Add
With ActiveSheet
.Cells(1, 1).Value = "日付"
.Cells(1, 2).Value = "ID"
.Cells(1, 3).Value = "コメント"
.Cells(1, 4).Value = "結果"
.Cells(2, 1).Select
End With
'新しいBookへコピペ
Workbooks(BookName).Activate
ActiveCell.EntireRow.Select
Selection.Copy
'新しいBookへ貼り付け
Workbooks(2).Activate
ActiveSheet.Paste
'新しいBookの名前を変更
ActiveWorkbook.SaveAs Filename:= _
Format(Cells(2, 1).Value, "yyyy-mm-dd" & "-" & i)
ActiveWorkbook.Close
i = i + 1
ActiveCell.Offset(1).Select
End If
'ActiveCellとActiveCellの上の値は同一だが、 _
ActiveCellとActiveCellの下の値が違う場合
If ActiveCell = ActiveCell.Offset(-1) Then
If ActiveCell <> ActiveCell.Offset(1) Then
'新しいBookを作成
Workbooks.Add
With ActiveSheet
.Cells(1, 1).Value = "日付"
.Cells(1, 2).Value = "ID"
.Cells(1, 3).Value = "コメント"
.Cells(1, 4).Value = "結果"
.Cells(2, 1).Select
End With
'新しいBookへ2行目以降をコピペ
Workbooks(BookName).Activate
ActiveCell.EntireRow.Select
Selection.Copy
'新しいBookへ貼り付け
Workbooks(2).Activate
ActiveSheet.Paste
'新しいBookの名前を変更
ActiveWorkbook.SaveAs Filename:= _
Format(Cells(2, 1).Value, "yyyy-mm-dd" & "-" & i)
ActiveWorkbook.Close
ActiveCell.Offset(1).Select
'このケースは一度しか出現しないので、変数iを1に戻す
i = 1
End If
End If
'ActiveCellとActiveCellの上下の値が違う場合
If ActiveCell <> ActiveCell.Offset(-1) Then
If ActiveCell <> ActiveCell.Offset(1) Then
'新しいBookを作成
Workbooks.Add
With ActiveSheet
.Cells(1, 1).Value = "日付"
.Cells(1, 2).Value = "ID"
.Cells(1, 3).Value = "コメント"
.Cells(1, 4).Value = "結果"
.Cells(2, 1).Select
End With
'新しいBookへ2行目以降をコピペ
Workbooks(BookName).Activate
ActiveCell.EntireRow.Select
Selection.Copy
'新しいBookへ貼り付け
Workbooks(2).Activate
ActiveSheet.Paste
'新しいBookの名前を変更
ActiveWorkbook.SaveAs Filename:= _
Format(Cells(2, 1).Value, "yyyy-mm-dd")
ActiveWorkbook.Close
ActiveCell.Offset(1).Select
'このケースは一度しか出現しないので、変数iを1に戻す
i = 1
End If
End If
Loop
Application.ScreenUpdating = True
Workbooks(BookName).Sheets(1).Range("A1").Select
MsgBox "処理が完了しました"
End Sub
-------------------------------------------------------------------------
|
|