1206170553 エクセルのVBAでお願いします。バージョンは2002です。

アクティブシートを別ブックにして(セル内はテキストに変換して)サーバー上の任意のフォルダに別のファイル名で保存するVBAを希望します。

詳しく説明します。添付画像の通り、4月シートのA1からH33のセル(ここでは何も表示されていませんが実際は関数が入っています)のすべてをテキストデータに直してから、この選択部分のみのファイルにします。シート名は”4項目1(4月)”にして(これはF1からH1のセル内テキストと本来のシート名を組み合わせた文字です)、同じ名前のファイル名(4項目1(4月).xls)にしてから、サーバー上のフォルダ(\\Server\4月)に保存します。

当然、5月シートがアクティブになっているときは、A1からH33のセルをテキストにしてファイル名とシート名を”4項目1(5月)”にして、”\\Server\5月”に保存したいというわけです。もちろん3月まで行います。

説明が不十分かもしれませんが、よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/03/22 17:43:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント100pt

一応ご希望の仕様で作成した例です。


気になるのはサーバの下に、シート名と同名(#月)のフォルダがあることを前提にしていますが、

これは問題ないでしょうか。

下記のコードでは一度フォルダのパスをチェックし、なければフォルダを作成する処理を入れています。


質問に書かれているように、アクティブなシートを処理する場合は ActiveSheetSave

ブック内のすべてのシートを処理する場合は AllSheetsSave をお使いください。


不明な点はコメントにて対応しますので有効にお願いします。

Option Explicit

'-----------------------------------------
' 保存先のフォルダ
'-----------------------------------------
Const SERVER_PATH = "\\server\"

'-----------------------------------------
' すべてのシートを個別に保存
'-----------------------------------------
Sub AllSheetsSave()
    Dim srcWS As Worksheet
    
    For Each srcWS In ThisWorkbook.Worksheets
        saveMonthlyBook srcWS
    Next
End Sub

'-----------------------------------------
' アクティブなシートを保存
'-----------------------------------------
Sub ActiveSheetSave()
    saveMonthlyBook ActiveSheet
End Sub

'-----------------------------------------
Sub saveMonthlyBook(srcWS As Worksheet)
    srcWS.Copy
    
    Dim dstWB As Workbook
    Set dstWB = ActiveWorkbook
    
   '--- データを値としてコピー
    srcWS.Range("A1:H33").Copy
    dstWB.Worksheets(1).Range("A1:H33").PasteSpecial _
        Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    
    Dim folderPath$, fileName$
    
    With srcWS
        folderPath = SERVER_PATH & .Name
        fileName = .Cells(1, "F") & .Cells(1, "G") & .Cells(1, "H") & "(" & .Name & ").xls"
    
   '--- シート名と同名のフォルダがなければ作成
        If Dir(folderPath, vbDirectory) = "" Then
            MkDir folderPath
        End If
    End With
    dstWB.SaveAs folderPath & "\" & fileName
    
    dstWB.Close
End Sub
id:anglar

いやあ、すごいッス。こんなに早く感心しきりです。今、サーバー環境にいないので、とりあえずローカルフォルダで試しましたが、満足できます。感謝です。 '--- シート名と同名のフォルダがなければ作成 まで作っていただき、さらに感謝です。

2008/03/22 17:41:51
  • id:anglar
    '-----------------------------------------
    ' 保存先のフォルダ
    '-----------------------------------------
    Const SERVER_PATH = "\\server\"

    のパス名を、"設定シート"のC5セルに入力されている文字列("\\server\データ集計"のように自由に変更)にしたいのですが、どうやるのでしょう?
  • id:Mook
    (1) 下記の行を削除
    Const SERVER_PATH = "\\server\"

    (2) 下記のように変更
    Sub saveMonthlyBook(srcWS As Worksheet)
    Dim ServerPath As String
    ServerPath = ThisWorkbook.WorkSheets("設定シート").Range("C5").Value


    (3) folderPath の部分を下記に変更
    folderPath = SERVER_PATH & .Name

    folderPath = ServerPath & .Name

    でいけるかと思います。
  • id:anglar
    早速ありがとうございました。うまくできました。再度、感謝・感謝
    (*^_^*)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません