質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

3017閲覧

名前を付けて保存の際、自動でファイル名を変数にする

kokichi

総合スコア11

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/11/05 06:53

編集2022/11/05 07:02

イメージ説明### 前提

VBAで名前を付けて保存をする際、自動でファイル名が変数になるようなコードを作成してます。
前提として私はVBAに関しての知識がないため、ネットに記載のある情報をもとに作成しております。
作りたい機能はエクセルにボタンを作成し、そこに今回作成中のマクロを挿入に、保存作業の軽減に努めようとしております。

実現したいこと

・エクセルにボタンを作成し押下することで、自動でファイル名が変数(得意先名)となり保存できる
・フィルターで変数(得意先)の絞り込みを行っても、絞り込んだ変数(得意先)名で保存できる
・上記により保存作業の負担を軽減

発生している問題・エラーメッセージ

発生している問題:フィルターで絞り込んだ変数(得意先)名で保存したいが、ファイル名がフィルターを使用する前の変数(得意先)名になってしまう。
例)
フィルターなし:保存する際、自動で得意先A(変数)の名前で保存ができる。
フィルターで絞り込んだ状態:保存する際、自動で得意先B(変数)の名前で保存できると思いきや、名前が得意先Aになってしまう。
恐らくフィルターを使うことで、セル番地が変わってしまうためだと思ってます。

該当のソースコード

Sub ファイル名に変数代入() Dim FileName As String Dim Done As Variant 'ファイル名にしたいセル値を変数格納 FileName = Range("C2") '名前を付けて保存ダイヤログ表示 Done = IIf(Application.Dialogs(xlDialogSaveAs). _ Show(Arg1:=ThisWorkbook.path & "\" & FileName & ".xlsm", Arg2:=52), _ "保存", "キャンセル") End Sub

試したこと

エラーがでているわけではありませんが、ファイル名がフィルターで絞り込んだ得意先(変数)にならず、大変困っています。ネットでもいろいろと調べましたが個人では解決に至りませんでした・・・
どなたかわかる方がおりましたらお力添えお願いします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2022/11/05 07:05

アップロードした画像のリンクがコード内に埋め込まれています。 コードの外に出して画像が表示されるように質問を編集してください。
kokichi

2022/11/05 07:09

失礼しました。 ご指摘ありがとうございます。 先ほど編集しましたので大丈夫かと。
hatena19

2022/11/05 07:24

ありがとうございました。うまく表示されてます。
guest

回答1

0

ベストアンサー

フィルターをかけた場合は、
セル範囲.SpecialCells(xlCellTypeVisible)で可視セルだけ取得できます。
それを利用してください。

使い方は下記が参考になるでしょう。

Office TANAKA - Excel VBA Tips[オートフィルタ[絞り込んだ行を操作する]]


サンプルコード

vba

1Sub ファイル名に変数代入() 2 3 Dim FileName As String 4 Dim Done As Variant 5 6 With Range("C2", Range("C2").End(xlDown)).SpecialCells(xlCellTypeVisible) 7 'フィルタをかけた最初の可視セルの値を変数に代入 8 FileName = .Cells(1, 1) 9 End With 10 11 12 '名前を付けて保存ダイヤログ表示 13 Done = IIf(Application.Dialogs(xlDialogSaveAs). _ 14 Show(Arg1:=ThisWorkbook.Path & "\" & FileName & ".xlsm", Arg2:=52), _ 15 "保存", "キャンセル") 16 17End Sub

投稿2022/11/05 07:16

編集2022/11/05 13:49
hatena19

総合スコア34362

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kokichi

2022/11/05 09:55

ありがとうございます。 早速いただいたサイトを参考にいろいろ試してみましたが上手くいきません・・・ 以下のコードで実行しましたが、変わらず同じファイル名になってしまいます。 コードが不足している、並びが違う等ありましたらご教示いただけると助かります。 Sub ファイル名に変数代入() Dim FileName As String Dim Done As Variant With Range("A1").CurrentRegion.Offset(1, 0) With Range("A1").CurrentRegion.Offset(1, 0) For Each R In .Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Rows Debug.Print R.Address Next R End With 'ファイル名にしたいセル値を変数格納 FileName = Range("C2") '名前を付けて保存ダイヤログ表示 Done = IIf(Application.Dialogs(xlDialogSaveAs). _ Show(Arg1:=ThisWorkbook.Path & "\" & FileName & ".xlsm", Arg2:=52), _ "保存", "キャンセル") End With End Sub
hatena19

2022/11/05 13:47

代入する式が FileName = Range("C2") のままですので、C2セルの値しか代入されません。 コードの意味を理解するようにしてください。 回答の方にサンプルコードを追記しましたので参考にしてください。
kokichi

2022/11/06 05:36

ありがとうございます。 問題なく実行することができました。 VBAをこれから少しづつ学習していこと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問