お世話になっております。
「Book1.xlsx」、「Book2.xlsx」、「Book3.xlsx」の3つのワークブックを開く
マクロを作成しました。
ここまでは問題ないのですが、値の取得の関係上、
マウスポインターをSheet1のF1セルに合わせたいと思っています。
とりあえず、以下のマクロで、
最後に開いた「Book3.xlsx」のSheet1のF1に
マウスポインターを合わせてアクティブにしするところまで
出来たのですが、、、、。
2番目に開いた「Book2.xlsx」のF1に
マウスポインターを合わせてアクティブにする方法がわかりません。
すいませんが詳しい方、説明の上手な方、直接、コードで説明できる方、
「Book1.xlsx」、「Book2.xlsx」、「Book3.xlsx」の3つのワークブックを開いて
2番目に開けた「Book2.xlsx」のSheet1のF1セルにマウスポインターを合わせる方法を教えて下さい。
お手数ですが、よろしくお願いします。
追記
1)こちらの知識、実力が以下のコードのレベルです。
→なのですいませんがあまり高度なことはわかりません。
→コードは以下のものを流用して頂いても、オリジナルのものでもOKです。
2)変数の練習もかねております。なので、もしお手数でなければ
変数名は日本語にして頂けるとありがたいです。
※不可の場合は慣れた書き方でいいです。
3)便宜上、
「Book1.xlsx」、「Book2.xlsx」、「Book3.xlsx」の3つワークブックは
Cドライブの「A」フォルダーに入っているということでお願いします。
※ファイルパスは「C:\A」です
--------------------------
Sub Macro1()
Workbooks.Open "C:\A\Book1.xlsx"
Workbooks.Open "C:\A\Book2.xlsx"
Workbooks.Open "C:\A\Book3.xlsx"
MsgBox "開きました"
'ポインターをF1に移動する
Sheets("Sheet1").Select
Range("F1").Select
End Sub
No.7ベストアンサー
- 回答日時:
No4です。
>変数の宣言についてはSub Macro1()の上に書いても
>問題ないということでしょうか?
問題ありません。Sub Macro1()の上に書くと、そのモジュール内のどのプロシージャ(Macro2,Macro3等)
からでも、参照/設定が可能になります。
つまり、その変数をSub Macro1()以外でも使用したい場合は、Sub Macro1()の上に書きます。
ご解答ありがとうございます。
返答が遅くなりすいません。
>問題ありません。Sub Macro1()の上に書くと、そのモジュール内のどのプロシージャ(Macro2,Macro3等)
からでも、参照/設定が可能になります。
つまり、その変数をSub Macro1()以外でも使用したい場合は、Sub Macro1()の上に書きます。
こんな機能があったんですね。
知りませんでした。
今回はありがとうございます。
それと今まで、ご解答頂いた方のほうの「補足する」を
使ってませんでした。
ですが今後はこれも活用して、返答が遅れるetc.の
連絡がつくようにします。
今回はご解答頂きありがとうございました。
機会がありましたらまたお願いいたします。
No.5
- 回答日時:
No.2・3です。
とりあえず 田中・佐藤・田中 というExcelファイルでの操作にしてみました。
今回も2番目(佐藤Book)はF1セルを選択し上書き保存するようにしています。
Sub Sample3()
Dim k As Long, myPath As String, fN As String
Dim wS As Worksheet, myAry As Variant
myAry = Array("田中", "佐藤", "山田") '← 操作するファイルを増やす場合はここで追加する★//
Set wS = ThisWorkbook.Worksheets("Sheet1")
myPath = "C:\A" & "\"
For k = 0 To UBound(myAry)
fN = myAry(k) & ".xlsx"
Workbooks.Open myPath & fN
With ActiveWorkbook
wS.Cells(9 + k, "F") = .Worksheets("Sheet1").Range("F1")
If k = 1 Then '← Arrayは「0」からのスタートなので2番目(佐藤Book)は「1」となる。★//
.Worksheets("Sheet1").Range("F1").Select
.Save
End If
.Close
End With
Next k
End Sub
※ ファイル名は「Book田中.xlsx」ではなく、単に「田中.xlsx」のようになっているという前提です。
実際に「Book田中.xlsx」のようになっている場合は
コード内の
>fN = myAry(k) & ".xlsx"
を
>fN ="Book" & myAry(k) & ".xlsx"
に変更してください。m(_ _)m
図々しい質問なのに、ご解答頂き本当にありがとうございます。
'← 操作するファイルを増やす場合はここで追加する★//
myAry = Array("田中", "佐藤", "山田")
Set wS = ThisWorkbook.Worksheets("Sheet1")
実際に「Book田中.xlsx」のようになっている場合は
↓
>fN = myAry(k) & ".xlsx"を
>fN ="Book" & myAry(k) & ".xlsx"
に変更してください。m(_ _)m
こんな使い方をするんですね。
コメントまでつけて頂き本当にありがとうございます。
今回のことは前から思っていたので非常に参考になりました。
No.4さんのコードも読み返して、いろいろ確認したいので、
しばらく質問は開けておきます。いつもご解答ありがとうございます。
No.4
- 回答日時:
Book1.xlsx,Book2.xlsx,Book2.xlsxを開いて
Book2のsheet1のF1の内容をマクロのあるブックのsheet1のF10へセットするマクロです。
処理が完了後、Book1,2,3を閉じています。
尚、今回は、Book2をActivateしていますが、Book2をActivateにしなくても、コピーは可能です。
一般的には、
Workbooks("Book1").Sheets("Sheet1").Range("A1").value = Workbooks("Book2").Sheets("Sheet2").Range("A1").value
のようにします。
Book2をActivateにすると、そのメリットはセルのコピー時にBook2を書かなくてもよいということだけです。
① Workbooks("Book2.xlsx").Activate
② ThisWorkbook.Sheets("sheet1").Range("F10").Value = Worksheets("sheet1").Range("F1").Value
③ 'ThisWorkbook.Sheets("sheet1").Range("F10").Value = Workbooks("Book2.xlsx").Worksheets("sheet1").Range("F1").Value
①②をコメントにして③のコメントを外してください。Book2をActivateにしなくても③でコピーができることが
確認できます。
Public Const dirname はBook1,2,3が格納してあるフォルダです。(最後に\を付加してください)
-----------------------------------
Option Explicit
Public Const dirname As String = "C:\Users\xxxx\Documents\"
Public Sub TestOpen()
Workbooks.Open dirname & "Book1.xlsx"
Workbooks.Open dirname & "Book2.xlsx"
Workbooks.Open dirname & "Book3.xlsx"
Workbooks("Book2.xlsx").Activate
ThisWorkbook.Sheets("sheet1").Range("F10").Value = Worksheets("sheet1").Range("F1").Value
'ThisWorkbook.Sheets("sheet1").Range("F10").Value = Workbooks("Book2.xlsx").Worksheets("sheet1").Range("F1").Value
Workbooks("Book1.xlsx").Close
Workbooks("Book2.xlsx").Close
Workbooks("Book3.xlsx").Close
End Sub
ご解答ありがとうございます。お礼が遅くなりすいません。
すごくわかりやすいマクロで感謝してます。
「わかりやすい」=こちらのレベルに合っているということで
いつも質問の内容をよく読んでからご返答して頂いているので本当にありがたいです。
頂いたコードや前回のアドバイスを読み返してみたところ、
今回のコードでも不思議に思うことが1つあります。
それは
Public Const dirname As String = "C:\Users\xxxx\Documents\"
がプロシージャーの名前より上に記載されていることです。
通常、VBAのコードは
Sub Macro1()
~
End Sub
という形で、最初の「Sub Macro1()」より上に
コードを記載するとエラーが出る場合がほとんどです。
ところが、今回はエラーも出ませんし、
Option Explicit を削除しても動きます。
Public Const dirname As String = "C:\Users\xxxx\Documents\"
の意味は
dirname という変数が出てきたら
"C:\Users\xxxx\Documents\" と置き換えなさい。
という意味だと思います。
変数の宣言についてはSub Macro1()の上に書いても
問題ないということでしょうか?
追記
今回、初めてConstの意味を調べてみました。
Constステートメント
http://bit.ly/2jLDAEZ
こんな使い方をするんですね。
って、、、思うのですが、リンク先の使い方も
やっぱりConstステートメントが
Sub Macro1()
~
End Sub
の中にありますね。
変数の指定は変数を使う前なら、どこに記載しても良いということなのでしょうか?
No.3
- 回答日時:
No.2です。
投稿後にNo.1さんのお礼欄を拝見しました。
>1個目のワークブックからの値の取得 ※Sheet1のF1セル
>2個目のワークブックからの値の取得 ※Sheet1のF1セル
>3個目のワークブックからの値の取得 ※Sheet1のF1セル
>↓
>アクティブシートの
>Sheet1のF10、F11、F12への入力
>↓
>開いた「Book1.xlsx」、「Book2.xlsx」、「Book3.xlsx」を閉じる
>ということにトライしようと思っております。
コードを記載しているBookは「アクティブワークブック」とは言わず、
「This Workbook」となります。
(開いたブックが「アクティブワークブック」になります。)
それはさておいて・・・
Sub Sample2()
Dim k As Long, myPath As String, fN As String
Dim wS As Worksheet
Set wS = ThisWorkbook.Worksheets("Sheet1")
myPath = "C:\A" & "\"
For k = 1 To 3
fN = "Book" & k & ".xlsx"
Workbooks.Open myPath & fN
With ActiveWorkbook
wS.Cells(9 + k, "F") = .Worksheets("Sheet1").Range("F1")
If k = 2 Then
.Worksheets("Sheet1").Range("F1").Select
.Save
End If
.Close
End With
Next k
End Sub
こんな感じではどうでしょうか?m(_ _)m
いつもご解答ありがとうございます。
いつも本当にスゴイです。
fn:ファイルネーム
k:変数:1 To 3
ということだと思います。
ここまでは問題ありません。
ですが、、、実はここまで本格的な話になると思っていませんでした。
なので、Book1.xlsx、Book2.xlsx、Book3.xlsx、という名前は
今回の質問用に適当につけた名前です。
本当に使う名前はBook田中.xlsx、Book佐藤.xlsx、Book山本.xlsxの
ように「タイトル+担当者名」です。
前から思っていたのですが、tom04さんの変数名の付け方って
ファイル名に番号があった場合はいつも「+fN」でfNは数字(変数)でよね。
以前から聞こうと思っていたのですが、
「タイトル+担当者名」(担当者は3人以上)というパターンの名前の場合、
どういう処理をすればいいのでしょうか?
図々しいリクエストで大変申し訳ないのですが
もし、お手数でなければ同じ条件でワークブックの名前が
「Book田中.xlsx」「Book佐藤.xlsx」「Book山本.xlsx」の時もお願いします。
本当に図々しいリクエストですいません。
この件につきましては前から思っていましたし、こちらの業務では
このパターンのファイル名が多いので教えて頂ければ嬉しいです。
※ご面倒でしたらスルーでOKです。
No.2
- 回答日時:
こんばんは!
2番目に開いたBookのみSheet1のF1セルをアクティブにしておけばよいのですね?
一例です。
Bookは三つとも開いていないという前提です。
Sub Sample1()
Dim k As Long, myPath As String, fN As String
myPath = "C:\A" & "\"
For k = 1 To 3
fN = "Book" & k & ".xlsx"
Workbooks.Open myPath & fN
If k = 2 Then
ActiveWorkbook.Worksheets("Sheet1").Activate
Range("F1").Select
End If
Next k
End Sub
※ 変数名は「日本語」ではありませんが、
何となく判ってもらえると思います。m(_ _)m
No.1
- 回答日時:
>とりあえず、以下のマクロで、
>最後に開いた「Book3.xlsx」のSheet1のF1に
>マウスポインターを合わせてアクティブにしするところまで
>出来たのですが、、、、。
>2番目に開いた「Book2.xlsx」のF1に
>マウスポインターを合わせてアクティブにする方法がわかりません。
「Book3.xlsx」のSheet1のF1及び
「Book2.xlsx」のF1を同時にアクティブにすることは、できないと思いますが、いかがでしょうか。
ご解答ありがとうございます。
前回は丁寧なご説明ありがとうございました。
>「Book3.xlsx」のSheet1のF1及び
「Book2.xlsx」のF1を同時にアクティブにすることは、できないと思いますが、いかがでしょうか。
↓
こちらの説明がわかりにくくてすいません。
同時にアクティブにすることは出来ないです。
とりあえず2番目に開けた「Book2.xlsx」のSheet1のF1セルだけに
マウスポインターを合わせることが出来れば問題ないです。
ご解答頂きありがとうございます。
続きがございましたら、よろしくお願い致します。
追記A
1)可能でしたら、「Book2.xlsx」のSheet1のF1セルの値を取得して
アクティブのワークブックのSheet1のF10セルに
入力出来ればいいと思っております。
※「アクティブのワークブック」マクロの入った呼び出す側のワークブック。
→「Book1.xlsx」、「Book2.xlsx」、「Book3.xlsx」のワークブック以外です。
2)1個のワークブックからしか値を取得しないのにワークブックを3個開いたのは、
ワークブックの選択方法を知りたかったためです。
とりあえずこの質問が解決したら、
1個目のワークブックからの値の取得 ※Sheet1のF1セル
2個目のワークブックからの値の取得 ※Sheet1のF1セル
3個目のワークブックからの値の取得 ※Sheet1のF1セル
↓
アクティブシートの
Sheet1のF10、F11、F12への入力
↓
開いた「Book1.xlsx」、「Book2.xlsx」、「Book3.xlsx」を閉じる
ということにトライしようと思っております。
追記B
今、思い出したのですが、以前頂いた以下のマクロと少し似ています。
以下のマクロの時は本当にありがとうございました。
このマクロはカスタマイズして仕事で活用しております。
いつもご解答ありがとうございます。
【VBA】3個のワークブックから同時にシートをコピーしたい
https://oshiete.goo.ne.jp/qa/9476111.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Excel(エクセル) 【マクロ】PasteSpecialメソッドにて、コードが動かない理由が分かりません 2 2023/08/15 20:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel2007 色のカウント (VBA)
-
Excel内での検索結果をシート...
-
マクロを実行すると画像がズレ...
-
エクセルでの検索ボックスの作...
-
Excelでセルをクリックす...
-
【EXCEL】先週の月曜日の日付を...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
クリックすると文章が表示され...
-
現在のセルの位置を返す関数は...
-
アポストロフィーの一括挿入 ...
-
VBA 見つからなかった時の処理
-
エクセル シート保護された共...
-
ページ内ハイパーリンクの表示...
-
エクセルマクロ 赤色の文字を検...
-
excelのソルバーをVBAで複数行...
-
Excelで挿入した図をセルの中央...
-
セルがクリックされた回数をカ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
マクロを実行すると画像がズレ...
-
太字に設定されているセルの個...
-
Excelで、図形内の文字をセルに...
-
Excelで挿入した図をセルの中央...
-
フォントの色を指定して削除出...
-
Excel ハイパーリンクのURLを別...
-
エクセルでPDFリンクを大量...
-
エクセル 未入力セルがあると...
-
現在のセルの位置を返す関数は...
-
VBA 見つからなかった時の処理
-
EXCELのセルや文字色の反映
-
【EXCEL】先週の月曜日の日付を...
-
セルの値が変ると自動でマクロ...
-
エクセルでセルをダブルクリッ...
-
アポストロフィーの一括挿入 ...
おすすめ情報
No.4 tatsu99さんへ
いつも丁寧なご解答ありがとうございます。
前回の
【EXCEL-VBA】シートの有無を確認してからワークシートを削除したい
https://oshiete.goo.ne.jp/qa/9551164.html
と今回のご返答を確認して、自分で調べておきたいことがあります。
なので、すいませんがちょっと待って下さいね。
※明日、パソコン業務ではないので、もしかしたらご返答は夜以降かもしれません。
tom04さん、tatsu99さん
いつも丁寧なご解答ありがとうございます。
いろいろ教えて頂き、どちらもベストアンサーなのですが、
前回、
↓
【EXCEL-VBA】シートの有無を確認してからワークシートを削除したい
https://oshiete.goo.ne.jp/qa/9551164.html
で、tom04さんがベストアンサーだったので、
今回はtatsu99さんに譲らせて頂きます。
今回も丁寧なご解答を頂きありがとうございました。
変数の使い方のコツがだいぶわかりました。