Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5112 / 13644 ツリー ←次へ | 前へ→

【52433】xlCellTypeConstantsで”CD”という文字 植木ねこ 07/11/14(水) 11:34 質問[未読]
【52435】Re:xlCellTypeConstantsで”CD”という文... Jaka 07/11/14(水) 12:47 発言[未読]
【52441】Re:xlCellTypeConstantsで”CD”という文... 植木ねこ 07/11/14(水) 15:25 お礼[未読]
【52444】Re:xlCellTypeConstantsで”CD”という文... Jaka 07/11/14(水) 16:04 発言[未読]
【52511】すみません。間違ってました。 Jaka 07/11/16(金) 9:13 発言[未読]
【52577】Re:すみません。間違ってました。 植木ねこ 07/11/20(火) 11:59 お礼[未読]

【52433】xlCellTypeConstantsで”CD”という文字
質問  植木ねこ  - 07/11/14(水) 11:34 -

引用なし
パスワード
   はじめまして。

A列に"23","CD","8M"などの文字列と、その文字の合間合間に空白セルがある列に対して、上から順に文字のあるセルをひとつずつ選択するというコードを書いています。

     A列
1行目 23
2〃 
3〃  
4〃   23
5〃   CD


下記のようにすると、数字の"23"は選択してくれるのですが、文字の"CD"のところでエラーになります。
xlCellTypeConstants は数値と文字列だと思うのですが、どうすれば"23"も"CD"も検索することが出来るでしょうか?

Sub てすと()
  Dim saigocel As Range
  Dim saishocel As Range
    
  Set saishocel = Range("A1")
    
  Do
  
  Set saigocel = Range(saishocel, "A38").Find(xlCellTypeConstants)
  saigocel.Select
    
  Set saishocel = saigocel.Offset(1, 0)
    
  Loop Until saigocel = Range("A38")
  
End Sub

【52435】Re:xlCellTypeConstantsで”CD”という...
発言  Jaka  - 07/11/14(水) 12:47 -

引用なし
パスワード
   Find(xlCellTypeConstants)
      ↑
   意味不明です。

もう少しヘルプを読んでFindの書き方を学んでください。

>数字の"23"は選択してくれるのですが
は、
Msgbox xlCellTypeConstants
とすれば、原因がわかります。

発想も大事だけどSpecialCellsの引数は使えません。
書き方はこんなだけど、Findの引数 LookIn、LookAtは省略するとろくな事にならないと思います。
色々実験してみてください。

  Dim saigocel As Range
  Dim saishocel As Range
  Dim SaveCel As String
  Set saishocel = Range("A1")

  With Range(saishocel, "A38")
    'Set saigocel = .Find("*", After:=.Cells(.Cells.Count), LookIn:=xlValues, LookAt:=xlPart)
    Set saigocel = .Find("*", After:=saishocel, LookIn:=xlValues, LookAt:=xlPart)
    SaveCel = saigocel.Address
    If Not saigocel Is Nothing Then
     Do
       saigocel.Select
       Set saigocel = .FindNext(saigocel)
     Loop Until saigocel.Address = SaveCel
    End If
  End With

【52441】Re:xlCellTypeConstantsで”CD”という...
お礼  植木ねこ  - 07/11/14(水) 15:25 -

引用なし
パスワード
   ▼Jaka さん:

ありがとうございました!できました!
当方VBA初心者なのですが、

.Cells(.Cells.Count)

というのは私の持っている本2冊では調べられませんでした。
どうしてこれで、範囲の中の最初のセルを選んでくれたのか…
まだまだ勉強しなければいけませんね。

オブジェクトブラウザに日本語で定数の意味とかなんかを
載せてくれるといいのに、と思ってしまいます。
勉強法も模索中ですが、がんばります。

ありがとうございました。

>Find(xlCellTypeConstants)
>      ↑
>   意味不明です。
>
>もう少しヘルプを読んでFindの書き方を学んでください。
>
>>数字の"23"は選択してくれるのですが
>は、
>Msgbox xlCellTypeConstants
>とすれば、原因がわかります。
>
>発想も大事だけどSpecialCellsの引数は使えません。
>書き方はこんなだけど、Findの引数 LookIn、LookAtは省略するとろくな事にならないと思います。
>色々実験してみてください。
>
>  Dim saigocel As Range
>  Dim saishocel As Range
>  Dim SaveCel As String
>  Set saishocel = Range("A1")
>
>  With Range(saishocel, "A38")
>    'Set saigocel = .Find("*", After:=.Cells(.Cells.Count), LookIn:=xlValues, LookAt:=xlPart)
>    Set saigocel = .Find("*", After:=saishocel, LookIn:=xlValues, LookAt:=xlPart)
>    SaveCel = saigocel.Address
>    If Not saigocel Is Nothing Then
>     Do
>       saigocel.Select
>       Set saigocel = .FindNext(saigocel)
>     Loop Until saigocel.Address = SaveCel
>    End If
>  End With

【52444】Re:xlCellTypeConstantsで”CD”という...
発言  Jaka  - 07/11/14(水) 16:04 -

引用なし
パスワード
   ▼植木ねこ さん:
>.Cells(.Cells.Count)
>
>というのは私の持っている本2冊では調べられませんでした。
>どうしてこれで、範囲の中の最初のセルを選んでくれたのか…
>まだまだ勉強しなければいけませんね。

afterXXXは、○○セルの次から検索しろという事ですから、
指定セルの次からという事で、1番最初は無視され、回りまわって、
1番最後に検索されます。
だから範囲の1番最後から調べれば、1番最初が検索できるというわけ。

普通に使う
Cells(2,3) とかは、
ActiveSheet.Cells.Cells(2, 3)
または、
ActiveSheet.Range("A1:IV65536").Cells(2, 3)
だと思っております。

他、Cellsについて、
日本語になっていないような文章でちょこっと書いてあります。
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=78;id=FAQ

【52511】すみません。間違ってました。
発言  Jaka  - 07/11/16(金) 9:13 -

引用なし
パスワード
   位置を間違ってました。
このままだと、見つからなかった場合エラーになります。

>    Set saigocel = .Find("*", After:=saishocel, LookIn:=xlValues, LookAt:=xlPart)
>    SaveCel = saigocel.Address
>    If Not saigocel Is Nothing Then
>     Do
>       saigocel.Select
>       Set saigocel = .FindNext(saigocel)
>     Loop Until saigocel.Address = SaveCel
>    End If
    ↓

    Set saigocel = .Find("*", After:=saishocel, LookIn:=xlValues, LookAt:=xlPart)
    If Not saigocel Is Nothing Then
     SaveCel = saigocel.Address '←ここにしないとダメです。
     Do
       saigocel.Select
       Set saigocel = .FindNext(saigocel)
     Loop Until saigocel.Address = SaveCel
    End If

【52577】Re:すみません。間違ってました。
お礼  植木ねこ  - 07/11/20(火) 11:59 -

引用なし
パスワード
   ▼Jaka さん:

重ね重ねありがとうございます。
自分なりに書店でfindのafterについて調べました。
指定したセルは最後に検索される、とありました。

VBAの入門書はたくさんあるのですが、
Cellsの引数にCountプロパティ(?)を使うという手法は
本屋さんでは見つけられませんでした。
裏技の本なんかも見たんですが…。
やはり基礎からじっくり時間をかけて勉強していくしかないのですね。
また質問を立てて、お薦めの参考書をみなさんに
聞きたいと思います。

ありがとうございました。

>位置を間違ってました。
>このままだと、見つからなかった場合エラーになります。
>
>>    Set saigocel = .Find("*", After:=saishocel, LookIn:=xlValues, LookAt:=xlPart)
>>    SaveCel = saigocel.Address
>>    If Not saigocel Is Nothing Then
>>     Do
>>       saigocel.Select
>>       Set saigocel = .FindNext(saigocel)
>>     Loop Until saigocel.Address = SaveCel
>>    End If
>    ↓
>
>    Set saigocel = .Find("*", After:=saishocel, LookIn:=xlValues, LookAt:=xlPart)
>    If Not saigocel Is Nothing Then
>     SaveCel = saigocel.Address '←ここにしないとダメです。
>     Do
>       saigocel.Select
>       Set saigocel = .FindNext(saigocel)
>     Loop Until saigocel.Address = SaveCel
>    End If

5112 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free