Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2007)
並べ替えのプロシージャが.Applyで止まる
投稿日時: 19/09/26 14:08:09
投稿者: o_taroh

乱数で1行へ6個、50行のデータを作るのですが、データ1行毎に(1行仕上がった都度)下記のプログラムで並べ替えをします。
Sub SortStoL(r As Integer)
  Dim rs1 As String, rs2 As String
    rs1 = "K" & Trim(Str(r))
    rs2 = "P" & Trim(Str(r))
    Range(rs1 & ":" & rs2).Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(rs1), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range(rs1 & ":" & rs2)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
実行すると無限ループに入ったような(円)が出て終わりません、pauseを採ってみると実行時エラー'1004'のメッセージが出るので、「デバッグ」をクリックしてみると.Applyが黄色になって止まっていています、次にリセットボタンをクリックするとデータは目的通りに仕上がっています。
ちなみに、End Subにブレークポイントを設定してワンステップづつ実行すると問題なく結果は出ます。
私にはまったく見当が付きません、どんな問題があるのでしょうか、よろしくお願いいたします。

回答
投稿日時: 19/09/26 15:33:37
投稿者: WinArrow
投稿者のウェブサイトに移動

2つ、質問
 
>実行時エラー'1004'のメッセージが出るので
この行はどこですか?
 
引数;r
の値は?

回答
投稿日時: 19/09/26 16:12:23
投稿者: おばちゃん

自分のところで動かしたため引数を削除しました。

Sub SortStoL()

Dim rs1 As String
Dim rs2 As String
Dim ws As Worksheet

    Set ws = ActiveWorkbook.Worksheets("Sheet1")
    
     rs1 = "K1"
     rs2 = "P10"
     
     ws.Sort.SortFields.Clear
     ws.Sort.SortFields.Add Key:=ws.Range(rs1), _
         SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
     With ws.Sort
         .SetRange ws.Range(rs1 & ":" & rs2)
         .Header = xlNo
         .MatchCase = False
         .Orientation = xlSortRows
         .SortMethod = xlPinYin
         .Apply
     End With
     
    Set ws = Nothing
 End Sub

ActiveとかSelectとか使用せずに、Worksheet変数に格納後実行したらエラーは出ませんでした。
 
.Orientation = xlLeftToRightとありましたが、
.OrientationはxlSortColumns:上から下へ
•xlSortRows:左から右への2タイプしかありません。

回答
投稿日時: 19/09/26 16:32:33
投稿者: sk

引用:
乱数で1行へ6個、50行のデータを作るのですが、データ1行毎に(1行仕上がった都度
下記のプログラムで並べ替えをします。

引用:
実行すると無限ループに入ったような(円)が出て終わりません

SortStoL 自体の問題ではなく、SortStoL を呼び出している
(データを作る操作を含む)親プロシージャ側の問題なのではないでしょうか。

投稿日時: 19/09/26 17:08:51
投稿者: o_taroh

 
ありがとうございます
以下のプロシージャで呼びだしますが、この部分だけで実行すると問題ありませんでした、作成途中でこれ以前にいくつかのプロシージャでを経ていますのでその方に問題があるのかもしれません、一応解決済みにしてチェックしてみます。
解決できないときは又よろしくお願いいたします。
 
Sub Mk6Num()
    Dim c As Integer, rs1 As String, rs2 As String, n As Integer, m As Integer
    Dim r As Integer, cc As Integer
     
    For r = 628 To 677
        c = 11
        Do
            Randomize Time
            n = Int((78 - 36 + 1) * Rnd() + 36)
            m = Cells(3, n)
            このFoe Nextは数値の重複を避けるためどす
            For cc = 11 To 16
                If m = Cells(r, cc) Then GoTo LB1
            Next cc
            Cells(r, c) = m
            c = c + 1
LB1:
        Loop While c <= 16
        SortStoL r
        c = 3
    Next r
     
End Sub