この人頭いいなと思ったエピソード

エクセルで株価取得の仕組みを作ろうと思い
マクロのIf~ElseIfを列単位で条件分岐できないかと考えています。


今、作りたいと思っているのは

(1)列に特定の数値があった場合は
(2)セルに入力されている銘柄コードの
(3)始値・高値・安値・終値・出来高といった時系列データをネットから取得

を考えています。

添付画像で言うと例えば
(1)C列の「前日比が+」であった場合は
(2)A列の「銘柄コード」の
(3)始値・高値・安値・終値・出来高といった時系列データをネットから取得
という事を考えています。

分かりにくくて申し訳ありません


添付画像では3銘柄ほどしかありませんが、
実際は150銘柄ほどでこれを行い、
条件を満たしている銘柄のすべてで時系列データを取得したいと思っています。


自分でやろうと思ったやり方では
C1,C2,C3...と一つ一つ指定するくらいしか出来なかったため、
マクロが長文になってしまいました。


そこで列単位で一括で条件分岐する方法はないでしょうか。
アドバイス頂けると助かります。

「エクセルマクロの条件分岐を列単位で行う」の質問画像

A 回答 (2件)

こんにちは!



質問文を読む限りでは「オートフィルタ」が一番簡単だと思います。
わざわざVBAでやる必要はなく手を動かすのが手っ取り早いのではないでしょうか?

C列をキーに 「0より大きい」でフィルタをかけ、表示されているデータのみを別Sheetにコピー&ペーストする。
といった感じではどうでしょうか?

※ どうしてもVBAで!というコトであれば、上記の一連の操作をコードにすると
↓のような感じですかね?
元データはSheet1にあり、Sheet2にコピー&ペーストするコードの一例です。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.Clear
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A1").AutoFilter field:=3, Criteria1:=">0"
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy wS.Range("A1")
.AutoFilterMode = False
End With
End Sub

こんな感じでは同でしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

早速のご回答誠にありがとうございます。

仰る通りフィルタをかけるのが手っ取り早く、大した手間ではないのですが、
出来る限り作業を機械的に行いたいと思っているのです。

ボタン一つで必要な情報をすべて取得して、
あとは株の売買の注文ボタンを押すだけ、
というのを理想としておりましたので。

ご提示いただいた別シートへのコピーは
今回の質問とは違うのですが、ちょうど自分が別に考えていた株情報取得に役立つ内容なので
ぜひ使わせていただきます。

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

お礼日時:2015/01/08 23:45

Sub Macro1()



MaxRow = Range("C1").End(xlDown).Row
For Each r In Range("C2").Resize(MaxRow)
If r > 0 Then

'ここにやりたい処理を挿入
'C列のデータが1以上のセルが r で利用できます
' r.Offset(0,-2).Value で銘柄コードを取得できます

End If
Next

End Sub
    • good
    • 0
この回答へのお礼

早速のご回答誠にありがとうございます。

>For Each
「繰り返す」というものがあったのですね。
ご教示ありがとうございます!

具体例も書いていただき非常に助かりました!

お礼日時:2015/01/08 23:46

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