Excel VBA質問箱 IV

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

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


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

【38282】同一名で始まるシートをすべて選択するには? Cuore=Tane 06/5/30(火) 22:24 質問[未読]
【38284】Re:同一名で始まるシートをすべて選択する... MARBIN 06/5/30(火) 22:32 発言[未読]
【38300】Re:同一名で始まるシートをすべて選択する... Kein 06/5/31(水) 3:24 回答[未読]
【38359】Re:同一名で始まるシートをすべて選択する... ToshiyoriB 06/5/31(水) 21:58 質問[未読]
【38364】Re:同一名で始まるシートをすべて選択する... Kein 06/5/31(水) 22:20 回答[未読]
【38399】Re:同一名で始まるシートをすべて選択する... ToshiyoriB 06/6/1(木) 21:59 質問[未読]
【38400】Re:同一名で始まるシートをすべて選択する... Kein 06/6/1(木) 22:19 回答[未読]
【38477】Re:同一名で始まるシートをすべて選択する... Cuore=Tane 06/6/3(土) 21:28 お礼[未読]

【38282】同一名で始まるシートをすべて選択するに...
質問  Cuore=Tane  - 06/5/30(火) 22:24 -

引用なし
パスワード
   例えば、「データベース」という名前から始まるシートをすべて選択するには、どういう記述をすれば良いのでしょうか?

推測するに、For Each文を使って選択するのでしょうか?
(実験してみたのですが、その文字から始まる最後のシートだけが選択されてしまいます。どうにかして、すべて選択できる方法があれば教えていただけますでしょうか?)

【38284】Re:同一名で始まるシートをすべて選択す...
発言  MARBIN  - 06/5/30(火) 22:32 -

引用なし
パスワード
   もっと簡単な方法があったようなきがしますが、
思い出せません。

配列を使用した方法です。

Sub test()
Dim myarray() As Variant
Dim wscnt As Long
Dim i As Long
Dim j As Long
 wscnt = Worksheets.Count
  j = -1
  For i = 1 To wscnt
  If Worksheets(i).Name Like "データベース*" Then
    j = j + 1
    ReDim Preserve myarray(0 To j)
    myarray(j) = Worksheets(i).Name
  End If
  Next i
  Worksheets(myarray).Select
End Sub

【38300】Re:同一名で始まるシートをすべて選択す...
回答  Kein  - 06/5/31(水) 3:24 -

引用なし
パスワード
   こんな感じでも出来ます。

Sub MySheets_Select()
  Dim WS As Worksheet
  Dim Flg As Boolean
 
  For Each WS In Worksheets
   If Left$(WS.Name, 6) = "データベース" Then
     If Flg = False Then
      WS.Activate: Flg = True
     Else
      WS.Select False
     End If
   End If
  Next
End Sub

【38359】Re:同一名で始まるシートをすべて選択す...
質問  ToshiyoriB  - 06/5/31(水) 21:58 -

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

質問させてください。

>こんな感じでも出来ます。
>
>Sub MySheets_Select()
>  Dim WS As Worksheet
>  Dim Flg As Boolean
> 
>  For Each WS In Worksheets
>   If Left$(WS.Name, 6) = "データベース" Then
>     If Flg = False Then
>      WS.Activate: Flg = True
>     Else
>      WS.Select False
>     End If
>   End If
>  Next
>End Sub

1.$マークは何を指しているのでしょうか?
2.ここのコードの解説をいただけませんでしょうか。

If Flg = False Then
>      WS.Activate: Flg = True
>     Else
>      WS.Select False

【38364】Re:同一名で始まるシートをすべて選択す...
回答  Kein  - 06/5/31(水) 22:20 -

引用なし
パスワード
   >$マークは何を指している
↓こちらの Blue さんのレスを参考にして下さい。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=38293;id=excel
>ここのコードの解説
Flg という変数には、初期値として False が格納されています。
で、ブック内の全てのシートをループしているとき、最初に見つかった
"データベース"の文字を含む名前のシートでは、一度も Flg に True
を代入していないため「最初に見つかった」ということが分かります。
それが例えば、ブックの左端から3つ目のシートであったとして、もし
左端のシートが予めアクティブになっていたら、いったん3つ目のシートを
開き直して ActiveSheet = Worksheets(3) という状態にしてからでないと、
左端のシートから連続して(1,2,3共に)選択されてしまうのです。
つまり「初期のアクティブシートを変更する」ために、そのようなフラグ
を立てて、最初に見つかった"データベース"のシートのみを区別している
わけです。そしてアクティブにする処理の後に、続けて Flg = True と
代入してやることにより、以降は Select False でシート選択を増加して
いけるということです。

【38399】Re:同一名で始まるシートをすべて選択す...
質問  ToshiyoriB  - 06/6/1(木) 21:59 -

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

非常に丁寧な説明ありがとうございました。
知識不足で、まだ"Flg"の活用の理解が進みません。

サンプルを作って学習しましたが、上手く行きません。
ご指摘とアドヴァイスをお願いします。
「同一名で始まるシートを全て選択する」のテーマと同等のものと理解しましたが
間違っているでしょうか。

A7のセルから順次、数字の「123*」をピックアップさせ
尚且つ、ピックアップさせたセルを全て「アクティブ」の
状態に保持させたい場合・・・、

Flgを使いましたが、
Select Trueでエラーが発生します。
Trueをコメント表示にしますとアクティブセルが移動します。

選択セルを複数設定したまま、数字「123*」ピックアップする
方法を教えてください。

Sub Range_Select()

Dim MyR As Range
Dim R As Range

Set MyR = Range(Cells(7, 1), Cells(65536, 1).End(xlUp))
For Each R In MyR
 With R
   If .Text Like "123*" Then
    If Flg = False Then
       .Activate: Flg = True
      Else
       .Select 'True
    End If
     .Offset(, 1).Value = "該当です"
   End If
 End With
Next

End Sub

【38400】Re:同一名で始まるシートをすべて選択す...
回答  Kein  - 06/6/1(木) 22:19 -

引用なし
パスワード
   先の質問内容とはぜんぜん違いますね。シートを対象にするのとセル範囲を
対象にする処理とは、全く異なりますよ。だから Select True などは
エラーになって当然です。
そもそも何かの処理をしたいとき、いちいちオブジェクトを Select する
必要など殆どないのです。VBAに慣れた人は、それをやると処理効率が悪くなる
ことを知っているので誰も Select や Activate を多用するようなコードを
書きません。ま、それでもと言うなら↓こんなコードで出来ると思いますが。

Sub MyCells_Select()
  On Error Resume Next
  With Range("A7", Range("A65536").End(xlUp)).Offset(, 255)
   .Formula = "=IF(LEFT($A7,3)=""123"",1,"""")"
   .SpecialCells(3, 1).Offset(, -255).Select
   .ClearContents
  End With
End Sub

【38477】Re:同一名で始まるシートをすべて選択す...
お礼  Cuore=Tane  - 06/6/3(土) 21:28 -

引用なし
パスワード
   ▼Kein さん:
>こんな感じでも出来ます。
>
>Sub MySheets_Select()
>  Dim WS As Worksheet
>  Dim Flg As Boolean
> 
>  For Each WS In Worksheets
>   If Left$(WS.Name, 6) = "データベース" Then
>     If Flg = False Then
>      WS.Activate: Flg = True
>     Else
>      WS.Select False
>     End If
>   End If
>  Next
>End Sub

お返事が遅くなりました。
上記のVBAでうまくいきました
ありがとうございました。

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