[[20190415195853]] 『webクエリで』(ブルー☆) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『webクエリで』(ブルー☆)

いつもお世話になっております
少し判りにくいかもしれませんが
webクエリで情報を取得するマクロを作ったのですが

 Sub テスト2()

    Const csCode As String = "URL;https://umanity.jp/racedata/race_7.php?code=XXXX"
    Dim strURL As String

    strURL = Get開催コード生成
    strURL = Replace(csCode, "XXXX", strURL)
    Set出馬表取得 strURL

    Dim 処理前シート As Worksheet
    Dim 処理後シート As Worksheet
    Dim 元データ As Range
Dim ws As Worksheet
Set ws = ActiveSheet
    Set 処理前シート = ActiveSheet
    Set 処理後シート = Worksheets("テスト")
    Set 元データ = 処理前シート.UsedRange

Function Get開催コード生成() As String

    Dim Y As String   '年
    Dim D As String   '日付
    Dim c As String   '回
    Dim A As String   '場所
    Dim T As String   '日目
    Dim r As String   'レース番号

    With ThisWorkbook.ActiveSheet
        Y = Format(.Range("A2").Value, "0000")
        D = Format(.Range("B2").Value, "0000")
        A = Get場所コード(.Range("C2").Value)
        c = Format(.Range("D2").Value, "00")
        T = Format(.Range("E2").Value, "00")
        r = Format(.Range("F2").Value, "00")
    End With

    Get開催コード生成 = Y & D & A & c & T & r
End Function
最後のRの部分の数字
例https://umanity.jp/racedata/race_7.php?code=2019042103010610の最後の10のところが指定した数値だけ増えていって取得できるようにしたいのですができますか
例えば指定した数値が3ならば
https://umanity.jp/racedata/race_7.php?code=2019042103010610
https://umanity.jp/racedata/race_7.php?code=2019042103010611
https://umanity.jp/racedata/race_7.php?code=2019042103010612
みたいにできたらとおもっています
なお数値の指定についてはG2でできたたらと思っています
わかりにくくすいませんがよろしくおねがいします

< 使用 Excel:Excel2010、使用 OS:Windows7 >


必要な命令は既に使っているし、何を聞きたいのかよく判らないですね。 以下は参考になるでしょうか?
 Sub test()
    Dim cw As String
    Dim i As Long

    For i = 1 To 3
        cw = cw & "test" & Format(9 + i, "00") + vbLf
    Next i

    MsgBox cw
 End Sub
(???) 2019/04/16(火) 10:24

イマイチ意味がわかりません
つまり
アドレスの
https://umanity.jp/racedata/race_7.php?code=2019042103010610の最後の二桁を可変できるようにしたいのですが
(ブルー☆) 2019/04/16(火) 17:23

いやー、私の方も、何が問題なのかが判らないです。「https://umanity.jp/racedata/race_7.php?code=20190421030106」ここまでは作れていて、最後にあと2文字足すだけなのですよね? ならば同じように数値を2文字の数字にして、くっつけるだけでは?
(???) 2019/04/16(火) 17:38

ですけど 問題は一回の操作でしたくて
今まではF2を打ち直して一度ずつマクロを実行していて
つまり F2に10と入力してマクロを実行→F2に11と入力してマクロを実行F2に12と入力してマクロを実行していたのを一回の操作でできないかと思いました
(ブルー☆) 2019/04/16(火) 18:02

F2に初期値があって、G2に回数があるのでしょう? ならば、F2 + i - 1 が求める数値であり、これをForループで回数分回せば良いだけです。 私の書いたサンプルは、直値で書いていますが同じ事です。 理解できない箇所があるでしょうか?

3回あるなら、URLを作るのも3回やらないといけないし、その結果を処理するロジックも3回繰り返すのですよ。
(???) 2019/04/16(火) 18:09


意味がやっとわかりましたということは
今のコードをどう改良すればいいのですか
コードは

 Sub テスト2()

    Const csCode As String = "URL;https://umanity.jp/racedata/race_7.php?code=XXXX"
    Dim strURL As String

    strURL = Get開催コード生成
    strURL = Replace(csCode, "XXXX", strURL)
    Set出馬表取得 strURL

    Dim 処理前シート As Worksheet
    Dim 処理後シート As Worksheet
    Dim 元データ As Range
Dim ws As Worksheet
Set ws = ActiveSheet
    Set 処理前シート = ActiveSheet
    Set 処理後シート = Worksheets("テスト")
    Set 元データ = 処理前シート.UsedRange

    Dim 最終行 As Long
    Dim 開始行 As Long
    Dim r As Long
    Dim shp As Shape

    開始行 = 元データ(1, 1).Row
    最終行 = 元データ.Rows.Count + 開始行

    'レース名取得
    Dim レース名 As String
    For r = 開始行 To 最終行
        If 元データ(r, 2).Value <> "" Then
            レース名 = 元データ(r, 2).Offset(2, 0)
            Exit For
        End If
    Next r
        '距離

    Dim 距離 As String
    For r = 開始行 To 最終行
        If 元データ(r, 2).Value <> "" Then
            距離 = 元データ(r, 3).Offset(4, -1)
            Exit For
        End If
    Next r

    '馬情報開始行取得
    Dim 馬情報行 As Long
    For r = 開始行 To 最終行
        If 元データ(r, 6) <> "" Then
            馬情報行 = r + 2
            Exit For
        End If
    Next r

    'レース内容取得と書き出し
    Dim 馬名, 性齢毛色, 斤量, 調教師, 父馬名, 母馬名, 負担重量, 所属, 戦績, 収得賞金

    Dim cnt As Long
    cnt = 1
    For r = 馬情報行 To 最終行
        If 元データ(r, 6) <> "" Then

            cnt = cnt + 1 'カウンタ

            'データ取得

            性齢毛色 = 元データ(r, 6).Value
            斤量 = 元データ(r, 3).Value
            調教師 = 元データ(r, 4).Value
            馬名 = 元データ(r, 5).Value
            母馬名 = 元データ(r, 6).Value
            負担重量 = 元データ(r, 7).Value
            調教師 = 元データ(r, 8).Value
            戦績 = 元データ(r, 10).Value
            収得賞金 = 元データ(r, 11).Value
            父馬名 = 元データ(r, 12).Value
            母馬名 = 元データ(r, 13).Value
            '*******************************
            'この間はご自身で考えてコードを追加してください
            '*******************************

            'データ書き出し
            処理後シート.Cells(cnt, 3) = 馬名
            処理後シート.Cells(cnt, 4) = 性齢毛色
            処理後シート.Cells(cnt, 5) = 負担重量
            処理後シート.Cells(cnt, 6) = 調教師
            処理後シート.Cells(cnt, 7) = 戦績
            処理後シート.Cells(cnt, 8) = 収得賞金
            処理後シート.Cells(cnt, 9) = 父馬名
            処理後シート.Cells(cnt, 10) = 母馬名

            '元データシート削除
            '*******************************
            'マクロの記録で記録されたコードを追加
            '*******************************

        End If
    Next r

    Range("A15:AB222").Select
    Selection.ClearContents
End Sub

Function Get開催コード生成() As String

    Dim Y As String   '年
    Dim D As String   '日付
    Dim c As String   '回
    Dim A As String   '場所
    Dim T As String   '日目
    Dim r As String   'レース番号

    With ThisWorkbook.ActiveSheet
        Y = Format(.Range("A2").Value, "0000")
        D = Format(.Range("B2").Value, "0000")
        A = Get場所コード(.Range("C2").Value)
        c = Format(.Range("D2").Value, "00")
        T = Format(.Range("E2").Value, "00")
        r = Format(.Range("F2").Value, "00")
    End With

    Get開催コード生成 = Y & D & A & c & T & r
End Function
やりたいこととしては 取得→別シートに書き出しという流れです
(ブルー☆) 2019/04/16(火) 18:16

わからなかったので少し考えてみます
(ブルー☆) 2019/04/17(水) 17:49

いろいろ考えたのですがわかりません誰か教えていただけませんか
すいません

(ブルー☆) 2019/04/22(月) 19:38


>F2に10と入力してマクロを実行→F2に11と入力してマクロを実行F2に12と入力してマクロを実行していたのを一回の操作でできないかと思いました
↑に限っていえば、既に???さんが答えておられるし、いまのお悩みポイントはどこですか?

また、提示されたコードは、なんか他の人に提案されたのをそのまま張り付けただけにみえますけど、実際はちゃんと理解・修正済みなのでしょうか?

>意味がやっとわかりましたということは
>今のコードをどう改良すればいいのですか
このトピックに限れば「意味がやっとわかりました」という趣旨の発言をされている回答者さんはいらっしゃらないようにみえますけど(見落としているだけならごめんなさい)他のトピックや別の掲示板と間違えて投稿していませんか?

(もこな2) 2019/04/23(火) 09:31


ループのさせ方は、私が最初に書いた通りです。 これのForループの内側に、貴方の書いたコードを入れるだけ。 3回固定な部分は、Range("G2") 回に変えるのでしたね。

注意点としては、「Get開催コード生成」というプロシジャは、今は2行目の値から文字列生成していますが、引数を追加して、ループ変数をプロシジャに渡すことで、これも r という変数をセットする際に考慮しないと文字列が変わらない、という事。 これは気づきましたか?

そして、そこまでコードを書いたのは貴方自身なので、更に直すなら、貴方自身が行わなければなりません。 質問するなら、現状はどういう風に直して、どういう現象になってしまったが、どういう出力にしたいのかを詳細に説明してください。 説明するのが面倒ならば、他人を頼らず自力解決するしかないですよ。
(???) 2019/04/23(火) 11:23


>webクエリで情報を取得するマクロを作ったのですが

自分で書いたかのように見栄をはってもよいことありません。
わたしの場合、わかってて意地悪な回答したくなります。

ところでモーグでいただいたコードなのだから
今回もモーグで質問するの普通ですが、
やはり、抵抗ありましたか。

だから、放置しないでといったのに…
無視されましたが、ひろさんですよね。

ついで、さらに意地悪コメントです。

>わからなかったので少し考えてみます

といって、マルチポストですか?
で、回答がつないと

>いろいろ考えたのですがわかりません誰か教えていただけませんか

ですか。

(マナ) 2019/04/23(火) 19:48


ここ→知恵袋→サロン→ここ→OKWAVE とマルチしていって、OKWAVE でコード修正してもらったようです。 修正内容は、誰が考えてもそうなりますが、私が教えた情報そのまんまという…。 自分で考えていれば、1週間前に解決していたでしょうに。

マルチして、フォローせず投げっぱなしを繰り返すと、どこの回答者も答えてくれなくなりますよ。
(???) 2019/04/24(水) 15:52


すいません解決しましたありがとうございます
(ブルー☆) 2019/04/24(水) 20:17

遅レスですし、以前からマルチポスト&丸投げ&放置の傾向があるので言っても仕方ないのかも知れませんが、今回はマルチポストで解決したのですよね?

であれは、解決したの一言で済まさず

(n) [マルチポストについて] [multipost]

当サイトではマルチポスト(他の掲示板に同じ内容を書くこと)は 基本的に禁止していません 「マルチポストで何であれ、自由に質問して、自由に答えて、みんなで学んで解決してゆこう」 という考え方です
[マルチポストを見つけた方]がマルチポストであることを書くのも自由
そのサイトのアドレスも書くのも自由です
少なくともそのアドレス情報は有効に使われます
回答中の方が見つけた場合その書き込みからの退散も自由です
[マルチポストで書き込んだ方]は他の掲示板で解決した内容をこのボードでも公開して、 書き込みが将来他の人の役に立つように協力してください

↑の協力くらいはしてもバチは当たらないとおもうのですが、その気は無いですかね?

(もこな2) 2019/04/26(金) 19:32


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.