プロが教える店舗&オフィスのセキュリティ対策術

Excel2010で図書リストを編集しています。もともとのリストには整数で単純に1~8200の図書番号が振ってあるのですが、表の行数は6800ほどしかなく、ところどころ番号が抜けています。どの番号が抜けているかを把握したいのですが、たとえば、番号が1,2,4,6,12と振られている場合に、抜けている3,5,7,8,9,10,11を一括して拾い出すような方法はあるのでしょうか?

質問者からの補足コメント

  • うーん・・・

    最後の行”一括して”と書きましたが、削除します。地道に一個ずつでも良いです。よろしくお願いします。

      補足日時:2015/08/09 11:52
  • tom04様、早速のご回答をありがとうございます。感謝いたします。
    何度か試してみましたが、VBA画面で「実行時エラー'9': インデックスが有効範囲にありません」と表示されてしまいます・・・
    私の認識不足に間違いないのですが、With Worksheets("Sheet1")のSheet1にはシート名を入れ、1行目の’この行から//と’この行まで//を削除してコードのみを入れてみました。やり方は間違っていますでしょうか?元データのシート名は「図書」で、1~8200の図書番号はA列に入っています。引き続きご教示頂けるようであればよろしくお願いいたします。

      補足日時:2015/08/09 16:53

A 回答 (2件)

思い通りに動かなかったようですね。



↓のコードに変更してみてください。

Sub Sample2()
Dim i As Long, myMax As Long
Dim cnt As Long, wS As Worksheet
Set wS = Worksheets(2)
wS.Range("A:A").ClearContents
With Worksheets("図書")
myMax = WorksheetFunction.Max(.Range("A:A"))
For i = 1 To myMax
If WorksheetFunction.CountIf(.Range("A:A"), i) = 0 Then
cnt = cnt + 1
wS.Cells(cnt, "A") = i
End If
Next i
End With
MsgBox "処理完了"
End Sub

※ 前回とまったく同じやり方ですが、
「図書」SheetのA列の抜けている番号をSheet見出しの2番目のSheetのA列に順に表示しています。
すなわち「図書」SheetはSheet見出しの左から2番目に配置しないでください。
(Sheet見出しの2番目以外であればどこにあっても構いません)

今度はどうでしょうか?m(_ _)m
    • good
    • 1
この回答へのお礼

tom04様
すばらしいです!今度は一瞬にして反映されました。欠番のナンバーのみが縦一列にスーーーッと登場した時は、驚きと嬉しさで「うわあっ」と小さく叫んでしまい、同僚に不審がられました。
表に存在しない番号が抽出できるなんて半分無理だと思っていたのですが、魔法を見ているみたいです。
本当にありがとうございました。陰ながら(見ず知らずの方ではありますが)ご健勝をお祈り申し上げます。

お礼日時:2015/08/10 13:35

こんにちは!


VBAになりますが、一例です。

元データの配置が判らないので
元データはSheet1にあり、A列に番号が入っているとします。
欠番をSheet2のA列に順次表示するようにしています。

Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() 'この行から//
Dim i As Long, myMax As Long
Dim cnt As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Range("A:A").ClearContents
With Worksheets("Sheet1")
myMax = WorksheetFunction.Max(.Range("A:A"))
For i = 1 To myMax
If WorksheetFunction.CountIf(.Range("A:A"), i) = 0 Then
cnt = cnt + 1
wS.Cells(cnt, "A") = i
End If
Next i
End With
MsgBox "処理完了"
End Sub 'この行まで//

※ 1番から最終番号まで順にループさせていますので
若干の時間を要するかもしれません。m(_ _)m
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています