• ベストアンサー

VBAについて教えてください。

パス、ファイル名、参照シート、セルを各変数に入れ、その後に指定のセルに 以下の様な出力結果を出力したいのですがどうしても上手く出来ません。 どうか力をお貸しください。 ちなみに下記の様なイメージで書き込みを試みたのですが、全然駄目でした、、、 PathName = \\Sample\ FileName = SampleFile.xls SheetName = SampleSheet Cell = !$I$19 ThisWorkbook.ActiveSheet.Cells(5, 2).Value _ = "= '& PathName & [FileName] & 参照シート'& Cell" ⇒駄目でした 出力結果(理想) ='\\Sample\[SampleFile.xls]SampleSheet'!$E$19 ⇒こう出したい。 宜しくお願い致します。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

>の「"'"」の部分がコンパイルエラーが出てしまいます。 >なぜでしょうか? >= "= '" & PathName & "[" & FileName & "]" & 参照シート& "'" 参照シートの後ろの&ですが、半角スペース記述漏れです。すみません。 変数の型宣言にも&があるために「参照シート&」という変数と扱われていて、「いきなり"'"が出ちゃだめよ」とエラーになってます。 本当にこういう値が代入されてますか?何か前段の処理がある? なんだか、前提とひどく値が異なってませんかね? > PathName = "C:\Users\pusuke\Desktop" > Filename = "Book2.xls" > SheetName = "Sheet1" > Cell = "!$B$4" いったん、式の組み立ては横に置いて、変数の中身を押さえてみませんか?

km10181107
質問者

お礼

大変参考になりました。 有難うございました。 >いったん、式の組み立ては横に置いて、変数の中身を押さえてみませんか? 横に並べて整理をしてみました。 PathNameの最後の「\」が抜けていたので誤動作の原因だったと思います。 他にも半角が余分に入っている処があり削除しました。 すると思う様に動作することが出来ました。 本当に有難う御座いました。 これでゆっくり寝れます。 参考までに完成したマクロを以下に示します。 Sub test() PathName = "C:\Users\pu-suke\Desktop\" Filename = "Book2.xlsx" SheetName = "Sheet1" Cell = "!$B$4" ThisWorkbook.ActiveSheet.Cells(5, 2).Formula = "='" & PathName & "[" & Filename & "]" & SheetName & "'" & Cell End Sub 本当に有難う御座いました。

その他の回答 (3)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.4

PathName と Filename を連結する際に PathName & ".\" & Filename とすると吉。

km10181107
質問者

お礼

ご親切にありがとうございます。 再度不明点がありましたら遠慮なく、質問させて頂きたいと思います。 では、失礼致します。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

#1ですが、「値」が御所望なんですね。 > = "= '& PathName & [FileName] & 参照シート'& Cell" > ⇒駄目でした = "= '" & PathName & "[" & FileName & "]" & 参照シート& "'" & Cell です。

km10181107
質問者

お礼

回答ありがとうございます。 本当に助かります。 また質問なのですが = "= '" & PathName & "[" & FileName & "]" & 参照シート& "'" & Cell の「"'"」の部分がコンパイルエラーが出てしまいます。 なぜでしょうか?

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> ThisWorkbook.ActiveSheet.Cells(5, 2).Value _ ではなくて ThisWorkbook.ActiveSheet.Cells(5, 2).Formula _ では?

km10181107
質問者

お礼

早々の回答本当にありがとうございます。 Sub test() PathName = "C:\Users\pusuke\Desktop" Filename = "Book2.xls" SheetName = "Sheet1" Cell = "!$B$4" ThisWorkbook.ActiveSheet.Cells(5, 2).Formula _ = "=" & PathName & Filename & SheetName & Cell End Sub というマクロを作成した結果 Cells(5, 2)のセルには以下の様になりました。 理由が全くわかりません。 原因はわかりますでしょうか?? ='C':\Users\pu'C:\Users\pusuke\Desktop\suke\[DesktopBook2.xlsSheet1]DesktopBook2'!$B$4

関連するQ&A

  • エクセル 関数の値を参照したい

    ファイル1.xls のsheet1の セルE5に =cell("filename") を格納すると セルE5 にファイル1.xls と表示されます。 ファイル2.xls のあるセルに =[ファイル1.xls sheet1]E5 を入力すると ファイル2.xls と表示されてしまいますが 値を参照して ファイル1.xls と表示させたい場合はどうしたらよいでしょうか?

  • VBA(マクロ)を使わずファイル名の数字のみ抽出

    ファイル名の抽出方法は、ググったらわかりましたが、ファイル名からの数字のみ抽出する方法は可能でしょうか? =MID(CELL("filename"),SEARCH("[",CELL("filename"))+1, SEARCH("]",CELL("filename"))-SEARCH("[",CELL("filename"))-5) =MID(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1))+1,FIND("]",CELL("filename",$A$1))-FIND("[",CELL("filename",$A$1))-5) 例: 123abc456.xls → 123456 sample123.xls → 123   マクロは考えていないです。よろしくお願いします。

  • ブックを開かずにデータ取得する

    ExecuteExcel4Macroを使いブックを開かずに別ブックのセル内容を 転記する下記のような制御を真似て書きましたが、別ブックにパスワードが設定してあるとセルの個数分パスワードを聞いてきます。 制御の中でパスワードを解除する方法はありますか。 Sub GetFromFile() Application.ScreenUpdating = False Dim FileName, CellName, PathName, SheetName, arg As String Dim result Dim I PathName = "C:\" FileName = "Book1.xls" SheetName = "Sheet1" For I = 1 To 5 CellName = Application.Choose(I, "A", "B", "C", "D", "E")    & "1" arg = "'" & PathName & "[" & FileName & "]" & SheetName     & "'!" & Range(CellName).Range("A1").Address(, , xlR1C1) result = ExecuteExcel4Macro(arg) Worksheets(1).Cells(1, I).Value = result Next End Sub

  • エクセルVBAの変数利用

    シートのC1セルに入力したブック名をアクティブにするための 変数なのですが、アクティブになりません。 下のようにしていますが、とのようにすればよいでしょうか? Sub test() Dim FileName As Range FileName = ThisWorkbook.Path & "\" & Sheets("sheet1").Range("C1") & ".xls" Workbooks.FileName.Activate End Sub

  • VBAの印刷について

    VBAでの質問です。 ある処理を施したあとにページ設定をして印刷するプログラムを作成しているのですが、なぜか同じものが2枚出力されてしまいます。 1枚だけ指定して印刷するにはどのようにコードを書けば良いかどなたか教えて下さい。お願いします。 With ActiveSheet.PageSetup 'ページ詳細設定 .PaperSize = xlPaperA4 .Zoom = False .FitToPagesTall = 1       .FitToPagesWide = 1     End With 'ActiveSheet.PrintOut Worksheets(sheetname5).PrintOut ActiveWorkbook.SaveAs Filename:=takiicode & "_" & Format(today, "yyyymmdd") & ".xls" '保存) Workbooks(takiicode & "_" & Format(today, "yyyymmdd") & ".xls").Close SaveChanges:=True '終了

  • Excel  VBAのマクロについて

    以下のようなマクロを作りました。 P4に開始番号P6に終わりの番号があるのですが、P4=P6、つまり、一つだけのシートを作成する分には問題なく動きます。しかしP4に1、P6に5と範囲を増やすとエラーが出て動きません。どこをなおしたらよろしいでしょうか? Option Explicit Sub 一括() Dim I As Worksheet Dim SheetName As String Dim Prompt As String Dim Col As Integer Dim Cell As Range Dim Row As Long Dim hani As Long For hani = Range("P4").Value To Range("P6").Value Set I = ActiveSheet SheetName = Cells(hani + 4, "K").Value & "(" & Cells(hani + 4, "B") & ")" Prompt = SheetName & "が存在します。" Sheets("基本シート").Copy After:=Sheets("基本シート") On Error GoTo 100 ActiveSheet.Name = SheetName On Error GoTo 0 Range("X3") = I.Cells(hani + 4, "B") Range("E8") = I.Cells(hani + 4, "C") Range("A13") = I.Cells(hani + 4, "D") For Col = 0 To 8 Step 4 Set Cell = I.Cells(hani + 4, "D").Offset(, Col) If Cell > 0 Then Prompt = "該当する日付がありません。" & Cell.Address On Error GoTo 100 Row = WorksheetFunction.Match(Cell, [A:A], 0) On Error GoTo 0 Cells(Row, "E") = I.Cells(hani + 4, "E").Offset(, Col) Cells(Row, "H") = I.Cells(hani + 4, "F").Offset(, Col) If Col < 8 Then Cells(Row, "Y") = I.Cells(hani + 4, "G").Offset(, Col) End If End If Next Col Next hani End 100 If Err <> 1004 Then Error Err End End If MsgBox Prompt, vbCritical Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True Sheets(1).Select End Sub

  • VBA ワークシートオブジェクトがうまく使えない

    以下のサブプロシージャ、動きません。 Sub main() Dim Thissheet As Worksheet Set Thissheet = ActiveSheet Workbooks.Open Filename:="Book2.xlsx" Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) Range("B1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 2) ActiveWindow.Close End Sub 機能:Book1.xlsxで上記マクロを起動すると、Book2.xlsxを開きセルの一部ををBook1にコピーし、閉じる エラーメッセージ: コンパイルエラー メソッドまたはデータ メンバーが見つかりません。 Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) この行のThissheet.で引っかかります。 ちなみにThissheetの代わりにWorksheets(1)を用いるとうまくいきます。 Thissheetを用いた場合、何がマズイのでしょうか? 以下の認識で書いてますが、誤りあるでしょうか? ThisWorkbook=マクロが納められているワークブック、つまりBook1.xlsx Activesheet= 行を実行した時にアクティブになっているワークシート、ここではBook1.xlsxのマクロ起動時のワークシート

  • VBA アクティブなセルのシート名を取得したい

    エクセル2010使用です。 VBAで、アクティブなセルのあるシート名を取得する方法を教えてください。  マクロ.xls (マクロシートA1) ←今回のマクロを書き込んだファイル  参照.xls (参照シートA1)  入力.xls (入力シートF3) この3つのエクセルファイルを開きます。 ( )内はそれぞれの前面にあるシート名と選択されたセルです。 入力シートのF3にカーソルをおいて下記マクロを実行すると   MsgBox ActiveSheet.Name & ActiveCell.Address 「マクロシート F3」と返されます・・・ ほしい結果は「入力シート F3」なんです。 このような場合にアクティブセルのあるシート名を取得する方法があれば教えてください。 よろしくお願いいたします。

  • VBAでエラーが出ます

    セルの値を変数に格納して、それをブック保存時に使いたいのですが上手くいきません。 Sub サンプルブック保存() Dim myfile As String myfile = workbooks("サンプル").Worksheets("sheet1").Cells(2, 9) workbooks.Add ActiveWorkbook.SaveAs Filename:="\\C:\フォルダ\" & myFile & ".xls" End Sub エラーメッセージは、 実行時エラー'1004': SaveAs'メソッドは失敗しました'_Workbook'オブジェクト と出ます。 非常に困ってます。 教えてくだされば幸いです。

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

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

専門家に質問してみよう