[[20170822082107]] 『フォルダ自動生成し、ブックを保存』(ユキシ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『フォルダ自動生成し、ブックを保存』(ユキシ)

フォルダ自動生成し、ブックを保存

ご教示願います。

AフォルダにA01ブックが、あり
A01ブックには、
シートAA,AB,ACが、あります。
シートAAには、
チェックボックス
AB,ACが、あります
仮にABのチェックボックスにチェックを入れ、ボタンを押すと
1,A01ブックを上書き保存
2,シートABだけをコピー、
3,既存のBフォルダに、A01フォルダを生成
4,生成した、A01フォルダ内に、A01ZZという名前を付けて保存。

上記のような、一連の流れを
チェックを入れ、ボタン一つで、
行いたいのですが、得意な方、
サンプルをお願い出来ますか?

当方、「マクロを記録する」でしか、
マクロを使用出来ない素人ですので、
お手柔らかに願います。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


正しく動かなくても構わないので、マクロの自動記録でできたコードを、貴方が応用しようとしたものを上げられませんか? 曖昧な言葉が多く、実体が掴めないのですよ。変に抽象化せず、ありのままの情報を教えてください。(同じ文字種類で、別の文字や数字に変えれば、情報漏洩にもならないでしょう。文字数や文字種が実際と違っていて、折角考えたコードが動かなかった、というのが一番困ります)

例えば、チェックボックスって、セルにチェック文字を書いたものなのか、フォームオブジェクトのチェックボックスを貼っているのか、ActiveXのチェックボックスを貼っているのか判りません。更には、オブジェクトを貼っているなら、リンクしたセルは設定しているのか、具体的にそれはどのセルなのか等、さっぱりです。 そして、チェックボックスの文字列は、シート名になっているのでしょうか? それとも、オブジェクト名をAB,ACに変えているのでしょうか?

更には、フォルダ名とかファイル名とか、抽象化してしまっていて、よく判りません。A01は自分のブック名だし、ZZは関連するものが無いようだし、つまり "\A01\A01ZZ.xlsm" というファイル名は固定、という事ですかね? それとも、ZZとは、シート名に置き換える? 置き換えるなら元のブック名と被る事は無いのだし、フォルダを掘る必要は無さそうですが…。

ちなみに、Excelシートでチェックボックスをオブジェクトを貼って実現すると、カーソル移動対象外だし、間違えて摘まんで移動させてしまったりするし、使いにくいので、「データの入力規則」で○×とか記号を選択するようにするのが一般的かと思います。
(チェックボックスって座標で貼っているので、どのセル上にあるのかをマクロで調べるのも面倒なので、自分でマクロを考える人は、シートに貼って使わないように思います)

とりあえず、フォルダ作成するなら MkDir、名前を付けて保存なら SaveAs を調べてみてください。
(???) 2017/08/22(火) 09:02


迅速かつ、丁寧な回答ありがとうございます。
確かに、分かりづらいですね。申し訳ございません。
出先ですので、戻り次第、マクロで、記録したものを
載せますので、診ていただけますでしょうか。

チェックボックスの件もありがとうございます。
ブック内にある20近くあるシートをボタン一つで
選択したものだけ、コピー、フォルダ作成、名前を付けて保存の
選択する方法としての素人考えです。
素人考えですので、代替えの案などあれば、教えていただけますでしょうか。

(ユキシ) 2017/08/22(火) 09:39


20シートもあるなら尚のこと、チェックボックスを20個も貼って、文字列書き換えて、表示揃えて…、って、面倒じゃありませんか? 揃っていなくて、でこぼこしてたりしませんか?

例えば、以下のコードをAAシートのシートモジュールとして実行すれば、簡単にシート一覧と○×選択ができあがりますよ。

 Sub test1()
    Dim i As Long
    Dim iR As Long

    For i = 1 To Sheets.Count
        With Sheets(i)
            If .Name <> Me.Name Then
                iR = iR + 1
                Me.Cells(iR, "A").Value = .Name
            End If
        End With
    Next i
    With Me.Range("B1:B" & iR).Validation
        .Delete
        .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:="○,×"
    End With
 End Sub

とりあえず、チェックボックスを使った現状のレイアウトが知りたいので、コード待ってますね。あと、オブジェクトを貼っているならば、フォームコントロールのものか、ActiveXのものかの区別も。(マクロが全然違ってきます)
(???) 2017/08/22(火) 10:55


(???)様
お世話になります

試しを記録しましたので、診ていただけますか。
また、この記録ですと、
・選択出来ないので、実行すると全てのシートが、実行されてしまいます。
・試しなので、シートの数は少ないです。
・また、使用後にTEST1というフォルダを他に切り取ってしまいますので、
再度、実行した際に 『TEST1』のフォルダが見つかりませんのエラーが出てしまいます。

選択及びフォルダ作成のお知恵をご教示下さい。
尚、大元のシート『オリジナル』には、シートA〜Cまでの数値を入力する項目があり、
A〜Cのシートは、決められたフォームで、数値が、リンクしています。
ですので、大元のシート『オリジナル』の各々数値を入力する場所に選択できる
何かで、選択し、選択されたシートだけ実行できるようにしたいのです。

宜しくお願い致します


Sub 転送()
'
' 転送 Macro
'

'

    ActiveWorkbook.Save
    Sheets("A").Select
    Sheets("A").Copy
    ChDir "C:\Users\YUKISHI1\Desktop\試し\TEST\TEST1\A"
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Users\YUKISHI1\Desktop\試し\TEST\TEST1\A\A.xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWindow.Close
    Sheets("B").Select
    Sheets("B").Copy
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Users\YUKISHI1\Desktop\試し\TEST\TEST1\A\B.xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWindow.Close
    Sheets("C").Select
    Sheets("C").Copy
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Users\YUKISHI1\Desktop\試し\TEST\TEST1\A\C.xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWindow.Close
    ActiveWorkbook.Save
End Sub

(ユキシ) 2017/08/22(火) 12:38


確認したかった、チェックボックスが何なのかが判らないですねぇ。残念。

とりあえず、フォームコントロールのチェックボックスを貼っていて、その表示文字列が該当シート名になっている、と仮定したマクロなぞ。

 Sub test()
    Dim C As Object
    Dim cw As String

    cw = ThisWorkbook.Path & "\" & Split(ThisWorkbook.Name, ".")(0)
    If Dir(cw, vbDirectory) = "" Then
        MkDir cw
    End If

    For Each C In Me.CheckBoxes
        If C.Value = xlOn Then
            Sheets(C.Caption).Copy
            ActiveWorkbook.SaveAs Filename:=cw & "\" & Split(ThisWorkbook.Name, ".")(0) & C.Caption & ".xlsx", _
                                  FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
            ActiveWorkbook.Close
        End If
    Next C
 End Sub
(???) 2017/08/22(火) 12:55

(???)様
迅速な対応ありがとうございます。

はずかしながら当方、本当の初心者です。。。。

どことどこを変更してマクロとして登録して良いかわかりません。

「フォームコントロールのチェックボックス」は、大元のシートに作成し各シート
と同じ名称にしました。

(ユキシ) 2017/08/22(火) 13:18


ALT+F11 の同時押しで、マクロの編集画面が開きます。左側のツリーで、チェックボックスを貼ってあるシート(AA)をダブルクリックすると、そのシートの編集画面が右側に表示されます。

ここに、私の書いたマクロをそのままコピペしてください。 ご覧の通り、自ブックの保存場所を元に処理しているので、どこも変える必要はないです。貼りつけたら、マクロの編集画面を閉じます。

ALT+F8で、実行するマクロの選択画面になるので、ここで「test」を選択して実行すれば終わりです。

マクロを頻繁に使うようならば、リボンの「開発」タブをチェックして常時表示させると便利ですよ。 このあたりは、マクロの使い方について調べてみてください。 例えば、ActiveXのボタンを貼って、このプロシジャに今回のコードを貼れば、貼ったボタンを押すだけで、何度でも実行できるようになります。
(???) 2017/08/22(火) 13:31


「コンパイルエラー:Meキーワードの使用方法が不正です。」と出てしまいます。


Sub test()

    Dim C As Object
    Dim cw As String

    cw = ThisWorkbook.Path & "\" & Split(ThisWorkbook.Name, ".")(0)
    If Dir(cw, vbDirectory) = "" Then
        MkDir cw
    End If

    For Each C In Me.CheckBoxes
        If C.Value = xlOn Then
            Sheets(C.Caption).Copy
            ActiveWorkbook.SaveAs Filename:=cw & "\" & Split(ThisWorkbook.Name, ".")(0) & C.Caption & ".xlsx", _
                                  FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
            ActiveWorkbook.Close
        End If
    Next C
 End Sub

(ユキシ) 2017/08/22(火) 13:39


指示通り操作したならば、シートモジュールになりますが、標準モジュールに貼っていませんか? 「マクロが書かれているシート自身」に貼ってあるチェックボックスを見るようコーディングしてあります。 標準モジュールに貼るならば、対象シート名の明示が必要です。
(???) 2017/08/22(火) 13:44

左側のツリーで、チェックボックスを貼ってあるシート(AA)をダブルクリックすると、そのシートの編集画面が右側に表示されます。

左側のツリーなるものが、ありません。表示の仕方でしょうか?
(ユキシ) 2017/08/22(火) 13:58


マクロを使った事が無ければ、編集画面が左右に分かれているはずですが、左側を閉じてしまったのですかね?
その場合は、「表示」−「プロジェクトエクスプローラ」をチェックしてみてください。
(???) 2017/08/22(火) 14:12

(???)様

取り急ぎ

出来ました!!!!!
感動してます!!!
(ユキシ) 2017/08/22(火) 14:35


(???)様

取り急ぎ、超ど素人の当方に対し、詳細、迅速、丁寧に対応して頂き
ありがとうございます!!!!!!!!!!!!!!!!!!!!!!

明日以降に再度本来のファイルで試したいと思いますので、
もう少しの期間だけお付き合いお願いできますでしょうか。

宜しくお願い致します

(ユキシ) 2017/08/22(火) 14:44


(???)様

2点ほどお願いします

1.現状は、「ブックの名前の新規フォルダ」を生成しその中に選択シートが、全て入っております。
「ブックの名前の新規フォルダ」の中に更に、おのおの「選択したシート名のフォルダ」を生成し、
その中に「選択したシート」が保存できるように出来ますか?

2.現状ですと、新規フォルダの掃出し先が、元のブックと同じ場所なのですが、
別のフォルダに吐出したいの場合どの部分を編集したら宜しいでしょうか。

お忙しければ後日で構いませんので、宜しくお願い致します。
(ユキシ) 2017/08/22(火) 15:03


もちろん変更はできますが、作業依頼はお断りします。 元のご要望を実現するコードは差し上げましたので、必要なキーワードはすべてその中にあります。 後の変更は、ご自身で行ってください。

考え方だけ書きますと、まず、MkDir がフォルダを作成する命令であり、cw には自分のフルパスに、ブック名を加えた文字列が入るようになっています。
これに更にシート名を加えるように変更し、Forループの内側に移動させてください。

また、cwは ThisWorkbook.Path から始まっていますが、これが自ブックの存在するフルパスです。 他の場所に変えたいならば、ここを "c:\test\" とか、任意の固定フォルダに変えれば良いだけです。
(???) 2017/08/22(火) 15:24


さようですか、

読解のコメントを見てもちんぷんかんぷんですので、また、どなたかに
ご相談したいと思います。

ここまでこれたのも(???)様のおかげです。

この度は、本当にありがとうございました。

(ユキシ) 2017/08/22(火) 20:53


 情報共有です。

http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=182760&rev=0
(とおりすがり) 2017/08/24(木) 13:21


サロンですか。
うーん、この質問内容と少し似てますが、別質問ではないですかね? チェックボックスの話が無くなっているし。
しかし、主語不明で意味の判らない内容になっているし、スルーされて終わりそうな?
(???) 2017/08/24(木) 13:36

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.