Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
処理速度を速める
投稿日時: 21/11/14 22:24:15
投稿者: rinahana

あるサークル(クラブ)の名簿ですが、
 番号、名前、性別、生年月日、郵便番号、住所1、住所2などのレコードで構成されています。
レコード数は1500件ほどあります。
まず、レコードを 番号、名前1、性別1、生年月日1、名前2、性別2、生年月日2、住所1、住所2 かえて、
(名前1性別1生年月日1はそのままで、追加した名前2、性別2、生年月日2は空白)
 
プログラムで夫婦を見つけ 夫婦を1つのレコードとして作り変えます。
作業:
@住所1、A住所2、B名前1、C性別1(1男、2女)、D番号をキーとして、並べ替えて
夫婦と判断したレコードを見つけ、その直ぐ下に行をコピーして、
名前1、性別1、生年月日1 を上の行の名前2、性別2、生年月日2へコピーする。
これを繰り返す というものです。
(行を増やすので、データの最下位行から2行まで繰り返す。1行目は項目行)
その際コピーで増やした行のA列に「1」を付けていく。(A列は並べ替えたらすぐにすべてを消去しておく)
とここまではだいたいできています。
質問はこれ以降です。削除する行が100以上あるのですが、A列に「1」が付いている行を削除する
作業ですが、for -- nextでプログラムとしては出来ているのですが、
作業が5分ほどかかってしまい、一時はバグってしまったのかと思ったくらいでした。
そこで、
下記のようなネット上で得たコードを使って、改善できないものかと思っています。
 
処理を早くするにはどうすればいいのかを教えて頂きたい
Application.ScreenUpdating = False(True)は使っています。
 
ループをどのように作れば、いいのか
       With .ActiveSheet '"シートA" 
            .Range("A2:A" & Lstcell).SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete '行を削除 数字1 の行"
        End With
 
  .Range("A2:A" & Lstcell).SpecialCells(xlCellTypeConstants, 1).のコードが分かり切っていません。
不確かな部分がある。
宜しくお願いします。説明が十分かどうか心配ですが、お願いします。

回答
投稿日時: 21/11/15 07:15:51
投稿者: simple

SpecialCellsメソッドの第二引数は、以下に記載されている定数を指定します。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.xlspecialcellsvalue
1ということは「数値」を示しますので、
要するに、数値定数であるものを取り出せ、という意味になります。
たぶん、希望のものとは違う結果になるでしょう。
 
1だけを対象に行削除するのであれば、
オートフィルタでそのように絞り込んだ状態で、
2行目から、最終行を削除すればよいと思います。
非表示のなっている行は、特段の考慮しなくても削除されることはありません。
(オートフィルタの特性です。)
 
まずは、簡単なテストデータを対象にして、マクロ実行してみたら、
参考コードが得られると思います。トライしてみてください。

投稿日時: 21/11/15 07:40:51
投稿者: rinahana

simpleさん 有難うございます。
VBAでと考えていました、比較的身近?に解決策があったとは。