アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelで、以下のVBAでB列とC列のデータを比較・照合し、B列のデータと一致するデータはC列に、照合の結果一致しなかった値を末尾に書き出すという処理をしています。

データ量が増え、対象の行数「30000」を「50000」に変更したいのですが、単純に「30000」を「50000」に変更したところ、添付画像(実行時エラー&デバッグ)のようなエラーが発生し、処理できませんでした。

前任者が作成したフォーマットを引き継ぎ使用していますが、VBAの知識がないため、対象の行数を「30000」を「50000」にするための修正箇所を教えていただけましたら幸いです。

どうぞよろしくお願いいたします。

▼▼▼▼▼▼▼現在使用中のVBA▼▼▼▼▼▼▼

Sub ボタン1_Click()

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'変数宣言
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'縦軸ループ用変数
Dim iY As Integer
'横軸ループ用変数
Dim iX As Integer

'ループ用カウンタ
Dim iCounter As Integer
'位置保持用カウンタ
Dim iYCounter As Integer

'並び変え用配列
Dim strArrayData(1, 30000) As String

'文字列整理用汎用変数
Dim strTmpString As String

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'変数初期化
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'3行目の値
iY = 3
'B列の値
iX = 2

'汎用文字列
strTmpString = ""

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'メイン処理
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'データを取り込む
'ループ処理
For iY = 3 To 30000
'データ取得
strTmpString = Trim(Cells(iY, iX).Value)
'データチェック
If strTmpString <> "" Then
'値が入ってる場合のみデータを格納する。
strArrayData(0, iY - 3) = strTmpString
End If
Next iY

'比較対象データを取り込む
iX = 2
For iY = 3 To 30000
'データ取得
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 30000
'値が空の場合は処理を抜ける
If strArrayData(0, iY - 3) = "" Then
'カウントの保持
iYCounter = iY + 1
'Forループを抜ける
Exit For
End If
'二重ループにてチェック
For iCounter = 0 To 30000
'値の比較
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 30000

'データ吐き出し
If strArrayData(1, iCounter) <> "" Then
'値が有る場合のみ値出力
Cells(iYCounter, iX + 1).Value = strArrayData(1, iCounter)
'排出用カウンタインクリメント
iYCounter = iYCounter + 1
End If
Next iCounter

End Sub

「Excel VBAで大量データ比較・照合」の質問画像

A 回答 (1件)

integerと言うのは2バイト整数で、正の整数値は0~32,767まで。


40,000はそれを超えるでしょ?

これはコンピュータを扱う場合の基本の基なんです。


解決するには4バイト整数宣言をする。
integer⇒long に宣言を変更する。
    • good
    • 1
この回答へのお礼

t_fumiaki様

早々のご回答ありがとうございます。
お休みをいただいており、ご返信遅くなり申し訳ありません。

前任者から引き継いだフォーマットを使用しており、VBAやコンピューターの知識が無いため、どこをどう修正すればよいのかわからず、大変助かりました。
integer⇒long に変更してやってみます。

お礼日時:2020/01/15 10:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!