• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:前25行に7個の連続した"UP"を検索するマクロ)

エクセルVBAで連続したUPを検索するマクロの作成方法

このQ&Aのポイント
  • エクセルVBA初心者の方向けに、株価分析において過去25日間に連続したUPが7個ある場合に「○」を、DNが7個ある場合には「×」をM列に付けるマクロの作成方法を教えてください。
  • エクセルの株価分析において、N列に自動的に表示されるUPやDNを使用して、過去25日間に連続したUPやDNを判定するマクロの作成方法を教えてください。
  • エクセルVBAで株価分析を行っている初心者の方向けに、N列に自動表示されるUPやDNを使用し、過去25日間に連続したUPやDNを判定するマクロの作成方法を詳しく教えてください。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 横からお邪魔します。 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

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.3です! たびたびごめんなさい。 投稿後に気づきました。 前回のコードはNo.2さんとほとんど同じ内容になっていました。 確認せずに投稿してごめんなさいね。m(_ _)m

2011kizuna
質問者

お礼

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

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.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

2011kizuna
質問者

お礼

KURUMITOさん こんにちは 回答ありがとうございました。 うまく作動するようです。 ほとんど同じ回答をくださったtom04さんをベストアンサーにしましたが あなたにも同じように感謝しています。 ありがとうございました。

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.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

2011kizuna
質問者

補足

Ki-aaaさんこんにちは。 回答ありがとうございます。 さっそく試してみたのですが、私の説明がおかしかったために少し違ったふうになってしまいます。 7日連続で"UP"が出たらその最初の日に"○"が出てしまいます。 > N列に過去25日間(25行)に"UP"が7個連続であったらその日のM列に"○" の部分を 今日から過去7日間連続で"UP"があったらその日のM列に"○"が出る、と言うふうに表現を変えさせて ください。(過去25日は別のところで設定しています) 要するに今日を含めて過去7日間連続で"UP"出たら"○"ですよーと表現したいのです。 何かResizeプロパティとかすごく複雑でむずかしいですねー Offset関数か何かで簡単にできないものでしょうか? とにかく さっそくの回答ありがとうございます。 教えていただいて、感謝、感謝です。 これからもよろしくお願いします。

関連するQ&A