[[20020528223921]] 『セルの内容を名前を付けて保存する方法を?』(まつでやす) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルの内容を名前を付けて保存する方法を?』(まつでやす)

外部データの取り込みでWEBクエリでWEBを参照して気象データを更新して時間ごとに

そのデータを保存したいのですがその方法を教えてください。データのセル内にその時間が

記述されているのでそのセルの内容を名前にできないでしょうか?

メニューバーから名前を保存する方法ではありません。コマンドで出来ないものでしょうか?

説明が下手で申し訳ありません。


 セルの内容から名前を作りたいのはわかりましたが、

 保存したい対象は、

 (1)特定のセルの内容ですか?

 (2)特定のセル範囲の内容ですか?

 (3)シートの内容ですか?

 (4)ブック全体ですか?

  (kazu)


(4)のブック全体を1時間ごとに保存したいです。  (まつでやす)

 お手数をおかけしますがお願いします。


 VBAを使う必要があります。今回はとりあえずセルの内容を名前にして、

 保存するところまで。(kazu)

 下のVBAをコピーして、[ツール]メニュー→[マクロ]→[VisualBasicEditor]を選択

 します。

 VBAの世界に入ったら[挿入]メニュー→[標準モジュール]を選択します。

 開いた白紙にVBAを貼り付けます。

 Excelワークシート側に戻って[ツール]メニュー→[マクロ]→[マクロ]で『USsave』を

 選択します。

 これでセルA1に入っている情報が保存ファイル名になります。

 fnamのところのCells(3,4)を変えるとセルD3の内容をファイル名にします。

 upathはWindowsXP用ですから、Windows98なら"C:\My Documents\"に変更します。

 Sub USSave()

 Dim fnam As String

     fnam = ActiveSheet.Cells(1, 1)

     upath = "C:\Documents and Settings\kazu\My Documents\"

     ActiveWorkbook.SaveAs Filename:= _

         upath & fnam, FileFormat:=xlNormal _

         , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _

         CreateBackup:=False

 End Sub


kazuさん、丁寧な説明に感謝します。ご説明いただいたように実行しましたら、セルの

情報がファイル名で保存されました。

私の環境は、Excel2000,Win Meです。

時間更新をwebクエリで1時間ごとに更新しています。この他にVBAで更新して、保存を

したほうがよいのか迷っています。ご教授お願いします。(まつでやす)


 最初から気にかかっていたのですが、Webクエリって何?。

 で調べました。ほぎゃ、こんなえぐい機能があったのですか。

http://www.microsoft.com/japan/users/200202/office/002.asp

 顔を洗って出直してきまーす。

 いろいろ調べてみましたが、VBAで動いているわけではないようです。

 したがって、1時間に一回データは取り込みますが、そのタイミングで

 何かをすることはできないと思われます。

 逆に、VBAで1時間に一回保存するようにもできますが、実行している間は

 他のアプリケーションを裏側で動かすことはできますが、

 少なくともExcelは全く使えなくなります。

 それと1時間に1回保存すると1日で24個のブックができます、1月で720個、

 1年で8640個です。それで使いやすいかが問題です。

 データを1時間で1行取っておくようにするのは無理ですか?

(kazu)


kazuさんの貴重なお時間をいろいろ調べていただきありがとうございます。

私自身、大変勉強になります。

kazuさんが言われるとおり、1時間、1行で行ったほうが見やすく、データ量も

少なくてすみますので、そのほうがいいですね。ご提案ありがとうございます。(まつでやす)


 もし1時間1行でVBAを使って、保存するにしても、その間マシンが使えなくなる

 問題が残ります。タスクを使って一定時間ごとに処理することも技術的には可能です、

 興味ありますか?

 (kazu)


 処理時間中,マシンが使えないのは,不都合ですので,タスク処理でできるのでしたら,

 お教え願います。(まつでやす)


 安全上からもお勧めできないのですが、やってみましょう。(kazu)

 (1)Excelブックの準備。

   Webクエリを使って特定のWebのテーブル情報を取り込むようにします。

   データを取り込むタイミングは『ブックを開くとき』

   下のVBAをExcelに組み込みます。

   このVBAを組み込むと、開かれたら30秒待ってExcelを保存して

    Excelを終了します。

   これが一番問題なのですが、ツールのマクロでセキュリティを[低]にします。

   それから、このブックを普通に開くとVBAが働いて、ブックの修正などが

   できなくなるので、SHIFTキーを押した状態でブックをダブルクリックして、

   開く必要があります。

 (2)Windowsのタスクにこのブックのショートカットをいれます。

   プロパティでタスクを動かすタイミングを設定します。

   WindowsXPではタスクを動かすのにユーザーとパスワードが必要でした。

   このへんはWindowsによって違うのですが、あなたのOSは何ですか?

 Option Explicit

 Sub auto_open()

 Dim newhour As Integer, newminute As Integer, newsecond As Integer

 Dim oldtime As Date, w As Object, wk As Integer

    oldtime = TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 30)

    Do

        DoEvents

        If oldtime < TimeSerial(Hour(Now()), Minute(Now()), Second(Now())) Then

            Exit Do

        End If

    Loop

    For Each w In Application.Workbooks

        w.Save

      Next w

     Application.Quit

 End Sub


大変お世話になっています。私のOSはWIN Meです。やはり、この辺りから難しく

なりますね。以前、教えていただいたUSSave()のブックとは別に、新しいブックにて、上記のVBAを組み込みExcelブックの準備はしました。タスクの設定でタスクのタイミングはどのくらいでいいのでしょうか?基本的なことかもしれませんがお願いします。

(まつでやす)


 WindowsMEですか、手元にWindowsMEのマシンがないので、具体的に説明できません

 が、スタートメニューのずーっと右端にある、タスクってわかりますか。

 (1)まづVBAを組み込んだ書類を手動で普通に起動して、データをとってきて、

   保存して、Excelが勝手に終わるのを確認します。

 (2)タスクの設定は自分が必要なデータしだいです、

   従って1時間に一回保存したければ1時間にします。

(kazu)


kazuさん言われたとおりにEXCELが勝手に終わるのを確認しました。タスク設定もとりあえず

動作確認のために10分ごとに起動するように設定しました。10分ごとにEXCELが立ち上がり焼く30秒で上書き保存がされてEXCELが閉じています。これでよろしいでしょうか?(まつでやす)


 これでOKです。

 あとは

  Loop

 の行の後ろつまり

  For Each w In Application.Workbooks

 の行の前に必要なデータをコピーする処理を追加したら終わりです。

 ブックを開くときSHIFTキーを押した状態で開いてください。(kazu)

 例)

 'Sheet1がWebクエリでデータを取り込むところ

 'Sheet2がデータを1行づつ記憶してゆくところです。

 'Sheet2のセルA1に『2』と数値を入れておいてください。

 'Dim のところにwk As Integerを追加しておいてください。

 wk = Sheets("Sheet2").Cells(1, 1)

 Sheets("Sheet2").Cells(1, 1) = wk + 1

 ' ↑ここをデータの書き込む位置のカウンタとします

 Sheets("Sheet2").Cells(Sheets("Sheet2").Cells(1, 1), 1) = Now()

 ' ↑ここに取り込んだ日付をセットします

 Sheets("Sheet2").Cells(Sheets("Sheet2").Cells(1, 1), 2) = Sheets("Sheet1").Cells(4, 5)

 ' ↑ここに取り込みたいデータの最初のものをセットします。Cells(4,5)はセルE4


kazuさんのおかげで,最初私が考えていたものより,はるかに良いものにして頂きました。

ありがとうございました。毎時間1つのブックで記録ができました。

長い時間お付き合いいただき感謝します。勉強になりました。また,お知恵を拝借させていただく機会もあると思いますのでよろしくおねがいします。(まつでやす)


 うまくいって、良かったです。

 最後に一言。Excelの[ツール]→[マクロ]→[セキュリティ]を[低]にしたので、

 そのマシンはきわめて無防備になっています、くれぐれも最新のヴィールスソフトで

 最新ウィルス定義でしっかり守ってください。以上。

 (kazu)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.