Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2911 / 13646 ツリー ←次へ | 前へ→

【65311】時間の検索 Satsuki 10/5/8(土) 16:35 質問[未読]
【65313】Re:時間の検索 かみちゃん 10/5/8(土) 18:40 発言[未読]
【65315】Re:時間の検索 Satsuki 10/5/8(土) 21:13 質問[未読]
【65316】Re:時間の検索 かみちゃん 10/5/8(土) 21:40 発言[未読]
【65317】Re:時間の検索 Satsuki 10/5/9(日) 0:34 質問[未読]
【65332】Re:時間の検索 Satsuki 10/5/12(水) 16:56 お礼[未読]

【65311】時間の検索
質問  Satsuki  - 10/5/8(土) 16:35 -

引用なし
パスワード
   こんにちは、Satsukiと申します。
あちこち調べましたが、わかりませんでしたので、ご教示お願いいたします。
為替に関する集計用VBAを作成中です。
下記のような2つの表があり2つめの表には10分ごとの最高値と最安値が表示されています。
1つめの表の右欄外にオープンから決済までの期間の最安値(または最高値)を表示したいのですが、時間の検索がうまく行きません。
(HajimeJが"nothing"になる。)
2つめの表はCSVデータをダウンロードしたもので、時間の欄は、表示形式を文字列に設定してみると0.111122685などというシリアル値(?)になっています。
よろしくお願いいたします。

オープン時間        オープンレート  決済時間        決済レート
4/20/2010 2:09:09 AM   85.686   4/20/2010 4:32:52 AM  86.026
4/20/2010 4:32:52 PM  86.068   4/20/2010 7:51:41 PM  86.423



日付     時間    最大  最小
2010/4/20  2:00:01   85.85  85.56
2010/4/20  2:10:01   85.93  85.82




Sub kensaku()
 ・
 ・
Dim KaishiJ As Date
Dim HajimeJ As Range
Dim jikanTF As String
j = ActiveSheet.Range("A6").End(xlDown).Row
For i = 6 to j               
 ・
 ・
KaishiJ = TimeValue(ShoshikiJikan(Cells(i, 1), jikanTF))
            ↓R列に2つめの表の「時間」データ
With ActiveSheet.Range("R6:R" & Range("R6").End(xlDown).Row)
  Set HajimeJ = .Find(what:=KaishiJ, LookIn:=xlValues,                  lookat:=xlWhole, SearchOrder:=xlByColumns,                MatchByte:=False)
 ・
 ・
Next i
 ・
 ・
End Sub

'時間データを10分おきに置き換えるプロシージャ
Private Function ShoshikiJikan(jikanAP As String, jikanTF As String) As String
Dim jikan As String
  jikan = Right(jikanAP, Len(jikanAP) - InStr(jikanAP, " "))
Dim jiTF As String
  If Right(jikan, 2) = "PM" Then
    If Left(jikan, 2) = "12" Then
      jiTF = "00"
    Else
      jiTF = Left(jikan, InStr(jikan, ":") - 1) + 12
    End If
  Else
    jiTF = Left(jikan, InStr(jikan, ":") - 1)
  End If
  ShoshikiJikan = jiTF & Mid(jikan, InStr(jikan, ":"), 2) & "0:01"
End Function

【65313】Re:時間の検索
発言  かみちゃん E-MAIL  - 10/5/8(土) 18:40 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>下記のような2つの表があり2つめの表には10分ごとの最高値と最安値が表示されています。

2つの表は、シートが別なのですか?
同一シートの別のセル範囲なのですか?
Satukiさんのシートは、掲示板を見ている者には見えないので、
どのシートのどのセルにどの値が入っているのか具体的に説明して、
マクロ実行前のサンプルデータとマクロ実行後そのデータがどうなっていてほしいのか
を説明していただきたいです。

【Sheet1】
  A  B  C  D  E
1
2
3
4

以上のようなシートイメージで元のデータと期待している結果を示してください。
その際、投稿欄の右下の「等幅」にチェックをしてください。

【65315】Re:時間の検索
質問  Satsuki  - 10/5/8(土) 21:13 -

引用なし
パスワード
   かみちゃん さん、早速のご回答ありがとうございます。
>2つの表は、シートが別なのですか?
>同一シートの別のセル範囲なのですか?
>Satukiさんのシートは、掲示板を見ている者には見えないので、
>どのシートのどのセルにどの値が入っているのか具体的に説明して、
>マクロ実行前のサンプルデータとマクロ実行後そのデータがどうなっていてほしいのか
>を説明していただきたいです。
なるべくシンプルに読みやすくしたつもりが、説明不足になってしまいました。
申し訳ありません。
同一シート上に2つの表が並んでいます。
オープン時間から決済時間までの間の最安値(わかりやすくするため最安値のみで説明します)を検索したいのです。つまりいくら含み損があったかを知るためのマクロです。
2つめの表は、どこかのサイトからダウンロードしたCSVデータですので、前述のように時間の欄が日付型(?)で来ているようです。続く列には、10分間ごとの最安値と最高値が表示されています。
実際には何日分かの取引データがありますが、わかりやすくするため、4月20日のみの取引分について検索するとします。

                        この欄に最安値を入力したい
【Sheet1】                              ↓
    A          B       C         D    E
1  オープン時間      オープンレート    決済時間      決済レート 最安値
2 4/20/2010 2:09:09 AM 85.686   4/20/2010 4:32:52 AM  86.026    
3 4/20/2010 4:32:52 PM 86.068   4/20/2010 7:51:41 PM  86.423
4   ・         ・        ・       ・
5   ・         ・        ・       ・

    Q      R     S    T
1   日付    時間    最大  最小
2  2010/4/20  2:00:01  85.85  85.56
3  2010/4/20  2:10:01  85.93  85.82
4   ・      ・     ・   ・
5   ・      ・     ・   ・

Sub kensaku()
 ・
 ・
Dim KaishiJ As Date, KessaiJ as Date
Dim HajimeJ As Range, OwariJ as Range
Dim jikanTF As String
j = ActiveSheet.Range("A6").End(xlDown).Row
For i = 6 to j               
 ・
 ・
KaishiJ = TimeValue(ShoshikiJikan(Cells(i, 1), jikanTF))
KessaiJ = TimeValue(ShoshikiJikan(Cells(i, 3), jikanTF))
With ActiveSheet.Range("R6:R" & Range("R6").End(xlDown).Row)
  Set HajimeJ = .Find(what:=KaishiJ, LookIn:=xlValues,                  lookat:=xlWhole, SearchOrder:=xlByColumns,                MatchByte:=False)
  Set OwariJ = .Find(what:=KessaiJ, LookIn:=xlValues,                  lookat:=xlWhole, SearchOrder:=xlByColumns,                MatchByte:=False)
 ・
 ・
End with
'ここで検索した範囲(行)の2つ隣の列の最小値を入力
With ActiveSheet
  .Cells(i, 5).Value = Application.Min(Range(Cells(HajimeJ.Row,
   HajimeJ.Column + 2), Cells(OwariJ.Row, OwariJ.Column + 2)))
End with

Next i
 ・
 ・
End Sub

'時間データを10分おきに置き換えるプロシージャ
Private Function ShoshikiJikan(jikanAP As String, jikanTF As String) As String
Dim jikan As String
  jikan = Right(jikanAP, Len(jikanAP) - InStr(jikanAP, " "))
Dim jiTF As String
  If Right(jikan, 2) = "PM" Then
    If Left(jikan, 2) = "12" Then
      jiTF = "00"
    Else
      jiTF = Left(jikan, InStr(jikan, ":") - 1) + 12
    End If
  Else
    jiTF = Left(jikan, InStr(jikan, ":") - 1)
  End If
  ShoshikiJikan = jiTF & Mid(jikan, InStr(jikan, ":"), 2) & "0:01"
End Function

以上です。よろしくお願いいたします。

【65316】Re:時間の検索
発言  かみちゃん E-MAIL  - 10/5/8(土) 21:40 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>オープン時間から決済時間までの間の最安値(わかりやすくするため最安値のみで説明します)を検索したいのです。つまりいくら含み損があったかを知るためのマクロです。
>2つめの表は、どこかのサイトからダウンロードしたCSVデータですので、前述のように時間の欄が日付型(?)で来ているようです。続く列には、10分間ごとの最安値と最高値が表示されています。

S1セルは「最大」となっていますが、「最高値」のことですか?
T1セルは「最小」となっていますが、「最安値」のことですか?

> この欄に最安値を入力したい

オープン時間から決済時間を少し短時間にして、
Q列〜T列のデータを増やして、実際にどのようなデータが得られることを期待しているのか示していただくことはできませんか?

【65317】Re:時間の検索
質問  Satsuki  - 10/5/9(日) 0:34 -

引用なし
パスワード
   かみちゃん さん
お返事ありがとうございます。
度々説明不足で申し訳ありません。

>S1セルは「最大」となっていますが、「最高値」のことですか?
>T1セルは「最小」となっていますが、「最安値」のことですか?
そうです。説明しないといけませんでした。^^;
念の為タイトルを変更しました。

>オープン時間から決済時間を少し短時間にして、
>Q列〜T列のデータを増やして、実際にどのようなデータが得られることを期待し
>ているのか示していただくことはできませんか?
下記のように書いてみました。上手く伝わるといいですが。
この場合、オープンとは購入することで、決済とは売ることです。その間、レートが変動することにより、購入した価格より下回ることがあり、それを含み損(決済していないので、仮想の損を意味する)といいます。

                      この欄に該当期間の最安値が入る
【Sheet1】                              ↓
    A          B       C         D    E
1  オープン時間      オープンレート    決済時間      決済レート 最安値
2 4/20/2010 2:09:09 AM 85.686   4/20/2010 2:32:52 AM  86.026  84.94
3 4/20/2010 4:32:52 AM 86.068   4/20/2010 5:11:41 AM  86.423  85.04
4   ・         ・        ・       ・
5   ・         ・        ・       ・

    Q      R     S    T
1   日付    時間   最高値 最安値 <1つめの取引>
2  2010/4/20  2:00:01  85.85  85.56 ←この時間帯でオープン(85.686)
3  2010/4/20  2:10:01  86.82  84.94     ↓
4  2010/4/20  2:20:01  86.55  85.02
5  2010/4/20  2:30:01  86.07  85.56 ←この時間帯で決済(86.026)
6  2010/4/20  2:40:01  85.93  85.28
7   ・      ・     ・   ・
   ・      ・     ・   ・
14  ・      ・     ・   ・
15 2010/4/20  4:20:01  85.82  84.99  <2つめの取引>
16 2010/4/20  4:30:01  86.95  86.01 ←この時間帯でオープン(86.068)
17 2010/4/20  4:40:01  86.28  85.07
18 2010/4/20  4:50:01  85.91  85.23     ↓
19 2010/4/20  5:00:01  86.97  85.26
20 2010/4/20  5:10:01  86.53  85.04 ←この時間帯で決済(86.423)

1つめの取引は、2つめの表の2行目から5行目の間で行われ、その行のT列の最安値84.94がE2セルに入ります。
2つめの取引は、2つめの表の16行目から20行目の間で行われ、その行のT列の最安値85.04がE3セルに入ります。
よって2つめの取引で言うなら、86.068(オープン価格)-84.04の含み損があったことがわかります。

以上です。誠にお世話をかけます。よろしくお願いいたします。

【65332】Re:時間の検索
お礼  Satsuki  - 10/5/12(水) 16:56 -

引用なし
パスワード
   自己レスです。
あてずっぽうでいろいろやってみましたところ、下記の変更を加えましたら、上手くいきました。理屈としては納得していないので、解説して頂ける方がありましたら、よろしくお願いいたします。

Sub kensaku()
 ・
 ・
Dim KaishiJ As string, KessaiJ as string ←変更…型を date から string へ
Dim HajimeJ As Range, OwariJ as Range
Dim jikanTF As String
j = ActiveSheet.Range("A6").End(xlDown).Row
For i = 6 to j               
 ・
 ・
KaishiJ = ShoshikiJikan(Cells(i, 1), jikanTF)  ←変更…timevalue関数なし
KessaiJ = ShoshikiJikan(Cells(i, 3), jikanTF)  ←変更…timevalue関数なし
With ActiveSheet.Range("R6:R" & Range("R6").End(xlDown).Row)
  Set HajimeJ = .Find(what:=KaishiJ, LookIn:=xlValues,                  lookat:=xlWhole, SearchOrder:=xlByColumns,                MatchByte:=False)
  Set OwariJ = .Find(what:=KessaiJ, LookIn:=xlValues,                  lookat:=xlWhole, SearchOrder:=xlByColumns,                MatchByte:=False)
 ・
 ・
End with
'ここで検索した範囲(行)の2つ隣の列の最小値を入力
With ActiveSheet
  .Cells(i, 5).Value = Application.Min(Range(Cells(HajimeJ.Row,
   HajimeJ.Column + 2), Cells(OwariJ.Row, OwariJ.Column + 2)))
End with

Next i
 ・
 ・
End Sub

2911 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free