こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

前25行に7個の連続した"UP"を検索するマクロ

エクセルVBAの質問です。

マクロ初心者です。
エクセルで株価分析をしています。
A列~G列 750行までに株価4本値、出来高、前日比などが入っています。
その他の列には分析数値や結果などが入っていてN列が判定列になっています。
さて、質問ですが、N列に過去25日間(25行)に"UP"が7個連続であったらその日のM列に"○"を、また過去25日間に"DN"が7個連続であったらその日のM列に"×"を付けるマクロを作りたいの
ですが、初心者で参考書とにらめっこしながらやっていますがどうすればいいのかわからなくて途方にくれています。
なお N列の"UP""DN"は自動で出るようなマクロはできています。

どなたかわかりやすく教えてください、よろしくおねがいします。

投稿日時 - 2012-02-11 16:53:15

QNo.7298974

困ってます

質問者が選んだベストアンサー

こんばんは!
横からお邪魔します。

No.1さんの補足を読ませていただいて・・・
結局25日というのは無視して、連続7日「UP」が続けば「○」を
連続7日「DN」が続けば「×」をM列に表示させればよい訳ですよね?

一応そういうことだとして。
データは2行目からあるとしています。


Sub test()
Dim i As Long
For i = 8 To Cells(Rows.Count, "N").End(xlUp).Row
If WorksheetFunction.CountIf(Range(Cells(i - 6, "N"), Cells(i, "N")), "UP") = 7 Then
Cells(i, "M") = "○"
ElseIf WorksheetFunction.CountIf(Range(Cells(i - 6, "N"), Cells(i, "N")), "DN") = 7 Then
Cells(i, "M") = "×"
End If
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m

投稿日時 - 2012-02-13 20:53:14

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

No.3です!
たびたびごめんなさい。

投稿後に気づきました。
前回のコードはNo.2さんとほとんど同じ内容になっていました。

確認せずに投稿してごめんなさいね。m(_ _)m

投稿日時 - 2012-02-13 21:07:44

お礼

tom04さんこんにちは

やったー うまくいきました、

ありがとうございます。 ベストアンサーにさせていただきます。
No.2のKURUMITOさんの回答とほとんど同じですがすっきりして見やすいのでこちらをベストアンサーに
させていただきます。
これでマクロをごちゃごちゃといじくりまわさずにすみます。
ありがとうございました。

投稿日時 - 2012-02-15 05:43:33

ANo.2

例えばA列に日付が入力されているとしたら次のようなマクロでどうでしょう。

Dim RowP As Long
For RowP = 1 To Range("A65536").End(xlUp).Row
If Cells(RowP, 1) = Date Then
If WorksheetFunction.CountIf(Range(Cells(RowP - 6, 14), Cells(RowP, 14)), "UP") = 7 Then
Cells(RowP, 13) = "○"
Exit For
ElseIf WorksheetFunction.CountIf(Range(Cells(RowP - 6, 14), Cells(RowP, 14)), "DN") = 7 Then
Cells(RowP, 13) = "×"
Exit For
End If
End If
Next

投稿日時 - 2012-02-12 14:04:57

お礼

KURUMITOさん こんにちは

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

うまく作動するようです。

ほとんど同じ回答をくださったtom04さんをベストアンサーにしましたが

あなたにも同じように感謝しています。

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

投稿日時 - 2012-02-15 05:51:41

ANo.1

これを試してみてね。

Sub test()
Dim iii As Long, jjj As Long
Dim mySh1 As Worksheet, mySh2 As Worksheet
Dim myRenzoku As Long

myRenzoku = 7 '連続数
Set mySh1 = Sheets("Sheet1")

For iii = 2 To 26 '二行目から二十六行目まで調べる
jjj = WorksheetFunction.CountIf(mySh1.Range("N" & iii).Resize(myRenzoku, 1), "UP")
'指定したセルを含め七つのセルすべてがUPかどうか調べる
If jjj = myRenzoku Then
mySh1.Range("M" & iii).Value = "O"
End If
jjj = WorksheetFunction.CountIf(mySh1.Range("N" & iii).Resize(myRenzoku, 1), "DN")
If jjj = myRenzoku Then
mySh1.Range("M" & iii).Value = "X"
End If
Next iii

Set mySh1 = Nothing
End Sub

投稿日時 - 2012-02-12 09:07:23

補足

Ki-aaaさんこんにちは。
回答ありがとうございます。

さっそく試してみたのですが、私の説明がおかしかったために少し違ったふうになってしまいます。
7日連続で"UP"が出たらその最初の日に"○"が出てしまいます。

> N列に過去25日間(25行)に"UP"が7個連続であったらその日のM列に"○" の部分を
今日から過去7日間連続で"UP"があったらその日のM列に"○"が出る、と言うふうに表現を変えさせて
ください。(過去25日は別のところで設定しています)
要するに今日を含めて過去7日間連続で"UP"出たら"○"ですよーと表現したいのです。

何かResizeプロパティとかすごく複雑でむずかしいですねー
Offset関数か何かで簡単にできないものでしょうか?
とにかく
さっそくの回答ありがとうございます。
教えていただいて、感謝、感謝です。
これからもよろしくお願いします。

投稿日時 - 2012-02-12 11:33:49

あなたにオススメの質問