Excel (VBA)

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

 
(指定なし : 指定なし)
同じデータのセルを選択したい
投稿日時: 20/05/23 17:54:39
投稿者: takaisasking

縦方向に連続したセルに同じデータがあった場合、
例えば、B2:B5までが同じデータだった場合、
B2:B5を選択(Select)する場合、
下記のコードをどこをどのように修正したらよいでしょうか?
よろしくお願いします。
 
以下は、以前は作動していた(はずの) VBAコードです。
 
Dim myRow As Long, myCol As Long
Dim myBttm As Long
Dim myMoji As String
Dim i As Long
'------
myRow = Selection.Row
myCol = Selection.Column
myMoji = Cells(myRow, myCol)
'------列の最終データまで
i = 0
Do While Cells(myRow + i, myCol) = myMoji
    myBttm = myRow + i
    i = i + 1
    If myRow + i = 65537 Then
        Exit Do
    End If
Loop
Range(Cells(myRow, myCol), Cells(myBttm, myCol)).Select

回答
投稿日時: 20/05/23 21:03:37
投稿者: WinArrow
投稿者のウェブサイトに移動

#OS、Excelのバージョンを明記願います。
 
同じ値のセルは連続するという想定ですか?
飛び飛びという想定ですか?
 
> 65537は、シートの最終行という意味でしょうか?
 
いづれにしても、シートの最終行までループするのは、無駄ですね・・・
 
>下記のコードをどこをどのように修正したらよいでしょうか?
無駄なところはあるが、機能しないわけではないので
どこが不都合なんですか?
それと、セル範囲を選択したら、次に何をするのでしょうか?
 

投稿日時: 20/05/23 21:21:15
投稿者: takaisasking

すみません、情報不足でした。
 
OSはWindows 10
Excel 2010 です。
 
データはソートして、同じデータは連続している状態です。
 
データ件数は、100件程度なので
ご指摘の通り無駄です。
65537から100とかせいぜい1000に修正します。
 
やりたいことは、
Range(Cells(myRow, myCol), Cells(myBttm, myCol)).Select
.Select のところを .Merge(セルの結合)にしたり
 
Range(Cells(myRow + 1, myCol), Cells(myBttm, myCol)).ClearContents
のように、重複データの削除を考えています。
 
ちなみに、重複データが4件あった場合、2件しか選択されなかったので、色々試してみたのですが、原因がわからなかったので質問しました。
以上、よろしくお願いします。

回答
投稿日時: 20/05/23 22:27:13
投稿者: WinArrow
投稿者のウェブサイトに移動

データの最終行を取得する方法
myRow = Selection.Row
 myCol = Selection.Column
を前提にして
LASTROW = Cells(Rows.Count, myCol).End(xlUp).Row
 
>ClearContents
は削除ではなく、当該セルが空白状態になるだけです。
 
 
なお、ループを使うより
オートフィルタとか、フィルタオプションを使うと
重複デーは、簡単に見つかります。しかも早い。

投稿日時: 20/05/23 23:38:30
投稿者: takaisasking

WinArrowさん、どうもありがとうございました。
 
 
セルに入っているデータによって結果が違うことがわかりました。
LastRow = 〜 .End(xlUp).Row で最終端を取得することは知ってましたが、
応用できなかった点はまだ未熟でした。
今回はこれで閉じさせていただきます。
 
オートフィルタを使ってマクロの記録を取りながらやってみることにしました。
また、よろしくお願いします。