[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『このマクロを修正してほしいです』(ひろ)
いつもお世話になってます
https://sports.yahoo.co.jp/keiba/race/list/25070101
をエクセルのシートにコピーペーストして以下のマクロを実行した所
Sub 登録馬テスト()
'
' 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 Long
Dim レース番号 As Variant
Dim レース名 As Variant
Dim 時刻 As Variant
Dim 日付 As Variant
Dim 距離 As Variant
Dim shp As Shape
cnt = 1
For r = min_row To max_row
If Worksheets("マクロ前").Cells(r, 1).Value Like "*R" Then
'データ取得
レース番号 = Worksheets("マクロ前").Cells(r, 1).Value
レース名 = Worksheets("マクロ前").Cells(r, 2).Value
時刻 = Worksheets("マクロ前").Cells(r + 1, 2).Value
日付 = Worksheets("マクロ前").Cells(r - 12, 1).Value
Worksheets("書き出し").Cells(cnt, 3).Value = レース番号
Worksheets("書き出し").Cells(cnt, 4).Value = レース名
Worksheets("書き出し").Cells(cnt, 5).Value = 時刻
Worksheets("書き出し").Cells(cnt, 2).Value = 日付
cnt = cnt + 1
距離 = Worksheets("マクロ前").Cells(r, 4).Value '処理B
Worksheets("書き出し").Cells(cnt, 8).Value = 距離 '処理B
cnt = cnt + 1 '処理B
End If
Next r
Sheets("書き出し").Select
Range("B1").Select
Selection.Copy
Range("B1:B7").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("H1").Select
Selection.Phonetics.Visible = True
Selection.Delete Shift:=xlUp
Range("H2").Select
Selection.EntireRow.Delete
Range("H3").Select
Selection.EntireRow.Delete
Range("H4").Select
Selection.EntireRow.Delete
Columns("E:E").Select
Selection.TextToColumns Destination:=Range("E1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
True
Range("E2:E8").Select
Selection.Copy
Range("I2").Select
ActiveSheet.Paste
Columns("E:E").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
Columns("B:B").Select
Selection.Replace What:="*年", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("i:i").Select
Selection.Replace What:="(*", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("B:B").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
Columns("C:C").Select
Selection.Replace What:="r", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("C:C").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("D:D").Select
Selection.NumberFormatLocal = "G/標準"
Range("D2").Select
Application.ScreenUpdating = True
End Sub
9
10
11
となってて
それを
9
10
11
としたいのですがどうかえたら良いでしょうか
よろしくお願いいたします
< 使用 Excel:Excel2019、使用 OS:Windows10 >
【過去ログ】 [[20241129180613]] 『こんなマクロを作りたいのですが』(ひろ) [[20190131212103]] 『2019年(・・・)を(から隣のセルに区切りたいのですが』(ひろ) [[20190130202008]] 『特定の単語の横のセルの値を取得して他のセルに入』(ひろ) [[20190129114306]] 『特定の列の特定の単語を検索して その単語の横の列に文字を入れたい』(ひろ) [[20190121213642]] 『3つのマクロを一つにまとめたい』(ひろ) [[20190118172923]] 『webクエリで取得した表の処理について』(ひろ) [[20190114213127]] 『競馬の出馬表処理 サンプルファイル付き』(ひろ) [[20180302185720]] 『難しい抽出…』(ひろ)
もしも、心当たりがあるようならば、それなりのスキルはあるとおもいますので、何処で詰まっているのか具体的に挙げて質問されてはいかがでしょうか?
■2
いや、心当たりは無く別人だと言うことであれば、マクロの記録で得られたコードのようですから、それぞれの命令の意味を調べて、SelectionやActiveSheetに依存しないように一旦整理してみてはどうですか?
■3
なお、↓だけみれば、処理が終わった後に空白セルを含む行全体を削除して詰めればよいのではないでしょうか?
> 9 > 10 > > 11 > となってて > それを > 9 > 10 > 11
(もこな2) 2025/01/01(水) 22:17:15
(ひろ) 2025/01/01(水) 23:15:19
前者は、どの列の話かわかりませんが、(下から)順番に見ていけばOKでしょう。
Sub 値が空白なら削除して詰める()
Dim i As Long
With ActiveSheet
For i = .Cells(.Rows.Count, "A").End(xlUp).Row To 1 Step -1
If .Cells(i, "A").Value = "" Then
.Rows(i).[削除する命令]
End If
Next
End With
End Sub
で
後者は【マクロの記録】であたりが付けられるのではありませんか?
(もこな2) 2025/01/02(木) 10:39:45
(匿名) 2025/01/02(木) 10:47:14
|[A] |[B]|[C] |[D] |[E] |[F] |[G]
[1]|日付 |R |レース名 |コース・回り|距離 |クラス |斤量
[2]|2025/1/5| 9|鶴舞特別 |芝・左 |2200m|4歳以上2勝クラス(1000万下)|定量
[3]|2025/1/5| 10|門松ステークス |ダート・左 |1200m|4歳以上3勝クラス(1600万下)|定量
[4]|2025/1/5| 11|スポーツニッポン賞京都金杯?GIII|芝・左 |1600m|4歳以上オープン |ハンデ
Sub Macro1()
Dim v, w, i&, j&, r&
Dim d As Date
With Worksheets("マクロ前")
v = Range(.Cells(1), .Cells(Rows.Count, "B").End(xlUp))
End With
w = Application.Transpose(Split("日付 R レース名 コース・回り 距離 クラス 斤量"))
For i = 1 To UBound(v)
If Left(v(i, 1), 5) = "2025年" Then d = Split(v(i, 1), "(")(0)
If v(i, 1) Like "?R" Or v(i, 1) Like "??R" Then
r = UBound(w, 2) + 1
ReDim Preserve w(1 To 7, 1 To r)
w(1, r) = d
w(2, r) = Replace(v(i, 1), "R", "")
w(3, r) = v(i, 2)
For j = 0 To 3
w(4 + j, r) = Split(v(i + 1, 2))(j)
Next
End If
Next
Worksheets.Add(after:=Worksheets(Worksheets.Count)) _
.Cells(1).Resize(UBound(w, 2), 7) = Application.Transpose(w)
End Sub
(お年玉) 2025/01/02(木) 10:50:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.