出産前後の痔にはご注意!

エクセルでRSSよりリアルタイムに取得した(株価)を表示させています。
それを自動で5分ごとに自動でデータ蓄積させる方法はありませんか?

4行目のA列からCU列の50列ほどにデータをリアルタイムで取得しています。

その4行すべてを5分後に5行目にコピー
       10分後に6行目にコピー
   15分後に7行目にと連続して保存したいと思います。

終了は5時間後です。

   A列 B列 C列 D列 E列・・・CU列
-------------------------------------------
4行 10  5  30  40  50 ・・・ 80
--------------------------------------------
5行    5分後
6行   10分後
7行   15分後
: :
: :

いろいろなサイトで探して悪戦苦闘してるのですが、どれもうまくできずにいます。
VBA初心者です。

上記のような場合は、どのようにコードを書いたらいいでしょうか。
ご教示いただければありがたいです。
よろしくお願いいたします。

A 回答 (3件)

失礼しました。


Application.OnTime Now + TimeValue("00:00:15"), "Tset"
では15秒間隔ですね。
Application.OnTime Now + TimeValue("00:05:00"), "Tset"
でお確かめ。
    • good
    • 0
この回答へのお礼

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

勉強不足な質問に丁寧に対応して頂き感謝です。

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

お礼日時:2015/08/24 09:52

NO1です。


仮に
Sub Test()

Range("A4").Select
Dim 最終行 As Long

最終行 = Range("A4").End(xlDown).Row
Rows(4).copy
Rows(最終行).Insert

Range("A1").Select
Selection.ClearContents
End Sub

と、Subの後ろに Test と云う名前で記述してあるとします。

Sub 5分後に実行()
Application.OnTime Now + TimeValue("00:00:15"), "Tset"
End Sub

を実行すると、5分後に Testが実行されます。

Sub Test()

Range("A4").Select
Dim 最終行 As Long

最終行 = Range("A4").End(xlDown).Row
Rows(4).copy
Rows(最終行).Insert

Range("A1").Select
Selection.ClearContents

Application.OnTime Now + TimeValue("00:00:15"), "Tset"

End Sub
と最後に記述しても構いません。
エクセルを終了するまで、Test が5分間隔で実行されます。
    • good
    • 0

>エクセルでRSSよりリアルタイムに取得した(株価)を表示させています。


この部分は出来ているのでしょうか。
>その4行すべてを5分後に5行目にコピー
の部分ですがOnTiomeを使います。
http://www.officetanaka.net/excel/vba/tips/tips1 …
とか
https://msdn.microsoft.com/ja-jp/library/office/ …


にある
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"

あたりが参考になると思います。
    • good
    • 0
この回答へのお礼

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

下記コードで取得はできています。


Range("A4").Select
Dim 最終行 As Long

最終行 = Range("A4").End(xlDown).Row
Rows(4).copy
Rows(最終行).Insert

Range("A1").Select
Selection.ClearContents


ご回答いただいたサイトも参照しておりますが、
OnTimeの"my_Procedure"のプロシージャの意味が理解できずにいます。

お手数ですが、再度ご回答いただけるとありがたいです。

よろしくお願いいたします。

お礼日時:2015/08/22 13:59

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

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

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

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

Qエクセルで10分ごとの売り上げ個数を集計したいと思っています。

エクセルで10分ごとの売り上げ個数を集計したいと思っています。
データは次のような感じです。
15:13 2
15:15 1
15:15 2
15:17 1
15:19 4
営業時間内の売り上げがあった時間と、そのときの販売個数がお客さんごとに記録されているのですが、このデータを使って10分ごとの客数と販売個数を集計したいと思っています。どのような関数を使えばいいのでしょうか?

上記の5つのデータだと
15:10~15:20の客数(データ数)は5、販売個数は10(2+1+2+1+4)というのを出したいです。

わかる方いたらお教えいただけないでしょうか?

Aベストアンサー

作業列としてC列を使います
 C1 =ROUNDUP(A1*144,0)/144
 下にコピー

E列に集計範囲を..
F列に
 F1 =SUMIF(C$1:C$13,E1,B$1:B$13)
 下にコピー

で、どうでしょう

QエクセルでVBAを使用して1分毎にファイルを保存するプログラムを書きた

エクセルでVBAを使用して1分毎にファイルを保存するプログラムを書きたいのですが、
よくわかりません。

常に上書き保存をするようにしたいと思っています。
どなたか教えてくださいm(__)m

Aベストアンサー

Sub Hozon()
ActiveWorkbook.Save
Application.OnTime Now + TimeValue("00:01:00"), "Hozon"
End Sub

これを最初に一度実行すれば、あとは1分ごとに自動的に呼び出されます。
標準モジュールに書いてください。

Qエクセルで定期的(30分おき)にマクロを実行させる方法は?

エクセルにて刻一刻変る外部データ(株価)を表示させています。それを自動で30分置きにデータ蓄積させる方法はありませんか?

現在は自分で作ったキーボードマクロで 時計を見ながらボタンを押し、データを取り込ん出る始末です。

その簡単マクロに「30分置きに実行させる」と云う記述を付け足す程度で自動実行させる事は可能でしょうか? 
当方キーボードマクロでの自動書き込みしか出来ない素人ですが、少々複雑な物であっても頑張ってみるつもりですので、どなたかご教授下さい。

Aベストアンサー

えーー。。実際に使うなら、zap35 さんのように、OnTime で実行したマクロ
の中で再度 OnTime を登録する方が良いと思います。

この方式だと、OnTime で登録されるのは常に一つだから管理し易いです。
これに未実行の予約を破棄できる仕組みを組み込めばベストだと思います。

今更こんな事言うのは、#6 の大げさなコードを見て、「また、やっちまった...」
と反省しているからです。が、#6 をアップしてしまった以上、それなりに
まとめておきました。こちらは、一括登録方式です。

コードのままだと、午前10時~午後6時まで30分間隔で Macro1 を実行します。
変更点は、

 ・ブッククローズをトラップした
 ・進捗状況をステータスバーに表示するようにした
 ・その他しょうもないこと

です。

このままコピペで使えると思いますが、試される場合は、MACRO1 はご自分の
用途に合わせて適切に修正して下さい。


Option Explicit

Dim mcolTask As Collection

Sub 実行予約()

  Dim i      As Date
  Dim strProcName As String
  Dim datBigin  As Date
  Dim datEnd   As Date
  Dim datInterval As Date
  Dim datTimeout As Date
  Dim blnJustTime As Boolean

  ' Setting-------------------------------------------------------

  datBigin = TimeValue("10:00:00")  ' 開始時刻
  datEnd = TimeValue("18:00:00")   ' 終了時刻
  datInterval = TimeValue("00:30:00") ' 実行間隔(少なくとも数秒以上で)
  datTimeout = TimeValue("00:02:00") ' 実行待機タイムアウト
  blnJustTime = True         ' datInterval で丸めるか
  strProcName = "MACRO1"       ' 実行するマクロ名

  '---------------------------------------------------------------

  ' 既に実行予約されているか確認
  If mcolTask Is Nothing Then

    ' 日付シリアル値を加算
    datBigin = datBigin + Date
    datEnd = datEnd + Date
    ' 終了時刻が開始時刻より小さければ日をまたぐので補正
    If datEnd < datBigin Then datEnd = datEnd + 1
    ' 現在時刻が既に終了時刻を過ぎている場合
    If datEnd < Now() Then
      MsgBox "終了時刻を過ぎているため予約できません。", vbCritical, "終了"
      Exit Sub
    End If
    ' 現在時刻が開始時刻を過ぎていれば補正
    If datBigin < Now() Then
      ' 開始時刻を datInterval で指定された値で丸めるか
      If blnJustTime Then
        datBigin = Application.Floor(Now() + datInterval, datInterval)
      Else
        datBigin = Now() + datInterval
      End If
    End If

    ' 初期化
    Set mcolTask = New Collection

    ' メイン部分
    For i = datBigin To datEnd Step datInterval
      ' 後から取り消せるようにコレクションに退避
      mcolTask.Add CStr(i) & "," & strProcName
      ' Application.Ontime で実行予約を行う
      Application.OnTime EarliestTime:=i, _
                Procedure:=strProcName, _
                LatestTime:=i + datTimeout, _
                Schedule:=True
    Next i
  Else
    MsgBox "既に実行中です", vbInformation
  End If

End Sub

Sub 未実行予約強制解除()
 
  Dim i  As Long
  Dim vntS As Variant
 
  On Error Resume Next
  Application.StatusBar = "タスク破棄中... "
  For i = 1 To mcolTask.Count
    vntS = Split(mcolTask.Item(i), ",")
    Application.OnTime CDate(vntS(0)), CStr(vntS(1)), Schedule:=False
  Next i
  Application.StatusBar = ""
  Set mcolTask = Nothing

End Sub

' タスク管理用
Private Sub RemoveTask()
  
  On Error Resume Next
  mcolTask.Remove (1)
  Application.StatusBar = "待機中のタスク... " & mcolTask.Count
  DoEvents
  Beep
  If mcolTask.Count = 0 Then
    Application.StatusBar = ""
    Set mcolTask = Nothing
  End If

End Sub

Sub Auto_Close()

  Dim intRes As Integer
  If Not mcolTask Is Nothing Then
    intRes = MsgBox( _
        Prompt:="待機中のタスクが " & mcolTask.Count & " 件あります。" & vbLf _
           & "破棄して終了しますか?", _
        Buttons:=vbOKCancel + vbDefaultButton2 + vbExclamation, _
        Title:="問い合わせ")
    If intRes = vbOK Then
      Call 未実行予約強制解除
    Else
      ' ブッククローズをキャンセル
      Application.ExecuteExcel4Macro ("Halt(True)")
    End If
  End If

End Sub

' 呼び出すマクロ--> Application.Ontime のマクロ名と一致させて下さい
Sub MACRO1()

  Dim lngRow As Long
  With ThisWorkbook.Sheets("Sheet1")
    lngRow = .Range("V65536").End(xlUp).Offset(1).Row
    .Cells(lngRow, "V").Resize(1, 3).Value = .Range("Q12:S12").Value
    .Cells(lngRow, "Y").Value = Now()
  End With

  ' ご自分のマクロの最後に次の一行を追加しておいて下さい
  Call RemoveTask

End Sub

えーー。。実際に使うなら、zap35 さんのように、OnTime で実行したマクロ
の中で再度 OnTime を登録する方が良いと思います。

この方式だと、OnTime で登録されるのは常に一つだから管理し易いです。
これに未実行の予約を破棄できる仕組みを組み込めばベストだと思います。

今更こんな事言うのは、#6 の大げさなコードを見て、「また、やっちまった...」
と反省しているからです。が、#6 をアップしてしまった以上、それなりに
まとめておきました。こちらは、一括登録方式です。

コードのままだと...続きを読む

QEXCEL20001分ごとのデータを抽出したい

お世話になっておりますm(__)m(このごろは頻繁に(^^ゞ)
タイトルどおり、1分ごとのデータを抽出したいのです。
データは次のようになっています。
A列1行目から縦に日付です。
2002/1/1
2002/1/1
2002/1/1
2002/1/1
2002/1/1
2002/1/1
上記のように同じ日付がずーっとつづいています
B列1行目から縦に時間です。
0:30:04
0:30:06
0:30:08
0:30:10
0:30:12
0:30:14
0:30:16



上記のように2秒ごとにデータがあるのです。
ただし、C列にもその日付と時間に対応したデータがあります。
2秒ごとにデータがあるのですが、
それを1分ごとのデータを抽出したいのです。
どうにかこうにかしてできないものでしょうか?
関数とかでできるでしょうか?
VBAとかはぜんぜんやったことがないので、
もしそれをつかわなければ出来ない場合は、
詳しく説明してくださればうれしいです(涙

Aベストアンサー

D列に秒が入っているわけですよね。D列の▼をつまんで、「0」を選択してください。秒が0秒のものだけが表示されます。

あと、もう少しです。がんばってください。

QエクセルVBAにおけるON TIMEメソッドの解除方法について

こんにちは。現在エクセルでフォームを使用したVBAマクロを作成中です。
内容はフォーム内のテキストボックスに制限時間を設けて文字入力を行ってもらうものです。

Sub テスト()

do until
 ・
 ・
call timeup
loop

End Sub

Sub timeup()
dim timekp as integer
'テストの開始時間をキープ

'Application.OnTime timekp + TimeValue("1:00:00"),"endform"
'1時間経過後終了を促すフォームを表示する

End Sub

Sub endform()

load userform1
userform1.show
'エクセル終了のコマンドボタンがついているフォームを表示する

End Sub

マクロは大まかに記述しましたが以上のようにすると、一度はマクロの作成が成功したように終了するのですが、ブックを開けたままでいると1時間後に自動的にuserform1が表示されてしまいます。また、ブックを閉じていても自動的にオープンし、(マクロを有効にする)をONにするとデバック状態となります。
変数のtimekpを初期化する事で凌げると思ったのですが、うまくいきません。
以前マクロのヘルプを操作している時にON TIMEメソッドを解除する方法が掲載されていたように思うのですが、探し方がマズイのか見つけられませんでした。
マクロの記述方法がマズイのでしょうか?ON TIMEメソッドを解除しない限り、いつまでもこのメソッドは効力を発揮するのでしょうか?
また、ON TIMEメソッドを解除できるメソッドや良い解決方法がありましたら入門書等を片手にマクロを作成している素人にご教授の程お願い致します。

こんにちは。現在エクセルでフォームを使用したVBAマクロを作成中です。
内容はフォーム内のテキストボックスに制限時間を設けて文字入力を行ってもらうものです。

Sub テスト()

do until
 ・
 ・
call timeup
loop

End Sub

Sub timeup()
dim timekp as integer
'テストの開始時間をキープ

'Application.OnTime timekp + TimeValue("1:00:00"),"endform"
'1時間経過後終了を促すフォームを表示する

End Sub

Sub endform()

load userform1
userform1.show
'エクセル終了のコマ...続きを読む

Aベストアンサー

>ON TIMEメソッドを解除
OnTimeのヘルプはごらんになられましたか?
expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

Schedule にfalseを設定することで、直前の実行指定を解除することができます。
具体的には
Application.OnTime timekp + TimeValue("1:00:00"),"endform",,false
とでもすればいいです。

QExcelによるある一定間隔内の数値集計とグラフ化について

よろしくお願いします。
Excel2003(OS:Windows XP Professional)についての質問です。

サンプルのように、ある時刻に目の前を通った人の人数をカウント
したとします。
例えば10分間隔に区切って人数を集計(*)し、縦軸を人数、横軸を時間
として折れ線グラフ化したいと思います。
どのように工夫すればより効率よくできるでしょうか。
 *例:9:00~9:10 であれば、集計値は「4」。
なお、サンプルは微量ですが、実際には膨大な量のデータです。
また、判りやすくするために、人をカウントしていますが、
実際は全くことなるデータについて集計とグラフ化を実施したく
質問しています。
どうぞ、アドバイスのほど宜しくお願い致します。
floor関数やsumif関数が使えるのでは?と思って検討中です。

以下、サンプルです。
------------------------
時間   人数
9:01:44   1
9:09:55   3
9:32:18   2
10:04:11   1
10:08:48   6
10:38:37   1
11:22:21   0
11:39:59   0
12:57:37   2
14:02:18   0
16:53:10   9
17:02:27   1
17:25:32   3
17:32:41   11
17:44:48   3
17:47:38   9

よろしくお願いします。
Excel2003(OS:Windows XP Professional)についての質問です。

サンプルのように、ある時刻に目の前を通った人の人数をカウント
したとします。
例えば10分間隔に区切って人数を集計(*)し、縦軸を人数、横軸を時間
として折れ線グラフ化したいと思います。
どのように工夫すればより効率よくできるでしょうか。
 *例:9:00~9:10 であれば、集計値は「4」。
なお、サンプルは微量ですが、実際には膨大な量のデータです。
また、判りやすくするために、人をカウントしていま...続きを読む

Aベストアンサー

 折れ線グラフを作るときの横軸(時間)は等間隔にされたいのですよね。
 sumif関数を使う方法をお伝えします。
 データは2行目以降に入力されていて、1行目はタイトルとして使用されているとし、使用されている列はA列とB列だけだとします。

0)D1セルに例えば「時間帯」と入れ、E1セルに例えば「時間帯別人数」などとタイトルをつけます。
1)D2セルに「9:00」と入力します。
2)D3セルに「=D2+"0:10"」と入力し、以下、必要な時間範囲が出るまでコピーします。
3)E2セルに「=SUMIF(A:A,">="&D2,B:B)-SUMIF(A:A,">="&D3,B:B)」と入力し、以下コピーします。
4)列Dと列Eの範囲を選択して、折れ線グラフを描画します。

 これで求めるグラフが得られるのではないでしょうか?
 もし、時間帯を広げてグラフを作成したいときは、2)の"0:10"の値を適当に変えて見てください。

QVBA 5分間間隔でデータ記録

こんにちわ。
いつも諸先輩方に教えて頂きありがとうございます。
感謝しております。

早速ですが以下のようなVBを教えてもらいまして、
C3のセルにリアルタイムで変化する数字があります。

それを、3秒おきに時間とともにC6から順に記録して
1分間溜まったら、
E6に時間、
F6その1分間の最初の値、
G6にその1分間での最高値
H6にその1分間での最低値
I6にその1分間での最後の値
が順番に記録されるようになっております。   

このマクロを改正して、
 (1)1秒感覚でC3から下へ順に記録。
 (2)5分間隔でE6^I6に4種の値を下へ順に記録
  (このデータはずっと起動している間は下へ記録し続けたいです)
 
というように変更したいのですがうまくいかず、四苦八苦しておりました。
お忙しいところ申し訳ありませんが、
ヒントなるものでも結構ですので教えて頂ければ幸いです。
以上宜しくお願いいたします。
      UNO

   

=========================================================
Option Explicit
Public STOP_B As Boolean

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub ストップ()
STOP_B = False
End Sub

Sub スタート()
Dim i As Integer
Dim t As Integer
Dim n As Integer
Dim R As Range
Dim timenow As Variant
i = 6
n = 6
STOP_B = True
Do While True
t = 0
timenow = Format(Now(), "HH:mm")

While t < 300
Call Sleep(10)
DoEvents
t = t + 1
Wend
If timenow = Format(Now(), "HH:mm") Then

Sheet1.Cells(i, 3).Value = Sheet1.Range("C3").Value
i = i + 1
Else
Sheet1.Cells(n, 5).Value = timenow
Sheet1.Cells(n, 6).Value = Sheet1.Cells(6, 3).Value
Set R = Sheet1.Range(Sheet1.Cells(6, 3), Sheet1.Cells(i, 3))
Sheet1.Cells(n, 7).Value = WorksheetFunction.Max(R)
Sheet1.Cells(n, 8).Value = WorksheetFunction.Min(R)
Sheet1.Cells(n, 9).Value = Sheet1.Cells(i - 1, 3).Value

Sheet1.Range(Sheet1.Cells(6, 3), Sheet1.Cells(i, 3)).Clear

i = 6
Sheet1.Cells(i, 3).Value = Sheet1.Range("C3").Value
i = i + 1
n = n + 1
End If
If STOP_B = False Then

Exit Sub
End If
Loop
End Sub

Function xSleep(ByVal dwMilliseconds As Long)
Call Sleep(dwMilliseconds)
End Function

=====================================================

こんにちわ。
いつも諸先輩方に教えて頂きありがとうございます。
感謝しております。

早速ですが以下のようなVBを教えてもらいまして、
C3のセルにリアルタイムで変化する数字があります。

それを、3秒おきに時間とともにC6から順に記録して
1分間溜まったら、
E6に時間、
F6その1分間の最初の値、
G6にその1分間での最高値
H6にその1分間での最低値
I6にその1分間での最後の値
が順番に記録されるようになっております。   

このマクロを改正して、
 (1)1秒感覚...続きを読む

Aベストアンサー

Sub スタート()
Dim i As Integer
Dim t As Integer
Dim n As Integer
Dim R As Range
'Dim timenow As Variant
Dim timenow As Date

i = 6
n = 6
STOP_B = True

' 5分後の時刻を算出
timenow = DateAdd("n", 5, Now())

Do While True
t = 0
'timenow = Format(Now(), "HH:mm")

' 1秒間ウェイト
While t < 10
Call Sleep(100)
DoEvents
t = t + 1
Wend


'If timenow = Format(Now(), "HH:mm") Then

' 5分後の時刻に達していない場合
If DateDiff("s", timenow, Now) < 0 Then

Sheet1.Cells(i, 3).Value = Sheet1.Range("C3").Value
i = i + 1

Else
Sheet1.Cells(n, 5).Value = timenow
Sheet1.Cells(n, 6).Value = Sheet1.Cells(6, 3).Value
Set R = Sheet1.Range(Sheet1.Cells(6, 3), Sheet1.Cells(i, 3))
Sheet1.Cells(n, 7).Value = WorksheetFunction.Max(R)
Sheet1.Cells(n, 8).Value = WorksheetFunction.Min(R)
Sheet1.Cells(n, 9).Value = Sheet1.Cells(i - 1, 3).Value

Sheet1.Range(Sheet1.Cells(6, 3), Sheet1.Cells(i, 3)).Clear

i = 6
Sheet1.Cells(i, 3).Value = Sheet1.Range("C3").Value
i = i + 1
n = n + 1

' 5分後の時刻を算出
timenow = DateAdd("n", 5, Now())
End If


If STOP_B = False Then
Exit Sub
End If
Loop

End Sub

ウェイトはSleep(10)だと精度が甘いので、Sleep(100)にしました。
他の変更箇所はコメントにて。
これで合ってるかどうかは分かりませんが・・・。

Sub スタート()
Dim i As Integer
Dim t As Integer
Dim n As Integer
Dim R As Range
'Dim timenow As Variant
Dim timenow As Date

i = 6
n = 6
STOP_B = True

' 5分後の時刻を算出
timenow = DateAdd("n", 5, Now())

Do While True
t = 0
'timenow = Format(Now(), "HH:mm")

' 1秒間ウェイト
While t < 10
Call Sleep(100)
...続きを読む

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

QEXCELでワークシートを開いたらマクロを自動実行したい

いつもお世話になります。
EXCEL2000を使用しています。

EXCELファイルの中のあるワークシートを開いたときにマクロを自動実行することはできますか?
AUTO_OPENだとファイルを開くたびに自動実行されるので、特定のワークシートを開いたときだけマクロを自動実行できるようにしたいのです。
よろしくお願いします。

Aベストアンサー

Worksheet_Activateイベントに記述した場合は、ブックを開いたときに、
このシートがアクティブになっていた場合は、イベントが発生しません。

もし、ブックを開いたとき、目的のシートがアクティブな状態で開かれた時も
マクロを実行したいのであれば、ThisWookbookクラスの Open と SheetActivate
イベントを使って、例えば、次のような感じで如何でしょうか。
("Sheet2"の場合です。)

Private Sub Workbook_Open()
  If ActiveSheet.Name = "Sheet2" Then Sheet2_Open_Macro
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  If Sh.Name = "Sheet2" Then Sheet2_Open_Macro
End Sub

Sub Sheet2_Open_Macro()
  MsgBox "Sheet2がアクティブになっています。"
  'ここに処理したいコードを記述します。
End Sub

Worksheet_Activateイベントに記述した場合は、ブックを開いたときに、
このシートがアクティブになっていた場合は、イベントが発生しません。

もし、ブックを開いたとき、目的のシートがアクティブな状態で開かれた時も
マクロを実行したいのであれば、ThisWookbookクラスの Open と SheetActivate
イベントを使って、例えば、次のような感じで如何でしょうか。
("Sheet2"の場合です。)

Private Sub Workbook_Open()
  If ActiveSheet.Name = "Sheet2" Then Sheet2_Open_Macro
End Sub

Private ...続きを読む

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?


人気Q&Aランキング

おすすめ情報