ここから質問投稿すると、最大4000ポイント当たる!!!! >>

Excel2016を使っております。

「データ」というフォルダ中に複数のフォルダが入っており、そのフォルダ名をG2セルに入力すると、入力したフォルダ名のフォルダに入っている全ファイルのデータをコピペするマクロを作りたいと思っています。
最初に「Const FolderPath As String = "D:\データ\" & Range("G2").Value」と書いて実行すると、「定義式が必要です。」とのコンパイルエラーが表示されて、valueに黄色のマーカーがついて動きが止まってしまいます。
変数の定義ができていないのかと思い「Dim FolderPath As String」と追記しても変わらずに止まってしまいます。

どのように書けばよいのか、ご教示願います。

A 回答 (4件)

以下のように2行に分けて書いてください。


Dim FolderPath As String
FolderPath = "D:\データ\" & Range("G2").Value

1行にかいてダメな理由は省略します。
    • good
    • 0
この回答へのお礼

ありがとうございます。
しかし、「Const FolderPath As String = "D:\データ\" & Range("G2").Value」を消した状態でその2行を書くとエラーにはならないもののファイルのコピペ等の処理が行われずに終了してしまい、消さずにその2行を追加すると同じく「定義式が必要です。」のエラーになってしまいました。
どこに問題があるのでしょうか。。

お礼日時:2018/01/26 10:21

こんにちは。


一応、VBAの場合は、定数(Const)と宣言してある部分に、変数(変化する値)を置いたら、VBAが通るはずがありませんね。

Dim i As Long
i = 1
× Const A = "abc" & i '←i は変数

Range("G2").Value これも変化する値ですね。いわば変数です。

"D:\データ\" これが定数(Const = constant value)
だから、私なら、
Const BASEFOLDER As String ="D:\データ\"
'-------------------------------------
Dim FolderPath As String
  FolderPath = BASEFOLDER & Range("G2").Value
  
などと書きます。
    • good
    • 0
この回答へのお礼

わかりやすく説明していただきありがとうございます。
理解できました。

お礼日時:2018/01/26 14:49

No2です。


>しかし、「Const FolderPath As String = "D:\データ\" & Range("G2").Value」を消した状態でその2行を書くとエラーにはならないもののファイルのコピペ等の処理が行われずに終了してしまい、

この場合、この2行以外の他の箇所に問題があり、前のエラーが取れたことにより、その問題が今、表にでてきたと考えられます。
マクロの全てを提示していただかないと、それに対する回答はできません。


>消さずにその2行を追加すると同じく「定義式が必要です。」のエラーになってしまいました。
どこに問題があるのでしょうか。。

その「Const FolderPath As String = "D:\データ\" & Range("G2").Value」を消してないので、そのエラーで最初に止まっている
状態です。この行は、消さないと前に進みません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
失礼いたしました。最初に回答していただいたとおりに書き換えると動きました。

お礼日時:2018/01/26 14:47

こんばんは!



G2セルのファイル名にはちゃんと拡張子まで含まれていますか?

開くファイルがExcel2007以降のファイルであれば
Const FolderPath As String = "D:\データ\" & Range("G2").Value&".xlsx"

としたらどうなりますか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
しかし、G2セルの値はファイル名ではなく、フォルダ名です。

お礼日時:2018/01/26 09:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QエクセルVBAでセルに入力したパスでブックを開く

Excel2013で、あるファイルを使用している時に、別のブックを開きたいとして、
例えば、D:\oshiete\Desktop\2014年\開きたい.xlsm
とT6セルにいれてあり、VBAを読み込むと開くようにするにはどうすればよいでしょうか?

はじめに、エラー回避でファイルが存在しているのと、まだ開いていないことを確認してから動かしたいです。 色々やってみたけどうまくいかなかったので、よろしくお願いいたします。

Aベストアンサー

>VBAを読み込むと開くようにする

すいません、ブックを開いたときに同時に開くではなく、
VBA読み込み時に開く場合は

VBEから、挿入→標準モジュールで標準モジュールを挿入し
以下のコードを貼り付けてください。
Alt+F8または表示→マクロから「指定ファイルを開く」を選び実行で
T6セルのファイルを開きます。

コードの内容はNo1と同じものですが、補足致します。
末尾「'★」は同様で、末尾「'☆」の行の「T6」を変更することで
対象のセルアドレスを変更できます。


■VBAコード

Sub 指定ファイルを開く()
Dim i As Integer
Dim filepath As String
filepath = Range("T6").Value '☆
If Dir(filepath) = "" Then
  MsgBox filepath & vbCrLf & "はファイルが見つかりません。" '★
  Exit Sub
End If
For i = 1 To Workbooks.Count
  If filepath = Workbooks(i).FullName Then
    MsgBox filepath & vbCrLf & "は既に開いています。" '★
    Exit Sub
  End If
Next i
Workbooks.Open Filename:=Range("T6").Value
End Sub

>VBAを読み込むと開くようにする

すいません、ブックを開いたときに同時に開くではなく、
VBA読み込み時に開く場合は

VBEから、挿入→標準モジュールで標準モジュールを挿入し
以下のコードを貼り付けてください。
Alt+F8または表示→マクロから「指定ファイルを開く」を選び実行で
T6セルのファイルを開きます。

コードの内容はNo1と同じものですが、補足致します。
末尾「'★」は同様で、末尾「'☆」の行の「T6」を変更することで
対象のセルアドレスを変更できます。


■VBAコード

Sub 指定ファイルを開く()
Di...続きを読む

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QExcelでセル内の文字をファイル名にする方法と、下のSheet1タブを2列にする方法は?

Excel2003です。OSはWinXPです。質問は2つです。

1.セル内の文字をファイル名にする方法は?
例えばA1セルに 1153 と入っていたら、ファイルの名前を付けて保存するとき、普通は Book1.xls となりますが、
これを 1153.xls とするにはどうしたらよいですか?

2.下のSheet1タブを2列にする方法は?
EXcelの下の方にシート切り替えがありますが、これを2列にするにはどうしたらよいですか?

Aベストアンサー

1は、前回の回答で間違いありませんが、もう少し詳しく処理方法を書きます。

(1)そのBookを開き、ツール→マクロ→新しいマクロの登録を選択。
(2)ダイアログボックスを確認、マクロ名(今回はMacro1のまま)を入力し、OK。
(3)そのBookを適当な名前(今回はBook1)で保存し、マクロの記録を終了。
(4)ツール→マクロ→マクロを選択、マクロ名を選択し、編集ボタンを押す。
すると、下記のようなモジュールが現れる。
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2006/8/29
'
ChDir "C:\Documents and Settings\管理者\保存するフォルダ○○"
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\管理者\保存するフォルダ○○\Book1.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
End Sub

ので、Filename:=の後の " から .xls" までを Range("A1") & ".xls" と変更する。

2については済みません。解りません。

1は、前回の回答で間違いありませんが、もう少し詳しく処理方法を書きます。

(1)そのBookを開き、ツール→マクロ→新しいマクロの登録を選択。
(2)ダイアログボックスを確認、マクロ名(今回はMacro1のまま)を入力し、OK。
(3)そのBookを適当な名前(今回はBook1)で保存し、マクロの記録を終了。
(4)ツール→マクロ→マクロを選択、マクロ名を選択し、編集ボタンを押す。
すると、下記のようなモジュールが現れる。
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qエクセルマクロで任意のファイル名をつけて保存したい

 エクセルVBAについての質問です。
 エクセルのマクロで、Aというファイルを開いて、そのうち必要なワークシートだけを抽出し、新しいブックに移動し、その新しいブックを新しいブックのsheet1のセルC2の文字列をファイル名として保存するようなマクロをくみたいと思っています。
 ファイルを開いて必要なワークシートだけを抽出し、新しいブックに移動するところまではできましたが、新しいブックのセルC2の文字列をファイル名として保存することができません。FNを変数として宣言して、C2の文字列を代入し、FNをファイル名として保存しようとすると、ファイルにFNという名前が付いてしまいます。どうすれば、C2の文字列をファイル名として保存できるのでしょうか。なお、保存するフォルダはc:\変換ファイル\6月です。どなたか教えてください。よろしくお願いします。

Aベストアンサー

FNを文字列として扱っていませんか?以下でどうでしょう?


Sub 保存()

Dim FN As String
FN = Range("C2")
ActiveWorkbook.SaveAs Filename:="C:\変換ファイル\6月\" & FN & ".xls"
End Sub

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q保存先のフォルダ名を指定したいとき

希望する事は
ファイルを保存するフォルダを指定し、
ファイル名(インプットボックスをつかって
変数として入力させたもの)をつけて保存したい。
フォルダは事前に作成してあるが
保存したい場所はそのときによってまちまちなので
保存するたびにフォルダを指定したい。


具体的には
C:\入力済みデータ\【○○】としたいのですが
この【○○】の部分を、そのときに応じて選択するにはどうすればいいでしょうか。

または、浅知恵で
Application.Dialogs(xlDialogSaveAs).Show arg1:="c:\"
というかたちでダイアログボックスを出すまでは出来たのですが
ファイル名は空欄になってしまいますよね。

InputBoxでファイル名を変数として入力させたものを
上のファイル名に入れることは可能ですか?

どうぞよろしくお願いします。

Aベストアンサー

これでできませんか?
まず条件どおり、C:\入力済みデータ の中にいくつかのフォルダを用意しました。
Excel 2003 を新規に立ち上げ、新規ワークブックに標準モジュールを挿入し、以下のコードを書き込んで実行しました。

Sub hoge()
Dim initPath As String
initPath = "C:\入力済みデータ"
Dim saveFilePath As String
saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xls),*.xls")
If Not (saveFilePath = "False") Then
ThisWorkbook.SaveAs saveFilePath
End If
End Sub

"ファイル名を指定して保存" のダイアログが表示され、初期フォルダとして C:\入力済みデータ が開かれています。
ファイル名は何も指定されていません。
ダイアログの中には当然、先に作っておいたいくつかのサブフォルダが一覧表示されているので、ユーザーは
1) サブフォルダを選択する。
2) ファイル名を入力する。
3) [保存] ボタンをクリックする。
というアクションを行う。

私のところではダイアログ表示時の初期フォルダとして My Documents ではなく、きちんと C:\入力済みデータ が開かれましたよ。

これでできませんか?
まず条件どおり、C:\入力済みデータ の中にいくつかのフォルダを用意しました。
Excel 2003 を新規に立ち上げ、新規ワークブックに標準モジュールを挿入し、以下のコードを書き込んで実行しました。

Sub hoge()
Dim initPath As String
initPath = "C:\入力済みデータ"
Dim saveFilePath As String
saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xls),*.xls")
If Not (saveFilePath = "False") Then
ThisWorkbook.SaveAs saveFilePath
End If
End Su...続きを読む

QExcelVBAでBookを開く時にファイル名の一部だけを指定で

VBA初心者です。
ExcelVBAで決まったフォルダーのファイルを開きたいのですが、ファイル名が固定した文字+日付になっているため、この固定した文字だけでこのファイルを開く方法を教えて下さい。このフォルダーには2つファイルがありますが、もう1つは全く違うファイル名です。

Aベストアンサー

> ワイルドカード"*"はどんな時に使えるのですか

Dir関数を使用時の"*" (アスタリスク) および "?" (疑問符) のワイルドカード文字については、
VBAのヘルプを参照し、特に「使用例」のコードを理解してください。

その他 VBAでの ワイルドカード使用に関しては、ヘルプで Like で検索して、
Like 演算子 を参照し、同じく「使用例」のコードを理解されたら宜しいかと思います。


> 通常のOPENメソッドでの> ファイル名指定では使えないと思うのですが。

Workbooks.Openメソッドの1番目の引数は、ファイルが特定出来るように指定する必要が
ありますので、当然 ワイルドカード文字は、使用出来ません。

殆ど、フルバスで指定します。 もし、パス名を省略すると カレントホルダ内のファイルを
指定したことになります。([メニュー]-->[オプション]-->[全般]タブの中で指定)

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qexcelマクロ、任意セルの値で名前を付けて任意のフォルダに保存

マクロの初心者ですが、どうか教えてください。
テンプレートブックを名前を付けて保存するマクロで
苦戦しております。
 ・ダイアログを必ず開く
 ・その時の保存先はz:\あああ
 ・ブック名はアクティブシートの任意のセルA1
---------------------------------------------
Application.Dialogs(xlDialogSaveAs).Show _
Arg1:=Range("A1").Value

ここまではたどり着けたのですが、ダイアログが
当初のテンプレートブックの保存場所が開いてしまいます。

どうぞよろしくお願いいたします。

Aベストアンサー

ふぅむ・・・
なんか説明がマズイようで、申し訳ない

まず、保存の部分は値さえ取れればOKとしまして、ダイアログにデフォルトセットされる部分についてのみです


デフォルトのフォルダを
"z:\■■受注書"
とします(セルZ1にセットしてある)

デフォルトファイル名を
"いいい.xls" 
とします(セルA1にセットしてある/ "いいい"のみでもOK)

MySavePath = Application.GetSaveAsFilename(Range("Z1").Value & "\" & Range("A1").Value, "Excel ファイル (*.xls), *.xls")

GetSaveAsFilenameに入れる値は、最初 "z:\■■受注書\いいい.xls" と言う事になります

本来保存したいところではないので、勘違いしますが、あくまでダイアログのデフォルトにセットする引数なので、問題ありません
上手く行かないようでしたら
これを試して下さい

MySavePath = Application.GetSaveAsFilename("z:\■■受注書\いいい", "Excel ファイル (*.xls), *.xls")

どこを Range("A1").Value と置き換えるかは・・・
まぁ見たままです
文字の連結には『&』を使います


Range("A1").Value = hogehoge としたのは、値がセットされていない事を考慮してです
デフォルトセットする値を取得するセルに、すでにフォルダ名やファイル名がセットされているのであれば、不要な部分です
コメントにして下さい

これで上手く行くと良いですがねぇ

ふぅむ・・・
なんか説明がマズイようで、申し訳ない

まず、保存の部分は値さえ取れればOKとしまして、ダイアログにデフォルトセットされる部分についてのみです


デフォルトのフォルダを
"z:\■■受注書"
とします(セルZ1にセットしてある)

デフォルトファイル名を
"いいい.xls" 
とします(セルA1にセットしてある/ "いいい"のみでもOK)

MySavePath = Application.GetSaveAsFilename(Range("Z1").Value & "\" & Range("A1").Value, "Excel ファイル (*.xls), *.xls")

GetSaveAsFilename...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング