AKB48の推しメンをセンターにできちゃうかもしれない!? >>

OS:Windows XP
Office:2003

複数のエクセルブックを開いている状態で、
ある任意のブックをアクティブにしてセルの操作(コピペなど)をしたいのですが、
"インデックスが有効範囲にありません"とエラーになってしまいます。

現在のソースは、

strFileName = "\\共有サーバー\共有\TEST.xls"

Windows(strFileName).Activate ←ここでエラーになる
Sheets("Sheet1").Select
Cells.Select
Selection.Copy

Windows("貼り付け先.xls").Activate
Sheets("Sheet1_n").Select
Cells.Select
ActiveSheet.Paste

です。

どこが悪いんでしょうか?
正しいコーディングを教えてください。

よろしくお願いします。

A 回答 (5件)

>Windows(strFileName).Activate ←ここでエラーになる



Windows("TEST.xls").Activate
ならOKでしょう。ファイル名を指定します。

この回答への補足

ご回答、ありがとうございます。

ファイル名は日々変わるので、
ダイレクトに指定することができないのです。

他に何か解決策はありますでしょうか?

補足日時:2008/03/18 21:26
    • good
    • 2

>ファイル名は日々変わるので、ダイレクトに指定することができないのです。



変化する条件(ファイルの選択のしかた)をプログラミングに出来るなら可能です。
    • good
    • 0
この回答へのお礼

前回はありがとうございました。

変化する条件(日付がYYYYMMDD形式)はプログラミングできています。
今回はフルパスを指定したのが間違いだったみたいですね。

ご回答、ありがとうございました。

お礼日時:2008/03/19 09:23

初めまして。


マクロの自動記録機能を使用すれば,宜しいのではないでしょうか。

もう一つの方法は,ユーザーホームを使って実行させる事も,出来るかと思います。
    • good
    • 1
この回答へのお礼

マクロ記録をしようすると、
ダイレクトにファイル名を指定してしまうんですよね、、、。

ユーザーホームは初耳です。
調べてみます。

ありがとうございました。

お礼日時:2008/03/19 09:22

いや、だから


strFileName = "TEST.xls"
Windows(strFileName).Activate
ということ。 
    • good
    • 0
この回答へのお礼

何度もすみません、
ファイル名だけで指定するとうまくいきました。

ありがとうございました。

お礼日時:2008/03/19 09:12

まずは、


strFileName = "EST.xls"
ファイル名に、パスは不要です。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございました。

パスを含めずフィル名だけの変数にて実行するとうまくいきました。

お礼日時:2008/03/19 09:11

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

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

このQ&Aを見た人が検索しているワード

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

QEXCELマクロで、開いてはいるがアクティブでないファイルをアクティブにする方法?

いつもこちらのサイトではお世話になっております。EXCELのマクロについて教えてください。

ファイルを2つ開いているとき、アクティブになっていないほうのファイル名を取得し、そのファイルをアクティブにしたいと考えています。

条件1)
アクティブにしたいファイル名は必ず「グラフ」で始まり、「.xls」で終わります。

条件2)
ファイルは2つともEXCELファイルです。



すみませんが、どうしてもやりかたが思いつかず、教えてください。

Aベストアンサー

#1です。

なるほど、こちらの認識不足でした。

If wb.Name <> ActiveWorkbook.Name Then

     ↓

If wb.Name <> ActiveWorkbook.Name And Windows(wb.Name).Visible Then

で、非表示ブックを対象外にします。

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

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

Aベストアンサー

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

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

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....続きを読む

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

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")

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

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QVBA:ワークブックを変数でActiveにしたいのですが・・

win98、エクセル2000を使用しています。
VBA初心者です。
前年のファイルのデータを次年度にコピーしたいのです。
変数を使って前年を動的に選択したいので、
わからないながら、下記のように書いてみました。
とりあえず、Workbooks.Open fNameまでは
作動するのですが、それぞれを交互にactiveに出来ません。
下記の記入自体にも自信はないのですが、
とりあえず→の部分にどのように書けばそれぞれを
activeにできるのでしょうか?
苦労しています。教えていただけると助かります。
お願いします。
・・・・・・・・・・・・・・・・・・・・・・・・・
Dim fName
Dim gName
fName = "c:\Windows\デスクトップ\日計表\" & ActiveSheet.Range("b2") & "年度.xls"
gName = "c:\Windows\デスクトップ\日計表\" & ActiveSheet.Range("d5") & "年度.xls"
Workbooks.Open fName
'6月・・・・・・・・・36
'→ここでgNameをactiveにしたい・・・・・・・・
Sheets("06月").Select
ActiveSheet.Unprotect
'→ここでfNameをactiveにしたい・・・・・・・・
Sheets("06月").Select
Range("C7:F36").Select
Selection.Copy
  ・
  ・
ちなみにファイル名はgNameは2005年度、fNameは2004年度で同じ日計表というホルダにあります。
  ・
・・・・・・・・・・・・・・・・・・・・・・・・・

win98、エクセル2000を使用しています。
VBA初心者です。
前年のファイルのデータを次年度にコピーしたいのです。
変数を使って前年を動的に選択したいので、
わからないながら、下記のように書いてみました。
とりあえず、Workbooks.Open fNameまでは
作動するのですが、それぞれを交互にactiveに出来ません。
下記の記入自体にも自信はないのですが、
とりあえず→の部分にどのように書けばそれぞれを
activeにできるのでしょうか?
苦労しています。教えていただけると助かります。
お願いします。
...続きを読む

Aベストアンサー

1)ファイル名で指定する方法・・・ブック名だけを保存する変数fName2、gName2を作成します。
Dim fName2 As String
Dim gName2 As String
fName2 = ActiveSheet.Range("b2") & "年度.xls"
gName2 = ActiveSheet.Range("d5") & "年度.xls"
としておけば、gNameとfNameを開いた後は、それぞれ

Workbooks(fName2).Activate
Workbooks(gName2).Activate

でそれぞれをActiveにできます。

2)ブックのインデクスを参照する方法
上の例ではgNameを開くコマンドが書かれていませんが、本来なら、開いた順に
インデックスが加算していきます。つまり、元々3つのブックが開いている状態で新たに
Workbooks.Open fName
としてブックfNameを開いた場合、このブックのインデックス番号は4となるわけです。
つまり最後に開いたブックのインデックス番号は現在開かれているブックの総数に等しい
ということです。したがって、
Workbooks.Open fName
Workbooks.Open gName
という順番でブックを開いていたとしたら、gNameをアクティブにしたい場合は、
Workbooks(Workbooks.Count).Activate となり、fNameをアクティブにしたい場合は
Workbooks(Workbooks.Count - 1).Activate となるわけです。


ここからが重要ですが、データ処理を行う際に毎度ブックを切り替える必要は
ありません。

Workbooks(Workbooks.Count - 1).Activate
Sheets("06月").Select
Range("C7:F36").Select
Selection.Copy

fName を Active にし、「06月」シートを選択し、セル範囲「C7:F36」を選択し、
最終的に選択されたものをコピーする。

それなら

Workbooks(Workbooks.Count - 1).Sheets("06月").Range("C7:F36").Copy

fName の 06月 シートのセル範囲 C7:F36 をコピーする。

の1行でまとまりますね。まとまるだけでなく、余計な動作がなくなるため
処理がずっと早くなりますよ。

1)ファイル名で指定する方法・・・ブック名だけを保存する変数fName2、gName2を作成します。
Dim fName2 As String
Dim gName2 As String
fName2 = ActiveSheet.Range("b2") & "年度.xls"
gName2 = ActiveSheet.Range("d5") & "年度.xls"
としておけば、gNameとfNameを開いた後は、それぞれ

Workbooks(fName2).Activate
Workbooks(gName2).Activate

でそれぞれをActiveにできます。

2)ブックのインデクスを参照する方法
上の例ではgNameを開くコマンドが書かれていませんが、本来なら、開いた順に...続きを読む

QVBAでワークブックの名前を変数にして開かせる?

最近VBAを勉強し始めたばかりです。 面白いですね…。

さて、恐らく基礎なんでしょうけれど、行き詰まっているので是非アドバイスをお願いします。
とりあえず、テキスト見ながら作ったマクロですがダメでした。
目的は対話型?で入力した名前のワークブックの名前を開かせるというものです。
Sub Macro1()
Dim mywbname As String
Dim mymsg As String, mytitle As String

myMgs = "開いて欲しいファイル名を入力してください"
mytitle = "ファイルを選択"
mywbname = Application.InputBox(Prompt:=myMgs, Title:=mytitle)

If mywbname <> "False" Then

Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"

End If

End Sub
なんてなものを作ったのですが、mywbnameを変数として受け取ってくれません。なのでそんなファイルはない…なんてことになっています。

構文自体の見直しも含めてアドバイスお願いします。
蛇足かもしれませんが、○○○のところは個人名が入ります。
C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"
の箇所のmywbnameを既存のファイル名にしてみるとMgsBoXに適当な文字さえ入れれば、そのファイルは開いたので問題なのはmywbnameを入力した名前に置き換えてくれない部分だと思うのですが、よろしくおねがいします。

最近VBAを勉強し始めたばかりです。 面白いですね…。

さて、恐らく基礎なんでしょうけれど、行き詰まっているので是非アドバイスをお願いします。
とりあえず、テキスト見ながら作ったマクロですがダメでした。
目的は対話型?で入力した名前のワークブックの名前を開かせるというものです。
Sub Macro1()
Dim mywbname As String
Dim mymsg As String, mytitle As String

myMgs = "開いて欲しいファイル名を入力してください"
mytitle = "ファイルを選択"
mywbname = Applicatio...続きを読む

Aベストアンサー

>問題なのはmywbnameを入力した名前に置き換えてくれない部分だと思うのですが
その通りです、変数と文字列の連結方法が間違っています
>Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"
Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\" & mywbname & ".xls"
とします
したのマクロを実行してみてください

Sub test()
Dim 変数 As String
変数 = "変数を""""でくくっていない"
MsgBox "こちらは変数を""""でくくった例です"
MsgBox "こちらは" & 変数 & "例です"
End Sub

違い分かりますか


修正したものを載せておきます

Sub Macro1()
Dim mywbname As String
Dim mymsg As String, mytitle As String

mymgs = "開いて欲しいファイル名を入力してください"
mytitle = "ファイルを選択"
mywbname = Application.InputBox(Prompt:=mymgs, Title:=mytitle)

If mywbname <> "" Then

Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\" & mywbname & ".xls"

End If

あと、InputBoxの未入力の戻り値は "False" では無く "" です
>If mywbname <> "False" Then
If mywbname <> "" Then

こんな所でしょうか

>問題なのはmywbnameを入力した名前に置き換えてくれない部分だと思うのですが
その通りです、変数と文字列の連結方法が間違っています
>Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"
Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\" & mywbname & ".xls"
とします
したのマクロを実行してみてください

Sub test()
Dim 変数 As String
変数 = "変数を""""でくくっていない"
MsgBox "こちらは変数を""""でくくった例です"
Msg...続きを読む

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

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

Aベストアンサー

こんにちは。

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

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


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

人気Q&Aランキング