質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

8308閲覧

VBA プロシージャの外では無効です。の直しどころがわからない

dandadan

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/01/19 01:57

編集2022/01/19 08:15

イメージ説明```swift
Sub 整列()

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部分を削除してもエラーは変わりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/01/19 02:24

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
dandadan

2022/01/19 02:30

ご指摘ありがとうございます
tatsu99

2022/01/19 02:44

そもそも、なにをなさりたいのか、over"シートの内容を画像で表示し、説明していただけませんでしょうか。
dandadan

2022/01/19 08:34

別で開いていた標準モジュールにプロシージャエラーの原因がいました… エラーについては解決しました。 皆様ありがとうございます。
tatsu99

2022/01/19 08:41

具体的なセルの位置が判りません。 「2017/12/01」が表示されているセルの位置は何行目の何列ですか。
guest

回答2

0

自己解決

別で開いていた標準モジュールにプロシージャの外にコードが書いてあるものがありました。

投稿2022/01/19 08:34

dandadan

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Call FunctionExchange(i, i + 1)
これは、”FunctionExchange”というSub プロシージャを読んでいますが、そのようなものはありません。

投稿2022/01/19 03:12

tatsu99

総合スコア5436

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問