Excel VBAを勉強中の者です。

複数のワークブックを開いているため、ワークブックから指定していってセルを選択したいと思い下記のようなコードにしてみたのですができませんでした。

Workbooks(“C:\フォルダ\ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select

このようなコードは有り得ないのでしょうか?
または、ワークブックを開いて、ワークシートをアクティブにして、セルを選択するというように、ひとつひとつ選択していくのではなく、一文でワークブックからセルまで指定する他の方法はありますでしょうか?

教えてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

No1,No2です。


Vlookup関数でも可能ですよ。
但し、後々のエラー処理(もし検索値が見つからなかったときなど)を考えると
Vlookup関数より Findで検索させる方法の方が楽です。
http://excelvba.pc-users.net/fol7/7_1.html
にFindメソッドの使い方がありますので参考にしてください。
ファイルが開いているかどうかなどの処理も必要になるでしょうが
Sub Search()
Dim Obj As Object
  With Workbooks("●●●.xls").Worksheets("▲▲▲")
Set Obj = .Range("B2:I200").Find(.Range("B1"), LookAt:=xlWhole)
If Obj Is Nothing Then
MsgBox .Range("B1") & "は見つかりませんでした"
Else
Workbooks("○○○.xls").Worksheets("△△△").Range("B1").Value=Obj.Offset(0,5).Value
End If
End With
End Sub
とかいったコードになります(検証はしていませんのでミスがあったらごめんなさいです)
あと多くのファイルにデータが分散する考え方も後々のフォロー(ファイル名が変更されたりなど)で
めんどくさいことに発展しますので一度検討されることをお勧めします。
コードを考えるのも慣れるまでは大変でしょうが、どうやって目的を達成するか(アルゴリズム)を思いつくと思わぬ解決があります。
例えば
Workbooks("●●●.xls").Worksheets("▲▲▲").Range("C1")セルにでも Vlookup関数を配置して
先に答えが出るようにしてけば 
Workbooks("●●●.xls")のファイルB1セルに値を入れた時点で エラーがわかると思いますし
コードの流れを
Workbooks("●●●.xls")を開いて C1セルの値を変数に格納
Workbooks("●●●.xls")を閉じる
Workbooks("○○○.xls")を開いて B1セルに 変数の値を入れる
Workbooks("○○○.xls")を閉じる
と簡単にセルに値を入れるだけにしてしまう方法などがあるでしょう。
    • good
    • 0
この回答へのお礼

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

確かに既に多くのファイルにデータが分散し、面倒なことになりつつあります。
中間にVlookup関数を配置してというのは最初に思い付いたのですが、フォローが大変になるかなと思いやめました。でも、エラーがわかり、コードもとてもシンプルにできるとは思いもしませんでした。

やってみるとすぐにできました。ありがとうございます。

勉強のため、Findメソッドでもやってみようと思います。
(1回書いてみたのですがエラーになってしましました(泣)。どうしてもできない場合は、また教えてください。よろしくお願いします)

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

お礼日時:2011/04/11 16:02

VBAを勉強中のものにはむつかしい。


(1)まず他シート参照を勉強すること
(2)ブックやシートのエクセルのオブジェクトの上下(包摂)関係を認識し理解し其れでオブジェクト変数で組み立てる方法をべんきょうしたらよい。
しかし近くにVBAを良く知っている人が居ないと、教えてもらうことなくて理解や、そういうことの関連問題に出くわすのは難しい。
たまたま見つかった私の控えていた例であげてみる(下記は採り上げたことに深い意味はない)。
他ブックは開いておくこと。
上位のオブジェクト(ブックの指定部分)+シートを特定する部分も出来るだけ記述して特定化してコードを書くことが当面良いのではないか。
そのうちコードは、段々オブジェクト名で置き換えたり、Withー End Withで書きたくなってくる。
Sub 入力()
Dim wk1 As Workbook
Dim wk2 As Workbook
Set wk1 = ActiveWorkbook
Set wk2 = Workbooks.Open("C:\Documents and Settings\XXXX\My Documents\ピボットMode.xls")
Dim LastRow As Long
With wk1.Worksheets("sheet2")
LastRow = wk1.Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row + 1
.Range("B" & LastRow).Value = wk2.Worksheets("sheet1").Range("B1").Value
.Range("C" & LastRow).Value = wk2.Worksheets("sheet1").Range("B3").Value
.Range("D" & LastRow).Value = wk2.Worksheets("sheet1").Range("B5").Value
.Range("E" & LastRow).Value = wk2.Worksheets("sheet1").Range("B7").Value
End With
End Sub

この回答への補足

詳しいご回答ありがとうございます。
確かに難しいようです。

目的は、他のワークブックにある一覧表から、品目で検索し、その数量を引っぱってきたいのです。
ワークシート関数ではなくVBAを使用する理由は、マクロを実行するまで数量を引っぱってきて欲しくないからです。
確かに上位のオブジェクト+シートも出来るだけ記述する方が、今の私にはわかりやすいです。
そこで、馴染みのあるワークシート関数のVLOOKUP関数をVBAに使用してできればいいなと思いました。

Workbooks("○○○.xls").Worksheets("△△△").Range("B1") = Application.WorksheetFunction.VLookup(Workbooks("○○○.xls").Worksheets("△△△").Range("B1"), Workbooks("●●●.xls").Worksheets("▲▲▲").Range("B2:I200"), 5, False)

しかし、エラーが出るためパスの部分が間違っているのかなと思い、単純なActivateやSelectでパスをどう記述すればあっているのかいろいろ試してみようと思いました。しかし、いろいろやっても再び同じエラーが出たため質問させて頂きました。まさかActivaになっていないワークブックのセルをSelectすること自体が無理とは思いませんでした。試しにもなっていませんでしたね。

上記目的に合うわかりやすい方法はありますでしょうか?よろしくお願いします。

補足日時:2011/04/10 10:39
    • good
    • 0

>実行すると「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。

」というエラーメッセ時が出てしまいます。なぜでしょうか?

失礼しました。文法的には問題ないですが
ActiveになっていないBookのセルを Select するのは無理ですね。
さて
Select した後に何をしたいのでしょか?
例えば そのセルに 10 という値を入れるというのであれば
Workbooks(“ワークブック.xls”).Worksheets(“C”).Range(“A1”).Value=10

例えば 現在ActiveになっているブックのSheets("c")のA1の値を入れるというのであれば
Workbooks(“ワークブック.xls”).Worksheets(“C”).Range(“A1”).Value=ThisWorkbook.Worksheets(“C”).Range(“A1”).Value
となるはずです。

どうしてもSelectしたければ
Workbooks(“ワークブック.xls”).Active
Worksheets(“C”).Range(“A1”).Select
となりますが、それがご希望の動作になりますでしょうか。
    • good
    • 0

Workbooks(“C:\フォルダ\ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select




Workbooks(“ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select

で十分です。
すでに開いているブックですので パスを指定する必要はないですね。

この回答への補足

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

実行すると「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」というエラーメッセ時が出てしまいます。なぜでしょうか?

また、他にワークブックから指定する方法はありますでしょうか?

補足日時:2011/04/09 18:47
    • good
    • 0

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

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

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

Q在宅ワーク(データショップ)

http://job.tcnsec.jp/work/work.html
ここなんですが、データショップ、で検索してもヒットしなかったので質問させてください。正直どう思われますか。
とりあえず資料請求してみようか、と思っていますが、何か情報お持ちの方おられましたらよろしくお願いします。

Aベストアンサー

>付属のプロテクターをパソコン本体のプリンターポートに取り付けます
見分けるコツというか最低限の事ですが
このようにプロテクターを売りつけるとか

後は
・特別な技術がいらないというものとか(初心者OKとある)
・ノルマがないとか
・報酬が高すぎるとか
・トレーニング(教材を買わせる)をさせるとか
・開始するのになにかしらのカネを請求するとか
・Webページ上に会社情報がないとか

QExcel2003 マクロ(VBA) どこにあるか分からないフォルダAのワークブックAを開く

いつもお世話になっております。

新しいマクロの記録でフォルダAのワークブックAを開きました。
ChDir "C:\フォルダA"
Workbooks.Open Filename:= _
"C:\フォルダA\ワークシートA.xls"

しかし、今はフォルダAがCドライブにありますが、
明日はデスクトップ上にあったり、フォルダBの中に入っていたりするかもしれません。

このような時、上記のようなVBAでは開けません。
どこにあるか分からないフォルダAのワークブックAを開くには
どこをどのように直せばよろしいのでしょうか?

以上、よろしくお願いいたします。

Aベストアンサー

こんばんは。

以下は、当たり前のことですが、同名ファイルは、1回きりしか開けません。ただ、すべてを検索してきます。その中で、同名なら、1回だけ開けられます。

なお、ワイルドカードは、あまり使わないほうがよいです。FileSearchオブジェクトは、MS-DOS・コマンドプロンプトとは違う法則になっていますので、独自のワイルドカードはかなりヘンな癖を持っています。また、一旦検索すると、そのキャッシュが残りますので、時間は、多少速くなるはずです。

なお、以下は、Windows のバージョンに多少影響を受けます。XP以上なら、問題ないと思ってよいです。


'標準モジュール設定

Sub TestFindFile()
Dim i As Long
Dim ret As Integer
'検索ファイル名
Const FNAME As String = "ワークシートA.xls"

 With Application.FileSearch
    .NewSearch
    'バス指定
    .LookIn = "C:\Documents and Settings\"
    .Filename = FNAME
    .SearchSubFolders = True
    .Execute
    If .FoundFiles.Count > 0 Then
    For i = 1 To .FoundFiles.Count
      ret = MsgBox(.FoundFiles.Count & " 個のファイルが見つかりました。" & vbCrLf & _
      .Filename & " を、" & vbCrLf & _
      Mid$(.FoundFiles(i), 1, InStrRev(.FoundFiles(i), "\")) & vbCrLf & _
      "で見つけました。" & vbCrLf & _
      .Filename & "をオープンしますか?", vbOKCancel)
      If ret = vbOK Then
       Workbooks.Open .FoundFiles(i)
       '一回きりしか開けません。
       Exit Sub
      End If
    Next
    Else
      MsgBox "対象ファイルはありませんでした"
    End If
  End With
End Sub

こんばんは。

以下は、当たり前のことですが、同名ファイルは、1回きりしか開けません。ただ、すべてを検索してきます。その中で、同名なら、1回だけ開けられます。

なお、ワイルドカードは、あまり使わないほうがよいです。FileSearchオブジェクトは、MS-DOS・コマンドプロンプトとは違う法則になっていますので、独自のワイルドカードはかなりヘンな癖を持っています。また、一旦検索すると、そのキャッシュが残りますので、時間は、多少速くなるはずです。

なお、以下は、Windows のバージョンに多少...続きを読む

Qエクセルのワークシートに表示された画像をフォトショップで開きたいのですが・・・

表題のとおりなのですが、エクセルのワークシートに画像があって、それをフォトショップで開いて加工したいと思っているのですが、可能でしょうか?
もし可能な場合は手順も教えていただけますと嬉しいです。ちなみにそのエクセルのドキュメントの拡張子は『.xls』になっています。どうぞよろしくお願い致します。

Aベストアンサー

私の理解が間違ってないのならこれでいけるかと。

(1)Excelのその画像を右クリック>コピー
(2)ペイントを開いて、貼り付け。ビットマップで保存
(3)このビットマップデータをPhotoshopで開く

画像の劣化を防ぐため、ペイントではビットマップで保存してください。

QExcel2000でファイルを複数開くと複数Excelが起動してしまう!!

御世話になっております。

エクスプローラからファイルをダブルクリックして
開くと開いたファイルの数だけExcelが起動して
しまいます。
Excelファイルを複数開いたときにExcelが一つの
ままで中でファイルを複数開きたいのです。
(SDIではなくMDIとして開きたい。)
理由は多数のファイルを開くとメモリ不足になって
しまい困っているからです。

回避方法を教えて下さい。

試したこととしては。。
Excelのオプションで表示タブで
「ウィンドウをタスクバーに表示」を
オフにしても回避できませんでした。

<環境>
1.OSはW2K
2.Excel2000
3.エクスプローラのファイルタイプ
拡張子「xls」のopenオプション
"C:\Program Files\Microsoft Office\Office\Excel.exe" "%1"
DDEを使うはオフ
(多少いじりましたが駄目でした)

以上

Aベストアンサー

こんにちは。maruru01です。

[アクションを実行するアプリケーション]の「"%1"」オプションを削除してはどうでしょうか?
私の環境(Windows2000、Excel2000)では、

[アクションを実行するアプリケーション]
:「"C:\Program Files\Microsoft Office\Office\EXCEL.EXE" /e」
[DDEを使う]:ON
[DDEメッセージ]:「[open("%1")]」

で、複数起動はしません。
ちなみに、タスクバーとは関係ないと思います。
(単独起動でも、ファイルごとにタスクバーにアイコンが出ますから。)

あと、参考になりそうなページも載せておきます。
(ページの下の方)

http://www.asahi-net.or.jp/~ef2o-inue/kankyo/sub02_03_02.html

参考URL:http://www.asahi-net.or.jp/~ef2o-inue/kankyo/sub02_03_02.html

Qワークグループが勝手にWORKGROUPに変わった

(a)LANの形態
ルータを用いて次の3台でLANを組んでいます。
(1)Windows 7 Ultimate 64 SP1 デスクトップ
(2)Windows 7 Ultimate 64 SP1 ノート
(3)Windows XP Professional SP3 デスクトップ
3台ともワークグループをfamilyにして快調にデータのやり取りをしていました。

(b)問題の発生
3カ月ほど前から(3)から(1)と(2)へアクセスできなくなりました。
(1)と(2)から(3)へはそれまでどおり問題なくアクセスできています。

(c)問題発生後の対策
原因が分からずほっておいたのですが、今日別のことをしていて気付いたのですが、(1)と(2)のワークグループがWORKGROUPに変わっていました。(3)のみはfamilyのままでした。

私を含め、家族のだれも、ワークグループをWORKGROUPに変更することは勿論していませんし、OSの再インストール、ルータの再セットアップ、システムの復元なども一切していません。ただ、(1)~(3)とも、WindowsUpdateのサイトにアクセスして「重要な更新プログラム」は何度かインストールしましたが、そんなことでワークグループがWORKGROUPになるなんてことはないですよね。

(d)質問
なぜ、2台ともワークグループがWORKGROUPになったのでしょうか。考えられる原因をお教えいただけないでしょうか。

もっとも、(3)から(1)と(2)へアクセスできなくなっただけで、(b)の問題の発生後も、(1)、(2)から(3)へは何の問題もなくアクセスできていたので、これも不思議と言えば不思議なんですが.....。

(a)LANの形態
ルータを用いて次の3台でLANを組んでいます。
(1)Windows 7 Ultimate 64 SP1 デスクトップ
(2)Windows 7 Ultimate 64 SP1 ノート
(3)Windows XP Professional SP3 デスクトップ
3台ともワークグループをfamilyにして快調にデータのやり取りをしていました。

(b)問題の発生
3カ月ほど前から(3)から(1)と(2)へアクセスできなくなりました。
(1)と(2)から(3)へはそれまでどおり問題なくアクセスできています。

(c)問題発生後の対策
原因が分からずほっておいたのですが、今日別のことをしていて気...続きを読む

Aベストアンサー

>(1)と(2)から(3)へはそれまでどおり問題なくアクセスできています。

 同じ Windows 7 の (1)と(2)どうしも、お互いにアクセス出来ていた
わけですね?


>そんなことでワークグループがWORKGROUPになるなんてことはないですよね。

 確証はありませんが、大いにあり得ることだと思います。

 当方、ワークグループ名では経験がありませんが、Windows Updateが
きっかけでシステム環境が変更されてしまったことは何度かあります。


>なぜ、2台ともワークグループがWORKGROUPになったのでしょうか。

 Windows 7 の、或いは更新プログラムのバグかも知れません。


>(b)の問題の発生後も、(1)、(2)から(3)へは何の問題もなくアクセス
>できていたので、これも不思議と言えば不思議なんですが.....。

 Windows 7 特有の「ホームグループ」や「ホームネットワーク」など
という何だかよく分からない仕様が関係しているような気がします。

【Windows7】ネットワークの場所の設定でどれを選択すればいい?
http://long-distance.jp/sb/log/eid81.html

 個人的には、「社内ネットワーク」を使った設定を推奨したいところ
です。

Windows Vista と 7 でファイル共有
http://oshiete.goo.ne.jp/qa/7202832.html

ネットワークの場所をあとから変更したい
http://www.frontier-k.co.jp/faq/12/004293.htm

ネットワークの場所(ホーム/社内/パブリック)を切り替えるには
http://pc.nikkeibp.co.jp/article/technique/20100803/1026694/

 因みに、オイラの場合、「パブリックネットワーク」などという何と
なくヤバそうな管理方法については、関知したことがありません。


 また、アクセス出来なくなった時期と Windows7 側のワークグループ
名が変わった時期が、タイミング的に同じかどうかという問題もあると
思います。
 Windows Updateに原因がある場合、WinXP 側が、Vista 以降自動的に
有効になっているネットワーク設定の TCP/IPv 6なるプロトコルに引き
ずられているのかも知れません。

Windows VistaのIPv6を無効にする
http://www.atmarkit.co.jp/fwin2k/win2ktips/949vistav6rm/vistav6rm.html


 それから、Windows 7 (1)(2)でご利用のセキュリティソフトの状況が
よく分かりませんが、一応そちらの設定も確認してみましょう。

参考URL:http://oshiete.goo.ne.jp/qa/6074853.html

>(1)と(2)から(3)へはそれまでどおり問題なくアクセスできています。

 同じ Windows 7 の (1)と(2)どうしも、お互いにアクセス出来ていた
わけですね?


>そんなことでワークグループがWORKGROUPになるなんてことはないですよね。

 確証はありませんが、大いにあり得ることだと思います。

 当方、ワークグループ名では経験がありませんが、Windows Updateが
きっかけでシステム環境が変更されてしまったことは何度かあります。


>なぜ、2台ともワークグループがWORKGROUPになったのでしょうか。

 Win...続きを読む

QVBA フォルダ内の複数Excelファイルを開く

お世話になります。

XP エクセル2003使用です。

フォルダー内にある複数のすべてのエクセルを開くコードを
下記の解答をそのままコピーして実行しました。
(以下、このエクセルファイルを「実行ファイル.xls」と呼びます)

http://oshiete.goo.ne.jp/qa/2598781.html
(コードは最後尾に転記(※))

問題点は、実行ファイル.xlsから実行した
開きたいエクセルファイルは、
Workbook_Open()で自動実行して、
最後に、ThisWorkbook.Closeで閉じるので、
マクロの実行がループの途中(1回目)で
実行ファイル.xls のコードの実行も終了してしますことです。
(実行ファイル.xls のファイルは開いたままです)

つまり、ThisWorkbook.Closeでエクセルを閉じたときに
マクロの実行までもが終わってしまうので、
実行ファイル.xlsに戻ってきません。

この問題を解決するための方法として
下記2点を調べましたが、力不足で自己解決できません。

---------------------
1 

実行ファイル.xls から開きたいエクセルファイルを開く時に
何かしらの命令文または引数を記述しておく。

 → 解決のヒントを見つけることができませんでした。


---------------------


実行ファイルをエクセルではなく、VBS(VBScript)で記述する。

この場合、参考にしたコードを、
VBS用に書き換えれば良いと思いますが、
VBSは記述したことがないので、さっぱりです。

方法として間違っていなければ、
できれば、どなた様か当該コードを
VBS用で記述いただけませんでしょうか?

---------------------

一番良い方法が分からないので、
お力添えいただきたいのです。

よろしくお願いします。


---------------------
(※)参考コード
---------------------

Sub OpenAllBooks()
  Dim FileName As String
  Dim OpenedBook As Workbook
  Dim IsBookOpen As Boolean
  
  FileName = Dir("*.xls")
  Do While FileName <> ""
    If FileName <> ThisWorkbook.Name Then
      IsBookOpen = False
      For Each OpenedBook In Workbooks
        If OpenedBook.Name = FileName Then
          IsBookOpen = True
          Exit For
        End If
      Next
      If IsBookOpen = False Then
        Workbooks.Open (FileName)  ←この処理の後に戻ってこれません
      End If
    End If
    FileName = Dir()
  Loop
End Sub

お世話になります。

XP エクセル2003使用です。

フォルダー内にある複数のすべてのエクセルを開くコードを
下記の解答をそのままコピーして実行しました。
(以下、このエクセルファイルを「実行ファイル.xls」と呼びます)

http://oshiete.goo.ne.jp/qa/2598781.html
(コードは最後尾に転記(※))

問題点は、実行ファイル.xlsから実行した
開きたいエクセルファイルは、
Workbook_Open()で自動実行して、
最後に、ThisWorkbook.Closeで閉じるので、
マクロの実行がループの途中(1回目)で
実行ファイル.xl...続きを読む

Aベストアンサー

こんにちは。

http://www016.upp.so-net.ne.jp/cheetah/xlvba/Excel/Workbook/Workbook06.html に書いてある方法はどうでしょうか。Application.EnableEvents をFalseにするとイベントプロシージャを無効にできるようです。

参考URL:http://www016.upp.so-net.ne.jp/cheetah/xlvba/Excel/Workbook/Workbook06.html

Qワークシート名を変数に格納する方法

VBA初心者です。ワークシートが5つあり各シートにデータを転記するマクロを作成したいのですがワークシート名を変数にしてループ処理することはできるのでしょうか?

下記はワークシート名"H"にだけ転記するマクロを作成してみましたがこの後がわからず悩んでいます。よろしくお願いします。

Dim データ行 As Integer
Dim cnt As Integer
Dim データ数 As Integer
cnt = 4
データ行 = Cells(Rows.Count, 8).End(xlUp).Row
For データ数 = 11 To データ行

  If Worksheets("入力").Cells(データ数,1).Value= "2"Then

Worksheets("H").Cells(cnt, 6).Value = Worksheets("入力").Cells(データ数, 8).Value
Worksheets("H").Cells(cnt, 7).Value = Worksheets("入力").Cells(データ数, 9).Value
Worksheets("H").Cells(cnt, 8).Value = Worksheets("入力").Cells(データ数, 27).Value
Worksheets("H").Cells(cnt, 9).Value = Worksheets("入力").Cells(データ数, 19).Value
Worksheets("H").Cells(cnt, 10).Value = Worksheets("入力").Cells(データ数, 20).Value
Worksheets("H").Cells(cnt, 11).Value = Worksheets("入力").Cells(データ数, 21).Value
Worksheets("H").Cells(cnt, 12).Value = Worksheets("入力").Cells(データ数, 10).Value
Worksheets("H").Cells(cnt, 13).Value = Worksheets("入力").Cells(データ数, 11).Value
Worksheets("H").Cells(cnt, 14).Value = Worksheets("入力").Cells(データ数, 22).Value
Worksheets("H").Cells(cnt, 15).Value = Worksheets("入力").Cells(データ数, 23).Value
cnt = cnt + 1


End If

Next データ数

VBA初心者です。ワークシートが5つあり各シートにデータを転記するマクロを作成したいのですがワークシート名を変数にしてループ処理することはできるのでしょうか?

下記はワークシート名"H"にだけ転記するマクロを作成してみましたがこの後がわからず悩んでいます。よろしくお願いします。

Dim データ行 As Integer
Dim cnt As Integer
Dim データ数 As Integer
cnt = 4
データ行 = Cells(Rows.Count, 8).End(xlUp).Row
For データ数 = 11 To データ行

  If Worksh...続きを読む

Aベストアンサー

> 説明不足でした。ワークシートが8個ありその内の5つを変数に格納したいのですがtargetSheetで対照とする方法もわかりません。お手数ですがよろしくお願いします。

であるならば、その状態や条件も提示していただかないと的確に回答できませんよ。

8個のシート中、5個の対象シートがどこにあるか決まっていない。or 決まっている。
5個の対象シートの名前には決まった位置に共通する文字があり、残り 3個のシートには無い。
とか、、、

対象 5シートの位置が一番左から 5つである場合は
For i = 1 to ThisWorkbook.Worksheets.Count
 Set targetSheet = ThisWorkbook.Worksheets(i)
 ' 処理いろいろ
Next

4番目から 5つであれば
For i = 4 To 8
 Set targetSheet = ThisWorkbook.Worksheets(i)
Next

対象シートのシート名の先頭が必ず "H-" で始まっており、対象外シートは別の文字から始まっているのであれば
For Each targetSheet In ThisWorkbook.Worksheets
 If Left(targetSheet.Name, 2) = "H-" Then
  ' 処理いろいろ
 End If
Next
とか

規則性がぜんぜん無いけれど 5シートの各名前が決まっているのなら、あらかじめ文字列型の配列に対象シートのシート名を入れておき、
For i = 0 To 4
 Set targetSheet = ThisWorkbook.Worksheets(targetNames(i))
Next
とか。
または 対象 5シートの名前を 9つめのシートのセル A1~A5 に書いておけるならば、そのセルの値を読み込んで targetSheet で参照させるとか。

ともかく情報が必要です。

> 説明不足でした。ワークシートが8個ありその内の5つを変数に格納したいのですがtargetSheetで対照とする方法もわかりません。お手数ですがよろしくお願いします。

であるならば、その状態や条件も提示していただかないと的確に回答できませんよ。

8個のシート中、5個の対象シートがどこにあるか決まっていない。or 決まっている。
5個の対象シートの名前には決まった位置に共通する文字があり、残り 3個のシートには無い。
とか、、、

対象 5シートの位置が一番左から 5つである場合は
For i = 1 to...続きを読む

QExcel VBA 違うxlsファイルの指定したシートを開く処理

Excel VBAで違うExcelファイルの指定したシートを開きたいのですが、
うまくいきません。現在のコードは、

*フォーム*
Private Sub CB1_Click()
Dim A As Integer
A = MsgBox("データ展開する?", 4, "データ展開?")
If A = 6 Then
INPORT.FILE_OPEN1
End If
End Sub

*INPORTモジュール*
Sub FILE_OPEN1()
 FILE_OPEN8
End Sub

Sub FILE_OPEN8()
Dim fnames As String
fnames = fnames1
Workbooks.Open Filename:=fnames
***ここでしょうか?.Sheet("")と指定しても出来ません***
End Sub

Function fnames1() As Variant
fnames1 = Application.GetOpenFilename( _
Title:="ファイルを開く", _
FILEFILTER:="エクセルファイル (*.xls), *.xls")
If fnames1 = False Then
MsgBox ("ファイルを開けませんでした。" & Chr$(13) & _
"もう一度やり直して下さい。")
End
End If
End Function


また、指定する事が出来たら、選択したシートを現在のブックにコピーもしたいのですが、どの様にすればよいでしょうか?
よろしくお願いします。

Excel VBAで違うExcelファイルの指定したシートを開きたいのですが、
うまくいきません。現在のコードは、

*フォーム*
Private Sub CB1_Click()
Dim A As Integer
A = MsgBox("データ展開する?", 4, "データ展開?")
If A = 6 Then
INPORT.FILE_OPEN1
End If
End Sub

*INPORTモジュール*
Sub FILE_OPEN1()
 FILE_OPEN8
End Sub

Sub FILE_OPEN8()
Dim fnames As String
fnames = fnames1
Workbooks.Open Filename:=fnames
***ここでしょうか?.Sheet("")と指定しても出来ませ...続きを読む

Aベストアンサー

こんにちは。

>エラーの内容は、
実行時エラー'1004';
>「アプリケーションの定義またはオブジェクト定義のエラーです。」

というのは、

With Workbooks.Open(Filename:=fnames)
'******************
 .Worksheets(1).Select '指定する
 'ボタンのあるシートにコピーする
 .Worksheets(1).Cells.Copy ThisWorkbook.ActiveSheet.Range("A1") 
 'ボタンのあるシートに戻る
 Application.Goto ThisWorkbook.ActiveSheet.Range("A1") 
End With

の ******* の部分に何か入って、アクティブブックが、「Workbooks.Open(Filename:=fnames)」と開いたブックでない場合に、そのような文言のエラーが発生します。

もし、必要とあれば、この2行をセットに使ってください。

 .Activate
 .Worksheets(1).Select '指定する

コピーするだけなら、単に、このコードだけで足ります。
 .Activate さえ必要ありません。

 .Worksheets(1).Cells.Copy ThisWorkbook.ActiveSheet.Range("A1") 

こんにちは。

>エラーの内容は、
実行時エラー'1004';
>「アプリケーションの定義またはオブジェクト定義のエラーです。」

というのは、

With Workbooks.Open(Filename:=fnames)
'******************
 .Worksheets(1).Select '指定する
 'ボタンのあるシートにコピーする
 .Worksheets(1).Cells.Copy ThisWorkbook.ActiveSheet.Range("A1") 
 'ボタンのあるシートに戻る
 Application.Goto ThisWorkbook.ActiveSheet.Range("A1") 
End With

の ******* の部分に何か入って、アクテ...続きを読む

QVBAですべてのワークシートを処理したい

ブック内の全ワークシートに対して同じ処理をするために、

For each ワークシート in Worksheets
~処理~
Next ワークシート

を使ってみたのですが、その時にアクティブになっているシートしか処理されません。たとえば次のようなシンプルなコードでも、同様です。何が抜けているのでしょうか。

Sub allworksheets()
Dim WS As Worksheet
For Each WS In Worksheets
Range("a1") = "123"
Next WS
End Sub

マクロの勉強を始めたばかりで、基本的なことでつまづいてます。よろしくお願い致します。

Aベストアンサー

せっかくオブジェクトをWSに代入しているのですから、
きちんと使ってあげましょう。

誤: Range("a1") = "123"

正: WS.Range("a1") = "123"

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ランキング

おすすめ情報