dポイントプレゼントキャンペーン実施中!

現在、マクロ初心者で勉強しながら、マクロを書いているのですが、うまくいきません。

内容は温度データの最大値が書かれているセルをマクロで検出し、それを参照先のExcelファイルは開かず別Excelファイルにコピペする方法を教えて欲しいです。

お手数ですが、具体的に教えていただけると幸いです。よろしくお願いいたします。

質問者からの補足コメント

  • 、やりたい内容は
    1. 参照先CSVファイルの24個の1時間ごとの温度データからマクロで最高温度のセルを検出する
    2. 参照元のデータまとめファイルに最高温度のみをマクロでコピペする
    上記の内容をできれば、参照先のファイルを開かずに行いたいが、できなければ、ファイルを開いて行いたい
    ※ 2.のコピペ(ファイル開いて)のマクロはわかっているのですが、1.の最高温度のみ検出するやり方がわかりません。

      補足日時:2021/12/12 11:03
  • ExecuteExcel4Macroというもので参照元、参照先ファイルのセルを指定してマクロを作ってみましたが、一般的なブックでは可能でしたが、CSVファイルではできませんでした。

    毎日の温度データにおいて最高温度を毎回MAX()という式を入力し計算して行っていて、効率化したいと考えています。

    マクロで最大値を計算してセルを検出することは可能なのでしょうか。

      補足日時:2021/12/12 11:27

A 回答 (6件)

No.1の者です。



直接の回答ではないかもしれませんが、Excelにマクロの記録の機能があります。
その機能を使って、質問者さんが操作すると、その操作した内容がコードに
なります。

https://excel-ubara.com/excelvba1/EXCELVBA303.html

例えば、マクロの記録開始 → csvファイルを開く → Max関数でMaxを
求める → 結果をコピペする → csvファイルを閉じる
上記の様な方法で良いと思うのですが。

因みに、参照先CSVファイルの24個の1時間ごとの温度データというのは、
どの様な感じのデータ群になるのでしょうか?
1日に24個の温度データができるcsvファイル:Max24個と決まっている。
若しくは、毎日続けて記録され、日時、温度とずっと増えていくデータ。

上記なら、セルの固定でMax関数で算出できるかと思います。
下記なら、やり方を考える必要があるかと思います。


>2. 参照元のデータまとめファイルに最高温度のみをマクロでコピペする
上記の内容をできれば、参照先のファイルを開かずに行いたいが、できなければ、ファイルを開いて行いたい
→推測ですが、若しかして、温度データが更新される時に、ファイルを開いた状態だと保存(更新)に失敗するから?という事でしょうか?
もし、そうなら、読み取り専用で開くという手もあるかと。

csvファイルを、Workbook.Openで、ReadOnlyの設定をTrueにして開く
と、読み取り専用としてcsvファイルがExcel形式で開けます。

https://www.sejuku.net/blog/34458
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
記録機能を使って、やりたい内容の大部分が出来ました。

お礼日時:2021/12/15 22:38

No.2です。



それぞれのファイルが正確にどんな形式なのかと言う情報が必要でしょう。
仮にともにCSVファイルだとしたら、個人的な経験だけですが(未熟ゆえ)取り出す事は可能ですね。(データがどのように保存されているかにもよりますが)
ただ書き込むってのは一度すべてのデータを取り出し、必要な箇所に書き足す?イメージになると思います。
例えるならWordで作成している時はコピペやカット&ペーストは作業できますが、それを紙に印刷した後だと切り貼りなどは手間と言うか綺麗には仕上がりにくいみたいな。

ExcelでCSVファイルを開けばセル単位にデータが入る書式かなと感じますので、開いた方が楽だと思いますよ。

https://oshiete.goo.ne.jp/qa/12709445.html
こちらの#3(回答者: fujillin さん)のご意見が参考になるかと。
あとはワークシート関数 : 変数 = WorksheetFunction.Max(Range(セル範囲)) で数式を都度入れる必要はなくなるかと。

その後のセルの検出って必要な事なのでしょうか?
必要であれば上記で取得した変数(の値)をFindメソッドで検索とかも。
    • good
    • 0

補足の2番目。



ADO等で接続してSQL文を書けば可能ですが、最近のEXCELならパワークエリもあるようです。

CSVファイルはExcelで開けますがあくまでもテキストファイルのたぐいですからね。
    • good
    • 0

何か参照先と参照元の表現が逆に感じるのは気のせい?



24個のデータならループで繰り返しながら比較したら良いかも。
ここは基礎段階なので今後もやるのなら、調べる作る試す書き直すを経験すると良い勉強となります。

でもコードの回答はBA 狙いで付くんでしょうね。
    • good
    • 0
この回答へのお礼

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

そうですね、自分で調べて試してやっていくのが一番良い気はします。調べてやってみてわからない場合はコードを教えてもらう等ですが、理解しながらやっていきたいです。

お礼日時:2021/12/12 12:01

>それを参照先のExcelファイルは開かず別Excelファイルにコピペする方法



基本的には無理でしょ。
まずどのようなシート構成になっているかでも変わるでしょうけど、開かずにデータを取り出す事は手段としてありますが、
・結合したセルの値
・セルの塗りつぶしや罫線などの装飾
・数式
は取得できないと思いますよ。
あくまでもCSVファイル形式で保存されるようなデータのみ。

それを逆にってなら尚更貼り付け先が例えば以前のデータの次にってなるなら、その以前のデータが存在している個所を探し回らないとならない。
その手間などを考えたら普通に開いてしまう方が良いかと。
---★
それとも参照先ってのは数式で参照したいBookの事ですか?
開かずにってならそのBookがどこに保存されているか、フルパスで指定すれば可能と思いますけど?
⇒セル範囲で指定可能かは検証してません。

https://ja.extendoffice.com/documents/excel/4226 …

ただし注意も必要かも
https://excel-ubara.com/excel3/EXCEL026.html

★あとはより具体的な情報次第でしょうね。
場合によってはPythonなど他の言語の方が可能性として考えられるかもですし。
    • good
    • 0
この回答へのお礼

コメントありがとうございます。

補足を書きましたので、回答していただけると嬉しいです。

お礼日時:2021/12/12 11:28

こんばんは。



直接の回答ではありませんが、ファイルを開かないで、コピーしたい理由は
何かあるのでしょうか?
基本は、ファイルを開いての操作の方が簡単だと思うのですが。。。
うまくいかないマクロを提示すると、詳しい方から回答が貰えるかと。

ブックの構成が良く分かりませんが、ブックは2つ、それとも3つ?
1,温度データの(最大値が)書かれているブック
2,参照先のExcelファイル これは開かない。
3,別Excelファイル

データがどのようになっているかが、説明がないですね。

下記は検索しただけですが、VBA EXCEL 開かずにデータ操作
https://oshiete.goo.ne.jp/qa/6428831.html
    • good
    • 0
この回答へのお礼

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

補足を書きましたのでご確認していただけると嬉しいです。

お礼日時:2021/12/12 11:29

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