
先日、VBAで大量データ比較・照合するのに、対象の行数を3万から5万に変更するために、「Integerをlongに変更する」という修正を教えていただき実行しました。
(参照URL https://oshiete.goo.ne.jp/qa/11440285.html)
Integerをlongに変更後、今回は添付画像のようなエラーが発生するようになりました。
前任者から引き継いだフォーマットを使用しており、VBAやコンピューターの知識がないため修正方法がわからないのですが、ご教示いただけましたら幸いです。
▼▼▼▼▼▼▼Integerをlongに変更後のVBA▼▼▼▼▼▼▼
Sub ボタン1_Click()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'変数宣言
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'縦軸ループ用変数
Dim iY As Long
'横軸ループ用変数
Dim iX As Long
'ループ用カウンタ
Dim iCounter As Long
'位置保持用カウンタ
Dim iYCounter As Long
'並び変え用配列
Dim strArrayData(1, 50000) As String
'文字列整理用汎用変数
Dim strTmpString As String
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'変数初期化
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'3行目の値
iY = 3
'B列の値
iX = 2
'汎用文字列
strTmpString = ""
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'メイン処理
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'データを取り込む
'ループ処理
For iY = 3 To 50000
'データ取得
strTmpString = Trim(Cells(iY, iX).Value)
'データチェック
If strTmpString <> "" Then
'値が入ってる場合のみデータを格納する。
strArrayData(0, iY - 3) = strTmpString
End If
Next iY
'比較対象データを取り込む
iX = 2
For iY = 3 To 50000
'データ取得
strTmpString = Trim(Cells(iY, iX + 1).Value)
'データチェック
If strTmpString <> "" Then
'値が入ってる場合のみデータを格納する。
strArrayData(1, iY - 3) = strTmpString
'右側の行の値を消す。
Cells(iY, iX + 1).Value = ""
End If
Next iY
''''''''''''''''''''''''''''''''''''''''
'比較作業開始
''''''''''''''''''''''''''''''''''''''''
'ループしてチェック
For iY = 3 To 50000
'値が空の場合は処理を抜ける
If strArrayData(0, iY - 3) = "" Then
'カウントの保持
iYCounter = iY + 1
'Forループを抜ける
Exit For
End If
'二重ループにてチェック
For iCounter = 0 To 50000
'値の比較
If strArrayData(0, iY - 3) = strArrayData(1, iCounter) Then
'同じ値で有れば左の元の値の横に並べる
Cells(iY, iX + 1).Value = strArrayData(1, iCounter)
'配列の中の値を消去する。
strArrayData(1, iCounter) = ""
End If
Next iCounter
Next iY
'照合出来なかった値を末尾に書き出す。
For iCounter = 0 To 50000
'データ吐き出し
If strArrayData(1, iCounter) <> "" Then
'値が有る場合のみ値出力
Cells(iYCounter, iX + 1).Value = strArrayData(1, iCounter)
'排出用カウンタインクリメント
iYCounter = iYCounter + 1
End If
Next iCounter
End Sub

No.1ベストアンサー
- 回答日時:
これはエラー表示じゃなくて、エラーがでた行ですね。
実際にどんなエラーがでているのかわかりません。
多分、データ取得するセルの値に問題があると思う。エラーになっているとか。
メニューの
表示 → イミディエイトウィンドウ
で「イミディエイトウィンドウ」で、
? iY
と入力して下さい。数字が出ると思います。
ここで表示された数字の行のC列のセルがエラーになっていませんか?
とりあえず、上記確認を。
(勉強の意味も兼ねて、なんとなく原因を知っておくのも良いと思うので)
で、そのエラーセルを修正する(削除する)と動くと思います。
が・・・50000万件もあるデータでマクロが止まるたびにエラーセルを確認して修正するのは手間でしょうから
エラーセルがあったら処理を無視する1行を突っ込んでみましょう。
On Error Resume Next
↑コレです。
この辺に突っ込んでみるといいのかな?
(一部抜粋、編集)
''''''''''''''''''''''''''''''''''''''''
'比較作業開始
''''''''''''''''''''''''''''''''''''''''
'エラーを無視
On Error Resume Next
'ループしてチェック
これで処理が最後まで動くんじゃないかな、と思います。
参考記事
↓
[ VBA ] エラーを無視して処理を継続する ( On Error Resume Next ) – 行け!偏差値40プログラマー
http://hensa40.cutegirl.jp/archives/967
早々のご回答ありがとうございます。
ご指摘の通り、C列にエラー(#N/A)がありました!
また、アドバイスいただきました
'エラーを無視
On Error Resume Next
を追加しました。
VBAやコンピューターの知識がないことを考慮いただき、大変わかりやすいご説明をありがとうございました。
大変助かり、そして大変勉強になりました。
また何かありましたらどうぞよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
値が入っているときだけ計算結...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
小数点以下を繰り上げたものを...
-
VLOOKUP関数を使用時、検索する...
-
リンク先のファイルを開かなく...
-
EXCELで条件付き書式で空白セル...
-
Excel 数値の前の「 ' 」を一括...
-
2つの数値のうち、数値が小さい...
-
彼女のことが好きすぎて彼女の...
-
ワードのページ番号をもっと下...
-
WORDで複数語句を検索するには
-
Excel 0目標に対して数字があ...
-
【Excelで「正弦波」のグラフを...
-
精子に血が・・・
-
エクセルのラベルの値(文字列...
-
至急!尿検査前日にオナニーし...
-
病院側から早く来てくださいと...
-
精液の落とし方を教えてください
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
尿検査前日に自慰行為した時の...
-
至急!尿検査前日にオナニーし...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
値が入っているときだけ計算結...
-
リンク先のファイルを開かなく...
-
EXCELで条件付き書式で空白セル...
-
2つの数値のうち、数値が小さい...
-
VLOOKUP関数を使用時、検索する...
-
尿検査の前日は自慰控えたほう...
-
MIN関数で空白セルを無視したい...
-
小数点以下を繰り上げたものを...
-
風俗店へ行く前のご飯
-
エクセルで空白セルを含む列の...
-
Excel 数値の前の「 ' 」を一括...
-
【Excelで「正弦波」のグラフを...
-
納豆食べた後の尿の納豆臭は何故?
-
EXCELで式からグラフを描くには?
-
ある範囲のセルから任意の値を...
おすすめ情報