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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

178閲覧

VBA 突然オーバーフローしましたと出るようになった。

hajihaji

総合スコア25

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2025/03/27 05:50

実現したいこと

ファイルが壊れたと思い、バックアップ用のファイルで試してうまく動いていましたがやはり出るようになりました。
1から18列までで検索するフォームですが実際のシートは20列まであるシートです。
解決策があればアドバイスお願いします。

発生している問題・分からないこと

これまでずっと動いていたのですが突然オーバーフローしましたと出るようになり、
以下のところが→で警告されます。
ary_d = sh1.Range(sh1.Cells(1, 1), sh1.Cells(R1, 18))

該当のソースコード

Application.ScreenUpdating = False Application.Cursor = xlWait Application.EnableEvents = False Application.DisplayAlerts = False Application.Calculation = xlCalculationManual '計算を手動に Dim ary_d 'セルデータ用配列 Dim dic_d As Object 'Dictionaryオブジェクト Dim t_row_d As Long '配列ary_d 処理対象行 Dim id As Long Dim ary_list Dim sh1 As Worksheet Dim R1 As Long Set sh1 = Worksheets("PO") R1 = sh1.Cells(sh1.Rows.Count, "A").End(xlUp).Row ary_d = sh1.Range(sh1.Cells(1, 1), sh1.Cells(R1, 18)) Set dic_d = CreateObject("Scripting.Dictionary") For t_row_d = 1 To UBound(ary_d, 1) If dic_d.Exists(ary_d(t_row_d, 18)) = False Then dic_d.Add ary_d(t_row_d, 18), t_row_d End If Next t_row_d t_row_d = 0 ReDim ary_list(0 To dic_d.Count - 1, 0 To 18) 'For id = 0 To dic_d.Count - 1 't_row_d = dic_d.items()(id) Dim ary_item ary_item = dic_d.Items For id = 0 To dic_d.Count - 1 t_row_d = ary_item(id) ary_list(id, 0) = ary_d(t_row_d, 1) ary_list(id, 1) = ary_d(t_row_d, 2) ary_list(id, 2) = ary_d(t_row_d, 3) ary_list(id, 3) = ary_d(t_row_d, 4) ary_list(id, 4) = ary_d(t_row_d, 6) ary_list(id, 5) = ary_d(t_row_d, 7) ary_list(id, 6) = ary_d(t_row_d, 8) ary_list(id, 7) = ary_d(t_row_d, 9) ary_list(id, 8) = ary_d(t_row_d, 11) ary_list(id, 9) = ary_d(t_row_d, 12) ary_list(id, 10) = ary_d(t_row_d, 18) Next id With ListBox1 .ColumnCount = 11 .ColumnWidths = "60;30;40;70;40;120;120;40;70;70;30" .List = ary_list End With Set dic_d = Nothing Application.StatusBar = False Application.Calculation = xlCalculationAutomatic Application.DisplayAlerts = True Application.EnableEvents = True Application.Cursor = xlDefault Application.ScreenUpdating = True

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ファイルが壊れたと思い、バックアップ用のファイルで試してうまく動いていましたがやはり出るようになりました。
1から18列までで検索するフォームですが実際のシートは20列まであるシートです。
解決策があればアドバイスお願いします。

補足

特になし

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

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

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

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

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

hajihaji

2025/03/27 06:19

ちなみに9万行20列あるデータですが、同様のファイルで12万行20列あるものではオーバーフローしません。
guest

回答2

0

vba

1ary_d = sh1.Range(sh1.Cells(1, 1), sh1.Cells(R1, 18))

突然オーバーフローしましたと出るようになり

とりあえず、以下の条件に該当するセルがワークシート[PO]の A ~ R 列のいずれかの行に含まれていないかどうかを確認されることをお奨めします。

  • 表示形式が「日付」または「時刻」(yyyy/m/dggge"年"m"月"d"日"h:mm:ssなどのユーザー定義書式を含む)に設定されている。

  • そのセルの内部処理上の数値(シリアル値)が 2985466 以上、または -657435 以下である(恐らく前者)。

イメージ説明

例えば表示形式が「日付」になっているセルに対し、日付区切り記号/を省略して"20250327"のような数値を入力されれば同様の状態になるでしょう。

投稿2025/03/27 07:19

sk.exe

総合スコア1040

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

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

hajihaji

2025/03/27 07:27

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

0

自己解決

日付の列に文字列や数値があり、これを日付の書式にしていたのが悪さをしていたようです。
以前のように動くようになりました。
お騒がせいたしました。

投稿2025/03/27 07:05

hajihaji

総合スコア25

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.32%

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

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

質問する

関連した質問