エクセルVBAで何度もお世話になってます。目的のものほぼ完成いたしましたが,少しずつ改良してま
す。
いろいろ検索してますと,For Next の処理よりも,For Each Nextの処理が早いとあります。
そこで,For Each Nextを使ったものを他サイトを参考に,下記のように作成しました。
Dim Kensaku_hani As Range
Dim colRng As Collection
Set colRng = New Collection
colRng.Add Worksheets("処理記録y").Range("G2:G10")
For Each Kensaku_hani In colRng
MsgBox Worksheets("処理記録").Cells(Kensaku_hani.Row, Retu).Value
Next
動かしてみると,ループが一回シカ回りません。それと Kensaku_hani.Value も取得できません。
シートをアクティブにしてしまえば,Collctioon を使わずともできるのですが,Collectionを
使うとうまくいきません。アドバイスをお願いできればと思います。実際の運用では,
MsgBoxのところで,検索,転記を行います。
No.1
- 回答日時:
普通
Dim Kensaku_hani As Range
Dim colRng As Range
Set colRng = Worksheets("処理記録y").Range("G2:G10")
For Each Kensaku_hani In colRng
MsgBox Worksheets("処理記録").Cells(Kensaku_hani.Row, Retu).Value
Next
ともにRangeにするとかでは?(Retu ってなに?)
No.2
- 回答日時:
>colRng.Add Worksheets("処理記録y").Range("G2:G10")
上記文は、コレクションにRangeオブジェクトを1個追加しただけなので、ループは1回しか回らないし、Kensaku_haniはRangeオブジェクトです。
colRngをウォッチすれば、分かりやすいです。※添付画像参照。
高速化目的なら、Range.GetData()を呼び出して値を配列化する手を使うとか。
アドバイスありがとうございました。
あるサイトに載っていたもの疑わずに使いました。
いろいろくぐってみると,要素を追加する必要があるようで,
勉強になりました。
下記のように,要素を追加したら,うまく行きました。
For k=2 To 最終行
colRing.Add WorkSheets("処理記録").Cells(k,5)
Next
これでいいのかどうか解りませんが。
それから,Range.GetData() を使うと高速化がはかれるとの
ことですが,どのようにしたらいいのかはまだ,解りません。
いろいろ勉強になるアドバイスありがとうございました。
No.3
- 回答日時:
こんばんは、
New Collection
colRng.Add の内容(意味)item.keyをご確認ください。
For Each Kensaku_hani In colRng.Item(1)
If Not Kensaku_hani Is Nothing Then
MsgBox Worksheets("処理記録").Cells(Kensaku_hani.Row, Retu).Value
Next
違っていたら、ごめんなさい。
アドバイスありがとうございます。
>colRng.Add の内容(意味)
最初ここがよく分かりませんでしたが,
ネットでくぐってみて,やっと意味が分かりました。
範囲を入れれば,範囲の間のものが自動で入る,みたいに
思っておりました。
アドバイスありがとうございました。
No.4ベストアンサー
- 回答日時:
No.1です。
Collection ではなく Dictionaryオブジェクトなら、
Dim myDic As Object
Dim r As Range
Set myDic = CreateObject("Scripting.Dictionary")
Set myDic("範囲") = Worksheets("Sheet1").Range("A1:A5")
For Each r In myDic("範囲")
Debug.Print r.Value
Next
Set myDic = Nothing
こんな感じでも行けましたけど?
No.6
- 回答日時:
No.5のお礼について。
>最初の質問のマクロに,抜けていた部分があり,
いえ、抜けてませんよ。
私が試したのはRangeオブジェクトを変数に入れるにはNo.5の
>Set myDic("範囲") = Worksheets("Sheet1").Range("A1:A5")
のようにSetステートメントでやらないとダメみたいって感じがしたと言う事です。
Collectionは .Add で値を入れていくみたいなのでSetステートメントを使おうとしてもエラーばかりでした。
単純に方法を見つけられないだけだったのかもしれませんけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) vbaで列幅について 1 2022/11/15 08:31
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
COBOL OCCURSで指定したデータ...
-
vbaのエラー対応(実行時エラー...
-
IF文に時間(何時から何時ま...
-
特定の名前のオートシェイプの...
-
Excel VBA セルの名前があるか...
-
シグナル 6(SIGABRT)とは?
-
エクセル VBAで複数セル選択時...
-
【VBA】エラー処理で別プロシー...
-
マクロで、次のコードへ行く前...
-
C# 指定時間(秒間)の間処理を...
-
VBA For Each 〜 複数条件について
-
VB6.0で、ランタイムエラーを全...
-
iPhoneのニューラルエンジンっ...
-
StatusStripの表示が更新されな...
-
VB6で定時刻処理
-
private subモジュールを他のモ...
-
複数のファイルに対し同じ処理...
-
特定のファイルを他のプロセス...
-
ListViewから選択中の文字列を取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
特定の名前のオートシェイプの...
-
シグナル 6(SIGABRT)とは?
-
特定のファイルを他のプロセス...
-
ExcelのVBAで、選択したファイ...
-
Excel VBA セルの名前があるか...
-
どう増強すべきか
-
Word VBA。各マクロの間に待ち...
-
【VBA】エラー処理で別プロシー...
-
UWSCのTHREADについて
-
シェルスクリプトでファイル内...
-
ドリブン??
-
Functionで戻り値を複数返す方法
-
iPhoneのニューラルエンジンっ...
-
エクセル VBAで複数セル選択時...
-
COBOL OCCURSで指定したデータ...
-
どうやってもFor文を抜けてしま...
おすすめ情報