Dim q As Long Worksheets("ボタン").Select If Cells(2, 2) = "2020/8/1" Then q = 25 ElseIf Cells(2, 2) = "2020/7/1" Then q = 24 ElseIf Cells(2, 2) = "2020/6/1" Then q = 23 ElseIf Cells(2, 2) = "2020/5/1" Then q = 22 ElseIf Cells(2, 2) = "2020/4/1" Then q = 21 ElseIf Cells(2, 2) = "2020/3/1" Then q = 20 ElseIf Cells(2, 2) = "2020/2/1" Then q = 19 ElseIf Cells(2, 2) = "2020/1/1" Then q = 18 ElseIf Cells(2, 2) = "2019/12/1" Then q = 17 ElseIf Cells(2, 2) = "2019/11/1" Then q = 16 ElseIf Cells(2, 2) = "2019/10/1" Then q = 15 ElseIf Cells(2, 2) = "2019/9/1" Then q = 14 ElseIf Cells(2, 2) = "2019/8/1" Then q = 13 ElseIf Cells(2, 2) = "2019/7/1" Then q = 12 ElseIf Cells(2, 2) = "2019/6/1" Then q = 11 ElseIf Cells(2, 2) = "2019/5/1" Then q = 10 ElseIf Cells(2, 2) = "2019/4/1" Then q = 9 End If Worksheets("over8").Select Dim i, j, b As Long For i = 5 To 30 If Cells(q, i) <= Cells(q, i + 1) Then ElseIf Cells(q, i) > Cells(q, i + 1) Then Call FunctionExchange(i, i + 1) Next End Sub
Function Exchange(R1 As Integer, R2 As Integer)
Dim swap As Integer
swap = R2
R2 = R1
R1 = swap
If R2 - R1 = 1 Then '①入れ替える行が隣り合う場合
'R2を切り取り、(R1+1)列に挿入
Rows(R1).Cut
Rows(R2 + 1).Insert
Else '②入れ替える行が隣り合わない場合(①以外)
'R2を切り取り、(R1+1)列に挿入
Rows(R2).Cut
Rows(R1 + 1).Insert
'R1を切り取り、(R2+1)列に挿入 Rows(R1).Cut Rows(R2 + 1).Insert
End If
End Function
を実行するとSub 整列()の部分が黄色くなりエラーになります。 プロシージャの外にはなっていないと思うのですが どうしたらいいでしょうか… また、ついでに前半部分をコンパクトに書き直すアドバイスもいただけると幸いです。 表があり、対象月の営業成績を比較するため 対象月ごとに列を選択するコードを書いたつもりです。 追記 画像を追加しました こちらの営業成績を対象月を指定してバブルソートするようにコードを作成途中で 途中確認のため、実行したらプロシージャのエラーで止まりました。 Call FunctionExchange(i, i + 1) と、下のfunction部分を削除してもエラーは変わりませんでした。
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
ご指摘ありがとうございます
そもそも、なにをなさりたいのか、over"シートの内容を画像で表示し、説明していただけませんでしょうか。
VBA のコードについてインデントを見直してもらえますか?
こちらのツールを用いると VBA のコード整形をしてくれます。
https://www.automateexcel.com/vba-code-indenter/
別で開いていた標準モジュールにプロシージャエラーの原因がいました…
エラーについては解決しました。
皆様ありがとうございます。
具体的なセルの位置が判りません。
「2017/12/01」が表示されているセルの位置は何行目の何列ですか。

回答2件
あなたの回答
tips
プレビュー