[[20210629194817]] 『コードが動かなくなりました』(うーん) ページの最後に飛ぶ

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

 

『コードが動かなくなりました』(うーん)

はじめまして
以前競馬の成績をシートにコピペして一覧形式にするマクロをつくりました 
でも最近動かしたら
←のところで型がいっちしませんと出るようになりました
なぜでしょうか
コード

Option Explicit
Sub 成績1()
'
' Macro4 Macro
Dim max_row As Long
Dim min_row As Long
'開始行と最終行の行番号取得
min_row = Worksheets("マクロ前").UsedRange.Row
max_row = Worksheets("マクロ前").UsedRange.Rows.Count - min_row - 1

  Application.ScreenUpdating = False
Dim cnt As Long
Dim r As Variant
Dim レース番号 As Variant
Dim レース名 As Variant
Dim 距離1 As Variant
Dim 距離2 As Variant
Dim 距離3 As Variant
Dim 斤量 As Variant
Dim 斤量2 As Variant
Dim 斤量3 As Variant
Dim 騎手1 As Variant
Dim 騎手2 As Variant
Dim 騎手3 As Variant
Dim 馬体重 As Variant
Dim 一着 As Variant
Dim 二着 As Variant
Dim 三着 As Variant
Dim 四着 As Variant
Dim 五着 As Variant
Dim 単勝 As Variant
Dim 複勝 As Variant
Dim 複勝2着 As Variant
Dim 複勝3着 As Variant
Dim 性齢 As Variant
Dim 日付1 As Variant
Dim 日付2 As Variant
Dim 場1 As Variant
Dim クラス As Variant
Dim タイム As Variant
Dim shp As Shape
Dim MyRNG As Range
Dim MyRNG2 As Range

        With ActiveSheet
            For Each MyRNG In .Range("A1", .Cells(.Rows.Count, "A").End(xlUp))
                If MyRNG.Value Like "*R*" Then
                    MyRNG.Copy MyRNG.Offset(, 1)

                End If
                Next MyRNG
        End With

cnt = 1

 Application.DisplayAlerts = False
        Sheets("マクロ前").Select
            Cells.Select
    Range("B1").Activate
    Selection.UnMerge
'
Columns("b:b").Select
    Selection.Replace What:="*R", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    Columns("B:L").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("A:A").Select
            Selection.Replace What:="(混)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="[指]", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="(特指)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="(国際)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="(指)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="サラ系", Replacement:="サラ系 ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="(牝)", Replacement:="牝 ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="( 別定 )", Replacement:=" 別定 ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="( 馬齢 )", Replacement:=" 馬齢 ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="( 定量 )", Replacement:=" 定量", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="(ハンデ)", Replacement:=" ハンデ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Cells.Replace What:="( 別定 )", Replacement:=" 別定 ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="芝右", Replacement:="芝右 ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="芝左", Replacement:="芝左 ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="ダート右", Replacement:="ダート右 ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="ダート左", Replacement:="ダート左 ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
          Selection.Replace What:="年", Replacement:="年 ", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Range("A10").Select
    Columns("A:A").Select

    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(1, 1), TrailingMinusNumbers:=True
    Columns("B:L").Select
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.Delete Shift:=xlToLeft
    Columns("F:G").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
       Columns("C:C").Select
    Range("C203").Activate
'一時的無効化
'Selection.Replace What:="*(", Replacement:="(", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
 '   Selection.Replace What:="(", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
  '  Selection.Replace What:=")", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

        With ActiveSheet
            For Each MyRNG2 In .Range("c1", .Cells(.Rows.Count, "c").End(xlUp))
                If MyRNG2.Value Like "牝" Then
                    MyRNG2.Copy MyRNG2.Offset(-1, 3)

                End If
                Next MyRNG2
        End With

Columns("E:E").Select

    Range("E42").Activate
    Selection.TextToColumns Destination:=Range("E1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(1, 1), TrailingMinusNumbers:=True

Columns("F:G").Select

    Range("F54").Activate
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").Select
    Range("E49").Activate
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.Delete Shift:=xlToLeft
      Columns("C:C").Select
    Range("C155").Activate
    Selection.Replace What:="4歳上", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    For r = min_row To max_row

 If Worksheets("マクロ前").Cells(r, 1).Value Like "202?年" Then ←
'データ取得1
日付1 = Worksheets("マクロ前").Cells(r, 2).Value
場1 = Worksheets("マクロ前").Cells(r, 3).Value

End If

 If Worksheets("マクロ前").Cells(r, 1).Value Like "*R" Then
'データ取得

レース番号 = Worksheets("マクロ前").Cells(r, 1).Value
レース名 = Worksheets("マクロ前").Cells(r + 2, 1).Value
クラス = Worksheets("マクロ前").Cells(r + 2, 2).Value
距離1 = Worksheets("マクロ前").Cells(r + 2, 3).Value
距離2 = Worksheets("マクロ前").Cells(r, 5).Value
一着 = Worksheets("マクロ前").Cells(r + 5, 4).Value
二着 = Worksheets("マクロ前").Cells(r + 6, 4).Value
三着 = Worksheets("マクロ前").Cells(r + 7, 4).Value
騎手1 = Worksheets("マクロ前").Cells(r + 5, 7).Value
騎手2 = Worksheets("マクロ前").Cells(r + 6, 7).Value
騎手3 = Worksheets("マクロ前").Cells(r + 7, 7).Value
斤量 = Worksheets("マクロ前").Cells(r + 5, 6).Value
タイム = Worksheets("マクロ前").Cells(r + 5, 9).Value

'着順終了
単勝 = Worksheets("マクロ前").Cells(r + 9, 3).Value
複勝 = Worksheets("マクロ前").Cells(r + 10, 3).Value
複勝2着 = Worksheets("マクロ前").Cells(r + 11, 3).Value
複勝3着 = Worksheets("マクロ前").Cells(r + 12, 3).Value
性齢 = Worksheets("マクロ前").Cells(r + 5, 5).Value

'データ書き出し
Worksheets("書き出し").Cells(cnt, 1).Value = 日付1
Worksheets("書き出し").Cells(cnt, 2).Value = 場1
Worksheets("書き出し").Cells(cnt, 3).Value = レース番号
Worksheets("書き出し").Cells(cnt, 4).Value = レース名
Worksheets("書き出し").Cells(cnt, 5).Value = クラス
Worksheets("書き出し").Cells(cnt, 6).Value = 距離1
Worksheets("書き出し").Cells(cnt, 7).Value = 距離2
Worksheets("書き出し").Cells(cnt, 8).Value = 一着
Worksheets("書き出し").Cells(cnt, 9).Value = 二着
Worksheets("書き出し").Cells(cnt, 10).Value = 三着
'着順終了
Worksheets("書き出し").Cells(cnt, 11).Value = "払戻金"
Worksheets("書き出し").Cells(cnt, 12).Value = 単勝
Worksheets("書き出し").Cells(cnt, 13).Value = 複勝
Worksheets("書き出し").Cells(cnt, 14).Value = 複勝2着
Worksheets("書き出し").Cells(cnt, 15).Value = 複勝3着
Worksheets("書き出し").Cells(cnt, 16).Value = 性齢
Worksheets("書き出し").Cells(cnt, 17).Value = 騎手1
Worksheets("書き出し").Cells(cnt, 18).Value = 騎手2
Worksheets("書き出し").Cells(cnt, 19).Value = 騎手3
Worksheets("書き出し").Cells(cnt, 21).Value = 斤量
Worksheets("書き出し").Cells(cnt, 22).Value = タイム

cnt = cnt + 1

End If

Next r

    Sheets("書き出し").Select
    Cells.Select
    Selection.Replace What:="円", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
            Selection.Replace What:="r", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
            Selection.Replace What:="サラ系", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
   Columns("C:C").Select
    Selection.NumberFormatLocal = "G/標準"
    Columns("D:D").Select
    Selection.Replace What:="(*)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("C:C").Select
    Selection.Replace What:="r", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("A:A").Select
    Selection.Replace What:="(*)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Range("A1:a100").Select
    Selection.Copy
    Sheets("成績2").Select
Range("C1").Select
    Selection.End(xlDown).Offset(1, 0).Select
    ActiveSheet.Paste
    Sheets("書き出し").Select
    Range("c1:p100").Select
    Selection.Copy
    Sheets("成績2").Select
  Range("e1").Select
    Selection.End(xlDown).Offset(1, 0).Select
    ActiveSheet.Paste
        Columns("v:v").Select
    Selection.NumberFormatLocal = "m:ss.0"
    Range("b1").Select
Columns("q:q").Select
    Selection.NumberFormatLocal = "G/標準"
    Sheets("書き出し").Select
     Cells.Select
    Selection.ClearContents
    Sheets("マクロ前").Select
    ActiveSheet.DrawingObjects.Select
    ActiveSheet.Shapes.SelectAll
    ActiveSheet.Shapes.SelectAll
    ActiveSheet.DrawingObjects.Select
        Selection.Delete
    Cells.Select
    Selection.ClearContents
    Range("a1").Select
     Application.DisplayAlerts = True
      Application.ScreenUpdating = True
End Sub
サイト https://keiba.yahoo.co.jp/race/price/21050301/
です助けてください

< 使用 Excel:Excel2019、使用 OS:Windows10 >


>Worksheets("マクロ前").UsedRange.Row

これ、Range("A1:E20").row
とやっているのと何ら変わりがないと思いますが・・・。
ちゃんと意味が解っているんですかね?
(不明) 2021/06/29(火) 20:19


以前までは動いてて突然エラーになりました
もちろんコードは触ってません
(うーん) 2021/06/29(火) 20:33

>もちろんコードは触ってません
そういう事なら他も含め説明しても意味がないので他の回答者からの返答をお待ち下さい。
(不明) 2021/06/29(火) 20:54

 こんばんは!
 今まで動いていた方が奇跡であっていつ動かなくなってもおかしくないコードだから仕方がないとしか言えません。
なので取り敢えず

 min_row = Worksheets("マクロ前").UsedRange.Row
 max_row = Worksheets("マクロ前").UsedRange.Rows.Count - min_row - 1

 のUsedRange とか
 Selection とかを全部やめてきちんと書く

 それからコードを書くということは、デバッグするということで書くだけなら極端に言えば誰でも書けるわけです。

 型の宣言も なんでもかんでも Variant はなくて ちゃんと指定する

 そんなこんなでとても面倒の見れるようなコードじゃないのでもう一度全部書き直した方がいいです。

 まぁ、その黄色くなっているところにカーソルを当てて変数の中身をみてみるとか、、、ぐらいで
 動かないから何とかしてくださいと言われてもこっちが「何とかしてください」です。
(SoulMan) 2021/06/29(火) 21:06

Excel2013で試してみたがError無し

(?) 2021/06/29(火) 21:33


 あっ、そうなんですね。。。
検証ご苦労様です。ありがとうございます。
ということは、不確定要素が多すぎて再現性がないということでしょうか?

 では、その マクロ前 というシートを新規に作成してみるとかでしょうか?
(SoulMan) 2021/06/29(火) 21:38

えっエラーがなかったですかなんででしょうか

(ひろくん) 2021/06/29(火) 22:13


 ニックネームなぜ変更した。
 >なんででしょうか
 貴方のExcelがおかしいのでは?
 >マクロですかどういうマクロを書けばいいですか
 >(ひろくん) 2021/04/25(日) 22:43
 と言っているので本当に自分で作成したのか疑う予知あり。

(?) 2021/06/29(火) 22:47


掲示されたマクロは、チラ見程度で良く見ていませんが
エラーはでません。

ただ、エラーの出てしまう場合もありますね。
それはコードを理解できていないからかと思います。
(あみな) 2021/06/30(水) 05:59


ざっと見ただけなので、エラー解消のアドバイスではなく感想ですが。

■1
VBAの世界では基本的にシートやセル(オブジェクトといいます)を明示すれば、いちいち選択したりアクティブにしたりする必要はありません。
さらに、「標準モジュール」でシートの指定を省略すると、アクティブシートを指定したものとして扱われます。
したがって、複数のシートを相手にする処理を考えるのであれば、きちんとオブジェクトを修飾(指定)するようにしたほうが良いでしょう。

■2
「もちろんコードは触ってません」とのことですが、おかしいのであれば、むしろちゃんと自己検証して修正すべきでしょう。
そして検証作業には、やはり【ステップ実行】が有用であるとおもいますのでトライしてみてはどうですか?

※どうも↓と同一の方のようですが再掲します。
[[20210625225354]] 『シートの並べ替えで』(ひろくん)

 【ステップ実行】
https://www.239-programing.com/excel-vba/basic/basic023.html
http://plus1excel.web.fc2.com/learning/l301/t405.html

また、以下も知っておいて損は無いと思います。

 【イミディエイトウィンドウ】
https://www.239-programing.com/excel-vba/basic/basic024.html
https://excel-ubara.com/excelvba1/EXCELVBA486.html

 【ローカルウィンドウ】
https://excel-ubara.com/excelvba4/EXCEL266.html
http://excelvba.pc-users.net/fol8/8_2.html

 【ブレークポイント】
https://www.239-programing.com/excel-vba/basic/basic022.html
https://www.tipsfound.com/vba/01010

■3
マクロの実行に寄与するものではありませんが、インデント(字下げ)をするのもデバッグ作業には有効だと思いますので、こだわりが無ければキチンとインデントを付けることをお勧めします。
(現状だと、どこからどこまでがループなのかぱっと見わかりませんよね?)

(もこな2) 2021/06/30(水) 08:05


ありがとうございますでも私はもこな2さんのいうひろくんさんは知りませんが
とりあえずみてみます
(うーん) 2021/06/30(水) 17:27


隠し事をして嘘をついているように見える気がする?

($$) 2021/06/30(水) 18:24


■4
>私はもこな2さんのいうひろくんさんは知りません
そうですか↓はトピ主ではないのですね。失礼しました。
 >えっエラーがなかったですかなんででしょうか
 >(ひろくん) 2021/06/29(火) 22:13

まぁいずれにせよ、知っておいて損は無いと思いますので確認してみてください。

■5
対象オブジェクトを明確にすべきことは既に指摘していますが、他にも↓のように既定値はわざわざ指定しない(省略する)というのも、コードを見やすくする上では有用であるとおもいます。

        Columns("A:A").Select
            Selection.Replace What:="(混)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="[指]", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="(特指)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="(国際)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    ↓

        With ActiveSheet.Columns("A:A")
            .Replace What:="(混)", Replacement:="", LookAt:=xlPart
            .Replace What:="[指]", Replacement:="", LookAt:=xlPart
            .Replace What:="(特指)", Replacement:="", LookAt:=xlPart
            .Replace What:="(国際)", Replacement:="", LookAt:=xlPart

また、何度も置換処理をするのであれば、どこかに置換一覧表を作成しておいて、ループ処理にするという手もありますね。

■6
また、好みによるのでしょうが、↓のように1度しか出てこないものをいちいち変数に格納するのも効率が悪いようにおもいますので、コピペする処理にしてみたり、Valueプロパティを直接参照するようにしてもよいでしょう。

 騎手1 = Worksheets("マクロ前").Cells(r + 5, 7).Value
 騎手2 = Worksheets("マクロ前").Cells(r + 6, 7).Value
 騎手3 = Worksheets("マクロ前").Cells(r + 7, 7).Value
 Worksheets("書き出し").Cells(cnt, 17).Value = 騎手1
 Worksheets("書き出し").Cells(cnt, 18).Value = 騎手2
 Worksheets("書き出し").Cells(cnt, 19).Value = 騎手3

■7
>←のところで型がいっちしませんと出るようになりました
とりあえず、その部分だけ抜き出してどの【行】でエラーが出るかチェックしてみたらどうですか?

    Sub test()
        Dim r As Long

        With Worksheets("マクロ前")
            For r = .UsedRange.Row To .UsedRange.Rows.Count - min_row - 1
                If .Cells(r, 1).Value Like "202?年" Then MsgBox r & "行目"
            Next
        End With
    End Sub

(もこな2) 2021/06/30(水) 18:44


標準偏差は、データのバラツキ具合を表す指標として使われます。データのバラツキ具合を表す指標としては、標準偏差のほかに分散も使われます。
標準偏差は、分散の平方根です。標準偏差のほうがデータと同じ視点で見ることができるので、わかりやすいといえるでしょう。
https://www.ceodata.com/stdev-stdevs-stdeva-stdevp/
(excel) 2021/06/30(水) 19:21


本題と何ら関係ありませよ。
回答先が違うのでは。
() 2021/06/30(水) 20:07

コメント返信:

[ 一覧(最新更新順) ]


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