VBAであるテンプレートのファイルを開いて、ファイル名をB3セルに入力された名前で保存したいのです。まず、下にマクロを示します。
Sub 新規_試作マスタ作成()
ChDir "C:\Users\H1250-201\Desktop"
Workbooks.Open Filename:="C:\Users\H1250-201\Desktop\試作マスター.xlsm"
ChDir "D:\A\" & Format(Date, "yyyy年") & "\" & Format(Date, "yyyy年m月") & ""
ActiveWorkbook.SaveAs Filename:="D:\A\" & Format(Date, "yyyy年") & "\" & Format(Date, "yyyy年m月") & "\" & Format(Date, "yyyymmdd") & " " & ThisWorkbook.Sheet1.Range("B3").Value & " 試作.xlsm", FileFormat _
:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Dドライブの中のAというフォルダがあり、その中に、2014年→2014年1月の順にフォルダがあります。ただし、Aの中には2013年~2020年、2014年の中には、2014年1月~2014年12月のフォルダがあるのです。そこで、今日の日付を参照してそれに応じたフォルダ分けを行い、ファイルの頭に「日付」、その後に「B3セルに入力された名前」、「試作」の順に
「日付」 「B3セルに入力された名前」 「試作」という名前で保存されるマクロを作成したいのです。
上のマクロでは、ThisWorkbook.Sheet1.Range("B3").Valueの部分がおかしくてうまく行きません。個々の部分をただ文字列として"○○"とするとうまくいきました。
つまり、マクロのある自身のファイルのセルを参照したいのです。差し支えなければご回答願います。
No.2ベストアンサー
- 回答日時:
ThisWorkbook.Sheet1.Range("B3").Value
↓
ThisWorkbook.Worksheets("Sheet1").Range("B3").Value
こうするとどないだ。
これだけではなんなのでちょっと解説を。
ThisWorkbook.Sheet1
この書き方だと、ThisWorkbook(自分自身のブックを指すExcel.Workbookクラスのインスタンスを返す)にSheet1というメソッドないしはプロパティがあるというプログラムになる。Excel.Workbookクラスのメソッドにはシート一覧(Excel.Worksheetsクラスのインスタンス)を返すWorksheetsメソッドがあり、さらにExcel.Worksheetsクラスには個々のシートを返すItems(key)というメソッドがある。なので、上のコードはより正確に書くと
ThisWorkbook.Worksheets.Items("Sheet1").Range("B3").Value
となるが、Excel.WorksheetsクラスのItemsメソッドはメソッド名を省略する事ができる(これを規定のプロパティ、規定のメソッドなどと呼ぶ)のでWorksheets("Sheet1")と書いてもOKなのよん。
ご回答ありがとうございます。仰るとおりにすると、うまくいきました。書き方によってはメソッドとして処理してしまう場合があるのですね。
Itemsは知らなかったです!
ファイルだけでなく、シートの参照もかなり奥が深いのですね。
No.3
- 回答日時:
shintoshin258さん
こんにちは。
多分、皆さん誰も何が問題かわからないと思います。
失礼ですが、VBAは初心者ですか?
問題点が絞られているのなら、ご自身でセルB3の内容を確かめれば良いことだけです。
回答者はセルB3に何が入っているのか分かりませんので…
【一応質問に対しての回答ですが】
「ThisWorkbook.Sheet1.Range("B3").Value」が正しいですか?とのことだと思います。
完璧に正しいです。
Sheet1が初期のままで、修正していなければOKのはずです。
確認するとしたら、VBE画面の左にツリーでVBAProject--Sheet1(Sheet1)になっていると思います。
括弧の中がシートタブの名前で、左側のSheet1がオブジェクト名です。
【問題があればデバッグすれば良いです】
イミディエイト(ウィンドウ)があるかと思います。…表示されていなければctrl+Gで表示して下さい。
そこで ? ThisWorkbook.Sheet1.Range("B3").Value と入力して Enterを押せばセルB3の
値が表示されると思います。
その値を確認して下さい。
注)? は Print と同じです。
ちなみに「ChDir "C:\Users\H1250-201\Desktop"」の命令を実行していますが、意味がないです。
Workbooks.Open Filename:="C:\Users…とフルパスを指定していますので、Chdirは必要ありません。
またまた「ちなみに」となりますが、
「ChDir "D: …」も意味がありません。
ChDirを行う前に【ChDrive "D" 】をしないと意味がありません。
申し訳ありませんが、もし初心者の方なら一つずつ命令の意味や作用を丁寧に理解しないと、無駄で雑で分かりにくいプログラムになってしまいます。
頑張って勉強して下さい。
ご回答ありがとうございます。私は、VBA初心者です。今まではマクロの記録を主な手段として使っていたため、どうしても無駄なコードが多くなりがちでした。これからもっと勉強して適切にプログラムできたらと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Excel(エクセル) エクセル2019でPDFファイル名に枝番号をつけたい。 アクティブワークシートを印刷した後の処理とし 4 2023/06/06 21:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコード件数の表示
-
Java初級 引数に適用できません
-
String.containsの反対機能はあ...
-
StringBufferからStringへキャ...
-
Google Apps Script で getRang...
-
javaに"search"という関数 or ...
-
動画の座標値をマウスクリック...
-
なぜprotected overrideなのか
-
Javaの関数名が長い?
-
メソッド宣言の戻り値の型にク...
-
JDBC Connectionを開放し続ける...
-
privateのメソッドをリフレクシ...
-
Java の配列の中身は volatile ...
-
クラスを作るとメソッドの数が...
-
readLine()ではじめから読み直...
-
abstract と static を一緒に付...
-
親の親のメソッドを呼ぶには?
-
overrides
-
C# 点の描き方をおしえてくだ...
-
C言語での文字列より値を抜き出す
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Java初級 引数に適用できません
-
public static void main (Stri...
-
レコード件数の表示
-
abstract と static を一緒に付...
-
なぜprotected overrideなのか
-
C# 点の描き方をおしえてくだ...
-
コマンドライン引数のチェック
-
String.containsの反対機能はあ...
-
Google Apps Script で getRang...
-
StringBufferからStringへキャ...
-
Java初心者です、エラーの意味...
-
javaに"search"という関数 or ...
-
C# でメソッドに送られてきたOb...
-
YYYYMMDD書式の日付に対する適...
-
メソッド宣言の戻り値の型にク...
-
return new使用時
-
readLine()ではじめから読み直...
-
シェルスクリプトからのJavaメ...
-
Fileの読み取り専用の解除
-
親の親のメソッドを呼ぶには?
おすすめ情報