- ベストアンサー
For Each Nextにつきまして
Dim a As Chart For Each a In Charts a.Delete Next a Setステートメントを用いないという事は、aはすべてのグラフシートが代入されている事になりますか。しかしeachという事は、結局二行目で行っているのは、全グラフシート中の一枚の確認…ですか?グラフシートを一枚ずつ確認して、一枚ずつ削除しているのですか? またグラフシートが一枚も無い状態でもエラーが起きないのはなぜ? 無ければ、For Each~Next内の処理が実行されないのですか。 宜しく、お願いします。
- Visual Basic
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
aはブック内のすべてのグラフシートのひとつひとつのことです。つまり一枚ずつ削除しているのです。 グラフシートが一枚も無ければ、For Each~Next内の処理が実行されません。
関連するQ&A
- セルに対してFor Each~In~Nextを使う
セルに対してFor Each~In~Nextを使う事は出来ない? シートやブックに対してループする時は Sub aaa() Dim w As Worksheet For Each w In Worksheets MsgBox w.Name Next End Sub 等を使いますが、 A1に「あ」 A2に「い」 A3に「う」 が入っている場合、 Sub bbb() Dim i As Long For i = 1 To Range("a65536").End(xlUp).Row MsgBox Cells(i, 1) Next End Sub で、全ての値を取得できますが、 For~to~nextではなく セルに対してFor Each~In~Nextを使う方法があれば教えてください。 上記のように Dim w As Worksheetは宣言できますが Dim c As Workcellとはできませんでした。 なぜわざわざFor~to~nextでできる事をFor Each~In~Nextでやりたいかと言うと、 シートやブックはFor~to~nextでできるのに、セルはFor~to~nextができない理由を知りたいからです。 ご回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel VBA のFor Each ・・・ Next について
配列に数字(特段数字でなくても)入れたいのですが、以下のように書きました。 Sub test() Dim x As Variant Dim m(1 To 10) As Integer For Each x In m x.Value = 100 Next Stop End Sub Stopでとめてmを確認するとすべて0です。どうしてなのでしょうか。 配列ではなく Sub test() Dim x As Variant For Each x In range("a1:a10") x.Value = 100 Next End Sub とするとA1:A10には100が入ります。 この差がいまいちわからなくて、 もちろんFor ・・・ Nextで簡単に入れられるのは承知しています。 補足ですが また最初はx.valueの.valueをつけていなかったのでセルにも反映されませんでしたが.valueをつけると入りました。
- ベストアンサー
- Visual Basic
- For Each ~ Nextステートメント
今、1つのブックに200前後のワークシートがあるとします。 For Each ~ Nextステートメントを使って以下のようなプログラムを全てのワークシートに適用したいと考えています。 Sub test() Dim mySht As Worksheet For Each mySht In Worksheets If Range("A2").Value <> "1990/01/31" Then Rows("2:2").Select Selection.Insert Shift:=xlDown Range("A2").Select ActiveCell.FormulaR1C1 = "1990/01/31" End If If Range("A3").Value <> "1990/02/28" Then Rows("3:3").Select Selection.Insert Shift:=xlDown Range("A3").Select ActiveCell.FormulaR1C1 = "1990/02/28" End If ・・・(中略)・・・ Next End Sub しかし、これを実行しても、うまくいきません。 全てのワークシートについて、必ずしもA2のセルが 1990/01/31であるとは限らないことが原因かとは思うんですが、自身ではどうしてもうまくプログラムを書くことが できません。良いお知恵を拝借できればと思います。
- ベストアンサー
- オフィス系ソフト
- For Each でシートのループ
簡潔に質問する為に以下のマクロを見て頂きたいのですが、 この場合sheet1,sheet2,sheet3のそれぞれの(1,1)に2が発生せず 現在目でみているシートにのみ有効なのですが、全シートに有効に するには何が足りないのでしょうか Sub aaa() Dim ws As Worksheet For Each ws In Worksheets Cells(1,1)=2 Next End Sub
- ベストアンサー
- オフィス系ソフト
- エクセルVBAで For Each をまとめる方法
ワークシート上にフォームで作成したチェックボックス、グループボックス、オプションボタンだけをまとめて削除するVBAです。 以下のように、種類ごとに分けて記述することは出来るのですが、3種類まとめて書く方法がわかりません。 CheckBoxes,GroupBoxes,OptionButtons と並べてもだめのようです。 ご教示ください。 Sub delete_test() With ActiveSheet For Each cb In .CheckBoxes cb.Delete Next For Each gb In .GroupBoxes gb.Delete Next For Each ob In .OptionButtons ob.Delete Next End With End Sub
- ベストアンサー
- オフィス系ソフト
- アクセス For Eachの時点 絞る
For Eachの時点で、コマンドボタンのみに絞ることは可能ですか? Sub Sample() Dim myFormName As String Dim ctl As Control myFormName = "フォーム1" For Each ctl In Forms(myFormName).Controls Debug.Print ctl.Name Next ctl End Sub これでフォーム上の全てのコントロール名を取得できますが ループの時点でコマンドボタンのみを抽出できますか? For Each ctl In Forms(myFormName).Controls If ctl.ControlType = acCommandButton Then Debug.Print ctl.Name End If Next ctl こうすれば、コマンドボタンのみ絞れますが コントロールの数が多すぎて、処理に時間がかかります。 なので For Each ctl In Forms(myFormName).Controls の部分の、ループの時点でコマンドボタンを絞りたいのですが 絞れる方法があれば教えてください。
- 締切済み
- オフィス系ソフト
- For Each...Next を使いブック内のシートを順次処理したいのですが。
エクセルのマクロ初心者なのですが、先に進まなくなってしまいました。よろしくお願いします。 ブック内にシート100枚位あります。(このシートはブック毎に変動します。) 各シート上にあるデーターで、それぞれ、そのシート上に図を作成したいのですが、どうしても、それぞれのシート上にどうやって図を出したらいいのかわかりません。 For Each 各シート In Worksheets With 各シート .Activate Dim data As Range Set data = Range("B3:C2500") Charts.Add ActiveChart.ChartType = xlXYScatterLines ActiveChart.SetSourceData Source:=data ActiveChart.Location Where:=xlLocationAsObject, Name:="sheet1" ActiveChart.PlotArea.Select With Selection.Border .ColorIndex = 16 .Weight = xlThin .LineStyle = xlContinuous End With Selection.Interior.ColorIndex = xlNone End With Next あまり、内容も分かっていないのですが、このようなマクロを作ったのですが、図を”Sheet1”に出すことしかできませんでした。 どうにかして、それぞれのシート毎に図を出していきたいのですが、 アドバイスをいただけたらと思います。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel 2007 <VBAでグラフの操作>
Excel 2007 <VBAでグラフの操作> 現在すでにあるグラフを修正しています。 下記マクロでは「各グラフに系列が2つあり、その1つ目を削除して残る1つのデータ範囲(X軸の値)を再設定する」という内容です。 下記マクロではFor構文冒頭のSet~の行で、 「実行時エラー '1004': 'Cells'メソッドは失敗しました:'_Global'オブジェクト」 とのエラーが出ます。 このエラーについて検索してみたのですが、これといったものが見つからなかったので、このマクロでおかしなところがあれば直接指摘していただけないでしょうか。 よろしくお願いします。 Private Sub Test_Arrange() Dim MyRng As Range Dim R As Integer Dim n As Integer Dim i As Integer n = 10 R = Sheets("Sheet1").Range("A1").End(xlDown).Row For i = 1 To n Set MyRng = Sheets("Sheet1").Range(Cells(2, 2 * n + 3), Cells(R, 2 * n + 3)) Charts(i).SeriesCollection(1).Delete Charts(i).SeriesCollection(1).XValues = MyRng Next i End Sub
- ベストアンサー
- その他MS Office製品
- エクセルVBAでFor each文
下記のようなコードを書きたいのですが「オブジェクトが必要です」というエラーが 出力されてしまいできないようです。何か代替案はありますでしょうか。 --- dim ws as worksheet with thisworkbook for each ws in array(.worksheets(1),.worksheets(2),.worksheets(3)) with ws 'ここに処理を書く end with next ws end with --- ちなみにこのbookにある全てワークシートで処理を回したいわけではなく 特定のシートのみで処理をしたいです。 エクセル2003です。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- 構造体配列の特定のメンバーをFor~Eachで
みなさんこんにちは。昔Vb6を少々やっていましたが ここ数年遠のいていました。 必要に迫られ最近Vb2010を勉強しはじめた50歳です。 サンプルの通り3つのメンバーを持つ構造体配列があり、 メンバーData3の合計を得るのに、ループで回して 計算してましたが、これを For~Next ではなくFor~Each で やれないかと考えておりました。配列の要素の個数が不定 な場合に便利だと思ったからです。 サンプルの ???_1が「型」で ???_2が「コレクション」と なるように記述するのだということまではわかりますが、 具体的な記述がわかりません。For~NetでもDo~Loopでも 他にも方法があるのは知っています。勉強の為に、For~Eachでの やりかたを知りたいのです。また、構造体配列ではなく、多次元配列での 特定の次元要素を同様に処理する方法も知りたいです。 どなたかご教授お願いできれば幸いです。 ネット上でそれなりに調べましたが、目的に沿う情報は みつけることができません。 Public Class Form1 Structure STR Dim Data1 As Double Dim Data2 As Double Dim Data3 As Double End Structure Private Sub Button1_Click(sender As System.Object, _ e As System.EventArgs) Handles Button1.Click Dim Str_1(10000) As StR Dim Rn As New System.Random() For i = 0 To 9999 Str_1(i).Data3 = Rn.Next(100) Next '以降いろんな処理をやる ' ' 'このあと For~Nex ではなくFor Each をつかってメンバーDat3の合計を得るには? Dim sum As Double For Each X As ???_1 in ???_2 '???_1 と ???_2 の記述がわからない sum += X Next Label1.Text = sum.ToString End Sub End Class
- ベストアンサー
- Visual Basic
お礼
わかりやすく簡潔な説明です。有難う御座います。