No.4ベストアンサー
- 回答日時:
#2の回答者です。
長文でまとまっていませんが、私の考えたレポートです。
こちらは、Excel 2013ですが、一応、通して動かしてみて完結はするのですが、途中、何か良くわからない動きがあります。このコードには、どちらかというと「気になる」の部分はあります。しかし、それ以上に、ハングしたかなって思わせるような状態で、マクロが終了しているのです。それが何か今のところは分かりません。
どうも、ステップで進める分には、まったくその問題はみられません。
そのコードで問題になる部分は、2つですが、結論からすると、直しても変わりませんでした。
> Dim h As Integer 'データ集積シートの最終行
これは、Integer ではなくて、Long 型のほうがよいです。
ついでに、Dim i As Long '入力表シートの行数 もLong型のほうがよいのは、PCの扱うデータは、32bit が主なので、Integer 型は、一旦、Long型に変換しているので、なるべく、Integer 型は使わないほうがよいとしています。
>h = Worksheets("集積_税制").Range("A65536").End(xlUp).Row + 1
これは、最初、ループの外で行って、書き込みが完了したら、
h = h+1
とします。ただ、それでも、問題はほとんど改善されませんでした。
ふつうは、マクロが抜けるという現象からしても、私の試した感じでは、どうやらメモリリークの現象に似ています。アンタッチャブルな部分に触れると、マクロは急停止してしまいます。
なお、Select Case [値] ←ここの値は、文字列でも数値でも構わないです。ただ、コードを見る限りは、数値になっているようですので、それ自体は問題なかろうと思います。
ボタンは、フォームオブジェクトのボタンをお使いになっているものだとは思いますが、ActiveX ですと、そのコードですと、少し問題が出る可能性はあります。
それで、私なりの書き方でコードを書いてみましたので、そちらで診ていただけませんか?
'// 基本的には、標準モジュールです。
Sub Integrated_Taxes()
Dim i As Long '入力表シートの行数
Dim h As Long 'データ集積シートの最終行
Dim j As Long '新しく加えた変数
Dim acSh As Worksheet '現在の表
Dim iTaxSh As Worksheet
'***設定****
Set acSh = ActiveSheet 'このシートは「入力表_税制」か?
Set iTaxSh = Worksheets("集積_税制")
Application.ScreenUpdating = False
h = iTaxSh.Cells(Rows.Count, 1).End(xlUp).Row + 1
With acSh
For i = 3 To 25 '入力表の入力可能行数
If .Cells(i, 3).Value > 0 And .Cells(i, 3).Value < 4 Then
j = .Cells(i, 3).Value + 3
iTaxSh.Cells(h, 1).Resize(, 3).Value = .Cells(i, 7).Resize(, 3).Value
iTaxSh.Cells(h, j).Value = .Cells(i, 10).Value
h = h + 1
End If
Next i
End With
Application.ScreenUpdating = True
iTaxSh.Select
MsgBox "取り込みが終了しました!"
Worksheets("入力表_税制").Select
Range("B1").Select
End Sub
'//
以上です。
うまくいきました。ありがとうございます。やはりコードが私より全然スマートです。私もまだまだですね。結局どこが原因かは特定できないんですよね。。。
でもご教示のとおりのコードでうまくいったので何よりです。
(ちなみにボタンはフォームオブジェクトです。)
No.5
- 回答日時:
エクセルのVBAエディタで、ツール ー オプションを開いて見てください。
そこのエラートラップを変更すると止まり方が変わるから、
ステップ実行できるかもしれません。
また、ソースコードの中にオンエラー文を入れて、
もしジャンプするならそこに stop 文と resume 文を入れてみてください。
健闘を祈ります。
ありがとうございます。まだ勉強不足でオンエラー文を理解していないためその辺りのコードを使いこなすのはもう少し先になりそうです。
本文にも記載したとおり、ステップ実行すると問題なく動きます。
No.3
- 回答日時:
ステップ実行でcaseはちゃんと通ってます?
確認しました?
現状、caseでは数値ですが、セル値が文字列になってません?
これは想像ですが、2016だと型判定が厳密になってるのかもしれません。
case "1" だと上手くいくかもね。
No.2
- 回答日時:
あくまでも、一般論で返事させていただきます。
>本文でも書いたように問題の箇所はありません。ステップ実行もして確認済みです。
ご自身が書いたコードは問題はないのだから、見せる必要などなく、Excel2016の問題ではないかという予想を裏付ける解答をお望みなのかもしれません。しかし、実際、ひとつのエラーや不具合が、ひとつの問題をあぶり出すような原則論は、VBAでは、それほど多くはありません。
経験的には、バージョンアップした後に、そのような問題が発生するのは、VBA自体の言語の甘さで書かれたコードが、今までの前のバージョンでコードを走らせていたのが、バージョンアップで、より厳密になってエラーを出すということがあります。ほとんどの人は、VBAは独学で、正しい書き方を知る人などはいません。他の言語から、Excel VBAなどを通して、動かそうとする時に、初めて、暗黙のプロパティなどが通用しないことを知るわけです。
残念ながら、今のままでのご質問の情報だけでは、直接の解答に繋がるものは見つかりません。
>カウンタ変数に3から25を代入しています。
3だけしか処理しなかったというのは、例えば、カウンターから、その都度、オブジェクト(OLEが多いようです)を呼び出す時に、そのような現象があります。オブジェクトを、ステップで実行する時は、維持できても、本番で実行すると、それを保てないままに、抜けてしまうというわけです。
これは、あくまでも私の想像の範囲の事象です。その解決方法は、コードを含めて全体の状態を公開していただくか、この私の話をヒントにご自身で探すか、どちらかだと思います。また、かなり望みは薄いのですが、VBEで、ツールーオプション-全般で、エラートラップやコンパイルの方法を変えてみるとか、それも、一つの選択としてあるかもしれません。
ありがとうございます。ボタンを押すとうまくいかないが、VBEで直接実行するとうまくいく。ボタンを削除してもう一回ボタンを作り直してからマクロ登録し直したが、やはりだめ。
という経過からボタンに原因があるのではと推測しました。調べるとOfficeのアップデートに原因がある記事もみかけました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル マクロ写真帳に一括で...
-
VBA Shapes コピーと名前
-
再度,ExcelVBA,public変数が消える
-
VBAで行コピーして挿入
-
エクセル連番自動印刷について
-
エクセルファイルを値でのみし...
-
VB.NETによるEXCELの行挿入
-
【ExcelVBA】マクロブックを通...
-
CSVデータをEXCELのテーブルに...
-
セルに入力するたびにマクロを...
-
Excelでマクロ実行中に画面を固...
-
VBAで保存しないで閉じると空の...
-
WPSOffice_マクロの有効化について
-
マクロの保存先、開いてるすべ...
-
複数のマクロボタンをまとめて...
-
エクセル ボタンに設定したマク...
-
【Excel VBA】マクロでExcel自...
-
Excel マクロの編集がグレーに...
-
エクセルの表を複数枚印刷した...
-
Excelのマクロでボタンを押すと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルファイルを値でのみし...
-
Excelでマクロ実行中に画面を固...
-
VBA Shapes コピーと名前
-
エクセル連番自動印刷について
-
【Excel】マクロでページを追加...
-
セルに入力するたびにマクロを...
-
エクセルVBAで納期管理システム...
-
エクセル マクロ写真帳に一括で...
-
エクセル 図形の寸法を取得したい
-
EXCEL 行番号や列番号が選択で...
-
ブックの共有でVBAエラー
-
EXCEL VBA 他のアプリケーショ...
-
ExcelのVBAで自動採番したい...
-
【ExcelVBA】マクロブックを通...
-
シート名を記入する
-
再度,ExcelVBA,public変数が消える
-
エクセルファイルの回数期限の...
-
エクセル メニューバーの中の...
-
worksheet_changeの一時無効化
-
VB.NETによるEXCELの行挿入
おすすめ情報
Sub syuseki_zeisei()
Dim i As Integer '入力表シートの行数
Dim h As Integer 'データ集積シートの最終行
Application.ScreenUpdating = False
For i = 3 To 25 '入力表の入力可能行数
h = Worksheets("集積_税制").Range("A65536").End(xlUp).Row + 1
Select Case Range("C" & i).Value
Case 1
Range("G" & i, "I" & i).Copy
Worksheets("集積_税制").Range("A" & h).PasteSpecial Paste:=xlPasteValues
Range("J" & i).Copy
Worksheets("集積_税制").Range("D" & h).PasteSpecial Paste:=xlPasteValues
Case 2
Range("G" & i, "I" & i).Copy
Worksheets("集積_税制").Range("A" & h).PasteSpecial Paste:=xlPasteValues
Range("J" & i).Copy
Worksheets("集積_税制").Range("E" & h).PasteSpecial Paste:=xlPasteValues
Case 3
Range("G" & i, "I" & i).Copy
Worksheets("集積_税制").Range("A" & h).PasteSpecial Paste:=xlPasteValues
Range("J" & i).Copy
Worksheets("集積_税制").Range("F" & h).PasteSpecial Paste:=xlPasteValues
End Select
Next i
Application.CutCopyMode = False
Application.ScreenUpdating = True
Sheets("集積_税制").Select
MsgBox "取り込みが終了しました!"
Sheets("入力表_税制").Select
Range("B1").Select
End Sub