
No.6ベストアンサー
- 回答日時:
こんばんは。
Wendy02です。VBAのロジックがあまりよく出来ていないようですね。
こちらで類推させていただきました。
Cells(1, 2).Formula = "=IF(A1<B1,A1,B1)"
この式で臨んでいることは、分りました。たぶん、それは、ここの部分だけが、リアルタイム表示をしてほしいということですね。ただし、この式が違っていますね。最初は、「転記マクロ」だけで、試してみてください。データを全部消去すると、回数がリセットされます。タイマー設定で、第0回の初期設定を含めて、第13回目まで行われます。
循環参照される式は、
"=IF(A1<" & CStr(Buf) & ",A1," & CStr(Buf) & ")"
このような式になります。Buf は、前の値を確保して、数式に含まれます。
Sub SetOnTime()
'タイマー設定
Dim m_Now As Date
m_Now = TimeValue("00:09:00")
For i = 0 To 13
'30分ごとに設定
Application.OnTime m_Now + TimeSerial(0, 30, 0) * i, "TransValue"
Next i
End Sub
'---------------------------
Sub TransValue()
'転記マクロ
Dim Buf As Double
Static i As Integer
'A1,B1 に何も入っていない状態
If WorksheetFunction.Count(Range("A1:B1")) = 0 Then
Range("A1").Value = 999999
Range("B1").FormulaLocal = "=IF(A1<999999,A1,999999)"
i = 0 'カウンターを初期化
Exit Sub
End If
i = i + 1
Buf = Range("B1").Value
'第13回目
If i > 12 Then
Range("C65536").End(xlUp).Offset(1).Value = Buf
MsgBox "終了しました。"
Exit Sub
End If
'A1,B1 が、999999の第1回目
If Range("A1").Value <> 999999 Or Range("A1") < Buf Then
Range("B1").FormulaLocal = "=IF(A1<" & CStr(Buf) & ",A1," & CStr(Buf) & ")"
End If
'1回目は、C1に転記しない
If i < 2 Then Exit Sub
'第2回目
If IsEmpty(Range("C1").Value) Then
Range("C1").Value = Buf
'第3回目~第12回目
Else
Range("C65536").End(xlUp).Offset(1).Value = Buf
End If
End Sub
本日の相場の急落に茫然自失し、お礼が遅くなり失礼しました。
Wendy02さんのおかげで、きれいなVBAが書けました。
貴重なお時間を回答に割いていただき、非常にありがとうございました。
No.5
- 回答日時:
>それ以降はA1セルに手入力をしてB1のセルの値をかえさせたいので
B1の値の決定にB1を参照する式を入れると循環参照になるのは免れません。
なので、《要望されるような式をB1に設定することはできません。》
#4で提案されているような、A1の値が設定された時にB1の値を変更するマクロにするということになるでしょう。
No.4
- 回答日時:
こんばんは。
Wendy02です。補足のご説明では、よく分りません。
もう少し、具体的に、その手順と目的を説明してくださらないと、おっしゃっている説明では分らないです。
例えば、A1 とB1 を比較して、A1 に、1 を入れ、B1 に5があれば、B1 は、1になる。
A1 に、6 を入れ、B1に1があれば、B1 は、1のままになる
というように説明してくださいませんか?
ちなみに、この説明の場合は、
'<シートモジュール>にこのように入れます。それで、B1 に数字がはいっていて、A1 に数字を入れれば、B1 の数字が変ります。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address <> "$A$1" And _
VarType(Range("B1")) <> vbDouble Then Exit Sub
If Target.Value < Range("B1").Value Then
Range("B1").Value = Target.Value
End If
Application.EnableEvents = True
End Sub
この回答への補足
説明不十分で申し訳ありません。
目的は、株式の30分足をつくりたいと思っています。
30分足とはA1のセルに不定期にデータがはいってきて、30分おきにA1セルの最大値と最小値を求め、その値を格納するものです。
最小値を求めるほうの例を書きます。
(1) データの初期設定
A1:999999 B1:999999 A1とB1には想定される最大値を格納
(2) 初回のデータがA1に入ってきた場合は、その値をB1に転記
A1:100 B1:100 この場合はA1(999999)>B1(999999)のため、B1に100を転記
(3) 2回目のデータ以降は、A1とB1を比較し小さいほうをB1に転記
A1:150 B1:100 この場合はA1(150)>B1(100)のため、B1は変更なし
A1:80 B1:80 この場合はA1(80)<B1(100)のため、B1は100から80に変更
・・・・
A1:80 B1:80 この場合はA1(80)=B1(80)のため、B1は変更なし
A1:50 B1:50 この場合はA1(50)<B1(80)のため、B1は80から50に変更
(4) (3)を30分繰り返します
(5) 30分を過ぎると、C1にデータの転記
(6) (1)から(2)の処理
(7) (3)を30分繰り返します
(8) 30分を過ぎると、C2にデータの転記
(9) (1)から(2)の処理
(10) (3)を30分繰り返します
(11) 30分を過ぎると、C3にデータの転記
(9)から(11)までを9回繰り返し、C4,C5,C6,C7,C8,C9,C10,C11,C12にデータを格納します。
Application.OnTime TimeValue("9:00:00"), "AAA"
Application.OnTime TimeValue("9:30:00"), "BBB1"
Application.OnTime TimeValue("10:00:00"), "BBB2"
Application.OnTime TimeValue("10:30:00"), "BBB3"
Application.OnTime TimeValue("11:00:00"), "BBB4"
Application.OnTime TimeValue("11:30:00"), "BBB5"
Application.OnTime TimeValue("12:00:00"), "BBB6"
Application.OnTime TimeValue("12:30:00"), "BBB7"
Application.OnTime TimeValue("13:00:00"), "BBB8"
Application.OnTime TimeValue("13:30:00"), "BBB9"
Application.OnTime TimeValue("14:00:00"), "BBB10"
Application.OnTime TimeValue("14:30:00"), "BBB11"
Application.OnTime TimeValue("15:00:00"), "CCC"
Sub AAA()
Cells(1, 1).Value = 999999
Cells(1, 2).Value = 999999
Cells(1, 2).Formula = "=IF(A1<B1,A1,B1)"
End Sub
Sub BBB1()
Cells(1, 3).Value = Cells(1, 2).Value
Cells(1, 1).Value = 999999
Cells(1, 2).Value = 999999
Cells(1, 2).Formula = "=IF(A1<B1,A1,B1)"
End Sub
Sub BBB2()
Cells(2, 3).Value = Cells(1, 2).Value
Cells(1, 1).Value = 999999
Cells(1, 2).Value = 999999
Cells(1, 2).Formula = "=IF(A1<B1,A1,B1)"
End Sub
Sub BBB3()
Cells(3, 3).Value = Cells(1, 2).Value
Cells(1, 1).Value = 999999
Cells(1, 2).Value = 999999
Cells(1, 2).Formula = "=IF(A1<B1,A1,B1)"
End Sub
BBB4からBBB11まではC列の行番号を変更
Sub CCC()
Cells(12, 3).Value = Cells(1, 2).Value
End Sub
長文になりましたが、よろしくご教授お願いします。
本来、お礼を書くところに恐縮なのですが、訂正をさせてください。
(2) 初回のデータがA1に入ってきた場合は、その値をB1に転記
A1:100 B1:100 この場合はA1(999999)>B1(999999)のため、B1に100を転記
↓
(2) 初回のデータがA1に入ってきた場合は、その値をB1に転記
A1:100 B1:100 この場合はA1(100)<B1(999999)のため、B1に100を転記
No.3
- 回答日時:
こんばんは。
循環参照は、ワークシート上の数式の内容の問題で、マクロの問題ではありません。
Sub Test1()
Dim A As Double
Dim B As Double
A = 1: B = 5
Cells(1, 1).Value = A '←リテラル値ではなく、変数を使うほうが良い
Cells(1, 2).Value = B ' ''
Cells(1, 3).FormulaLocal = "=IF(A1<B1,A1,B1)"
' ↑ 単に場所を変えることと、なるべく、FormulaLocalプロパティの方がよい
End Sub
B1 に入れる場合は、あくまでも、VBA内で処理することですね。
Sub Test2()
Dim A As Double
Dim B As Double
'数値代入
'---------------------------------
Range("A1:B1").Value = Array(1,5)
'---------------------------------
'マクロ
A = Cells(1, 1).Value
B = Cells(1, 2).Value
If A < B Then Cells(1, 2).Value = A Else: Cells(1, 2).Value = B
End Sub
実際には、このようなマクロを組むことはないでしょうから、あくまでも、実験の範囲です。
回答ありがとうございます。
最初に1回だけVBAで比較の処理を行い、それ以降はA1セルに手入力をしてB1のセルの値をかえさせたいので、EXCELの数式で処理を行いたかったのです。
質問が不明瞭で申し訳ありません。
No.1
- 回答日時:
Sub a()
If cells(1, 1).Value < cells(1, 2).Value Then
cells(1, 2).Value = cells(1, 1).Value
End If
End Sub
--------------
こんな感じじゃだめなんですかね?
回答ありがとうございます。
最初に1回だけVBAで比較の処理を行い、それ以降はA1セルに手入力をしてB1のセルの値をかえさせたいので、EXCELの数式で処理を行いたかったのです。
質問が不明瞭で申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル関数教えてください 3 2022/06/21 10:22
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) 時間差を求めるマクロコードを教えてください。 4 2022/05/17 18:22
- Excel(エクセル) Excel 数式を教えてください 2 2022/06/02 12:24
- Excel(エクセル) Excel表示形式 2 2022/09/09 09:57
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Excel(エクセル) エクセルで一定の数値を超えたとき”一定数”、超えなかったら計算式を入れたい 3 2022/04/05 10:31
- 統計学 個別の期待値は小さいけど集計すると期待値は大きくなる場合とは? 4 2022/06/14 08:27
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- Excel(エクセル) エクセルのINDEXについて 2 2022/04/17 21:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】エラー【#DIV/0!】が...
-
セルにぴったし写真を挿入
-
EXCELのVBAで複数のシートを追...
-
勤怠表について ABS、TEXT関数...
-
オートフィルターの絞込みをし...
-
エクセル画像(写真)挿入
-
【マクロ】【画像あり】関数が...
-
エクセルシートの見出しの文字...
-
【Officer360?Officer365?の...
-
Excelで4択問題を作成したい
-
エクセルの複雑なシフト表から...
-
空白のはずがSUBTOTAL関数でカ...
-
エクセル
-
グループごとの人数のカウント
-
グループごとの人数のカウント
-
エクセル GROUPBY関数について...
-
エクセルのリストについて
-
エクセルについて
-
グループごとの個数をカウント...
-
エクセルの関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報