• ベストアンサー

記号

質問します。Excel VBAで下記のようなコードの中に, := こういう記号がでてきますが、 =とどう違うか。=ではエラーとなりますか。 NewBook.SaveAs Filename:=new_BOOKName

  • taktta
  • お礼率72% (1031/1430)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

根拠になる情報がみつからないので参考情報として考えてください。 := という書き方は、組み込みダイアログボックスなどで「名前付き引数」を指定する場合に利用します。   Application.Dialogs(xlDialogSaveAs).Show arg1:="Test1.xls" と指定すると、ファイル名に "Test1.xls" がセットされた「名前を付けて保存」ダイアログが表示されます。 なぜ := なのか、というのが推測になってしまいますが、単に = だと「変数への代入」の意味になってしまうからではないでしょうか。 変数へ値の代入を行うには、   変数 = 値 という書式でコードを書きます。 = の左辺に右辺を代入する、という処理ですね。 組込みダイアログボックスの引数も「代入する」という意味では同じですが、変数ではなく引数だから := を使う、、、と自分は考えています。 というよりも、組み込みダイアログで引数を利用する場合は := を使うものだ、という理解をしています。 なぜ := なのか、ではなくて := を使うのが正解、という理解ですね。 例えば VBA で変数を定義するには Dim を使い、As に続いて変数のデータ型を宣言します。   Dim 変数名 As データ型 普通はなんで Dim なのか、ではなくて Dim を使うものと理解しますね。 As が Is じゃダメなのか、とは考えません。 仮に考えたとしても、実際にそれをやってみて動作しなければ「あ、やっぱりダメなのね」と理解します。 それと同じに理解する...ということなのではないかなと。 > =ではエラーとなりますか。 実際にやってみてください。 手元の環境 (Excel 2003) で   Application.Dialogs(xlDialogSaveAs).Show arg1 = "Test1.xls" と指定して試してみたら、ファイル名には "FALSE" と表示されました。 手元の環境では、Option Explicit で変数の宣言を強制しているので、コードの実行前に "arg1" に対して「変数が定義されていません」というコンパイルエラーが出ました。 これはつまり、= だけで代入を行うとその左辺にあるのが変数だと判断されている (引数だと判断されていない) ということになります。 逆に、変数への代入に := を使うと、コードの記述段階でコンパイルエラー 「修正候補 : 式」が表示されます。 どちらも本来の使い方ではないので当たり前ではありますけど、「そういうもの」と理解する他ないのかなと思うんですが...。 でもこうした疑問は判っていても、検証してみるだけでもけっこう面白いですね。 自分は特に疑問も感じずに := を使っていましたが、そんな考え方もあるもんだ、と思いました。 というか、いろんな部分に関心を持って理解を深めようってスタイルは見習いたいです。

taktta
質問者

お礼

わかりました。たいへんていねいに有難うございました。 疑問解決しました。

関連するQ&A

  • VBAであるBOOKの「sample」というシートを別BOOKに

    VBAであるBOOKの「sample」というシートを別BOOKに 別Bookにコピーしたいのですが、 ネットを参考にして下記のようにするとエラーになります。 実行時エラー'9' 「インデックスが有効範囲にありません」 と表示されます。 どこが間違っているでしょうか? どなたか教えてください。 ---------------------------------------- Dim NewBook As Workbook Dim fName As String Set NewBook = Workbooks.Add fName = ThisWorkbook.Path & "cp.xls" NewBook.SaveAs Filename:=fName Workbooks("moto.xls").Sheets("ピッキング").Cells.Copy Workbooks(fName).Sheets("Sheet1").Paste Destination:=Cells(1, 1) '<---ここでエラー Workbooks(fName).Save ----------------------------------------

  • (Excel vba)ExcelシートをCSV保存する時、通貨記号を\にする方法

    セルの書式設定で通貨(記号は¥)を設定しているセルを含むexcelのシートをCSV形式に保存しようとしています。手作業でメニューの「ファイル」-「名前を付けて保存」をクリックし、ファイル形式をCSVにして保存した場合は通貨記号¥がついた金額が入っていて問題ありません。 次のようにvbaのSaveAsメソッドを使用した場合、通貨記号$のついた金額になってしまいます。 ActiveWorkbook.SaveAs Filename:=FCsvName, FileFormat:=xlCSV vbaで通貨記号を\にする方法を教えてください。環境はExcel2000・Windows98SEです。

  • マクロ シート別に名前をつけて保存したい

    1つのブックにシートが複数あり、それぞれシート毎に名前をつけて保存したいです。 質問を検索しましたら似たようなマクロを見つけたのですが、例えば1.2.3・・・というシートがあった場合、エクセル1、エクセル2、というような共通の言葉をつけて保存したい場合の方法を教えて下さい。 たぶんですが・・・下記のどこかにエクセルという言葉をいれるとできますでしょうか? Workbooks(2).SaveAs Filename:= _ SvPath & Workbooks(BookName).Sheets(SheetName).Name & ".xls", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False よろしくお願い致します。

  • ACCESS VBAで作成済のExcelのコピーを作りたい

    ACCESS VBAで作成済みのExcelファイル (複数シートがあります)の コピーを作成し そのファイルでテーブルのデータを 出力したいと思っています。 シートが1つならできましたが シートが複数あるとできません。 できる方法を教えてください。 なおシートが一つの場合は、下記でできました。 Dim oXLS As New Excel.Application Dim NewBook As Excel.Workbook oXLS.Workbooks.Open Filename:=既存ファイル名 oXLS.ActiveWorkbook.Sheets(シート名).Copy Set NewBook = oXLS.ActiveWorkbook oXLS.Workbooks(ファイル名).Close 複数シートがある場合の 作成方法を教えてください。 よろしくお願いします。

  • ExcelのマクロでCSVファイルを開くと遅いのですが

    ExcelのマクロでCSVファイルを開くと遅いのですが速く開く方法はありますか? 普通にファイル-開くに比べてかなり遅いです。 下記のVBAで記述してあります。 Workbooks.Open Filename:=fname ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlCSV, _ CreateBackup:=False ActiveWorkbook.Close savechanges:=False

  • エクセル(2003)変数について

    エクセル初心者です。会社で暇な時間に事務の効率化を目指してエクセルの勉強をしています。周囲にマクロ・VBAの分かる方がいないのでこちらで変数について質問させて下さい。 仮にAというBOOKがあったとして Aを開くとウィンドウが出て、そこに日付を入れるだけで(例:2013.7)ある型通りの新規ファイルを作るマクロを作成したいのです。 Aのシート1に2013年7月1日から平日のみを抽出したカレンダーが作成され 平日の日数(count)が別セルで定義され 平日のみ抽出され0701、0702と記入されたセルを新規BOOK(仮にBとします)のシート名に 日数分-3をBOOK Bのシート数にし Aのシート2に書かれた内容をBのシートに全てコピーされる、というコードを書きたいと思っています。 all aboutの記事(http://allabout.co.jp/gm/gc/297751/)を参照していたのですが、3Pめの変数の部分でコードが上手く書けなくなり質問させて頂きたいと思いました。 sub 新しいBOOK() dim bookname as string bookname=range("a2").value workbooks.add activeworkbook.saveas filename:="C:\"&bookname&".xls",fileformat:=_xlnormal, end sub のように記述したところ(実際のファイルはネットが繋がらないPCでやっているためコピペしていません。誤字があっても気になさらないで下さい;)、".xls"の部分で「コンパイルエラー」が出てしまいます。 どうにかして前に進みたいのですがいまいち分かりません。 原因は何なのでしょうか?

  • エクセルVBAで 名前を付けて保存の方法、もしくは・・・

    エクセルVBAで名前を付けて保存は、 SaveAsを使って・・・というのは、解っているのですが、 これだと指定した名前しか、保存できないですよね;; 自分的には、エクセルの名前を付けて保存を押すと出てくる、画面を出したいのです。 それか、とあるセルに入っている数字を利用して保存の名前にしたいのですが、どなたかわかる方宜しくお願いいたします。 (本当は下のほうのやり方が良いんですけどね;;) ActiveWorkbook.SaveAs FileName:= ("A1")"月分" 見たいな感じで VBAを打てたら良いのにな・・・と思っています;; 宜しくお願いいたします。

  • 【VB】【エクセル操作】 SaveAsでエラーが出てしまいます。

    VB6.0で作成したソフトの一部でエクセルを操作する箇所があります。 『新しいブックを作成して名前を付けて保存する』ところでエラーが出てしまいます。 Excel2007,2003では正常に動作するのですが、2000ではエラーが発生し強制終了されてしまいます。 '//////////////////////////////////////////////////////////// Private Sub EditExcelFile(FileName As String) Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add xlApp.Visible = True With xlBook .Application.DisplayAlerts = False .SaveAs (FileName) .Application.DisplayAlerts = True End With Set xlBook = Nothing Set xlApp = Nothing End Function '//////////////////////////////////////////////////////////// 上記コードの .SaveAs (FileName)の箇所でエラーがでます。 .SaveAs (FileName)をコメント文にすると2000でも正常に動作します。 FileNameは新しいブック名のパスが入ります。 2000でも正常に動作させるにはどのような処理を加えれば良いでしょうか? 宜しくお願い致します。

  • VBAでの " の使い方をお教え下さい

     ThisWorkbook.SaveAs Filename:="C:???.xlsm"(???はファイル名です)をVBAの式に直す方法をお教えください。なお、???はセルを参照することにしています。具体的にはRange("O1")です。  ThisWorkbook.SaveAs Filename:="""C:" & "Range(""O1"").xlsm"""とすると、ファイル名に : は使えないというエラーメッセージが出ました。  " の使い方が分かりづらく、悩んでいます。正しい使い方はどのように考えれば良いかも教えていただければ幸いです。よろしくお願いします。

  • 指定フォルダ内のファイルオープン→別フォルダに同じファイル名のcsvとして保存 のマクロを作ろうとしています

    エクセルで、指定フォルダ内のファイルオープン→別フォルダに同じファイル名のcsvとして保存 のマクロを作ろうとしています。 現在下記のようなマクロを途中まで作成したのですが、保存の良い方法が分からず困っております。 (ファイルオープンまでは出来ているようですが、その後エラーが出てしまいます) どなたかお知恵を拝借願えませんでしょうか。 どうぞ宜しくお願い致します。 Sub Book_Open() Dim BookName As String Dim PathName As String PathName = "C:\test_htmltocsv\test\" BookName = Dir(PathName & "*.html") Do Until BookName = "" Workbooks.Open PathName & BookName BookName = Dir() ActiveWorkbook.SaveAs "Sample.xls" ←← Loop End Sub

専門家に質問してみよう