下記のソースで実行したら、
MyStr1(1) = "CCC" ' の行まで
実行できて、それから
"実行時エラー'9'"
"インデックスが有効範囲にありません。"
というエラーが出ています。
何かいけないか、わからないから、ここで質問をさせて頂きます。
※環境はExcel2003です。
-------------------------------------------
Sub Macro1()
'
M = 3
N = 2
Sheets("Old").Select
Sheets("Old").Copy Before:=Sheets(1)
Sheets("Old (2)").Select
Sheets("Old (2)").Name = "TTT"
Dim MyStr1() As String
Dim K As Long
ReDim MyStr1(K)
MyStr1(0) = "AAA" & Chr(10) & "BBB"
MyStr1(1) = "CCC" ' <----------------------------------エラーとなった行
MyStr1(2) = "DDD"
MyStr1(3) = "EEE"
MyStr1(4) = "FFF"
MyStr1(5) = "JJJ"
MyStr1(6) = "KKK"
For K = 0 To 7 'セル1の判断ループ
X = 1
Y = 1
M = 3
N = N + 1
For Y = 1 To 100
For X = 1 To 300
If Sheets("Old").Cells(X, Y) = MyStr1(1) Then
For M = 3 To 300
X = X + 1
If Sheets("Old").Cells(X, Y) <> Sheets("New").Cells(X, Y) Then
Sheets("TTT").Cells(X, Y).Select
With Selection.Interior
.ColorIndex = 1
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 6
End If
Next M
End If
Next X
Next Y
Next K
End Sub
------------------------------------------------------
素人なので、何か説明が足りなかったら、ご容赦してください。
No.3ベストアンサー
- 回答日時:
えっと・・・おかしなところが多すぎます。
#1でも示しましたが
ReDim MyStr1(K)
これは動的配列の再宣言で K に数値が代入されていなければ要素数が0のままです。
For~Next のネストはOKですが Mのループで親ループのXを加算しているので、Xのループは失敗します。
Mのループと X = X + 1 は不要でしょう。
>If Sheets("Old").Cells(X, Y) = MyStr1(1) Then
せっかく配列を使っているのに MyStr1(1) では意味がありません。
MyStr1(K)
です。
N = N + 1
変数Nは使われていません
この回答への補足
丁寧の説明にありがとうございました。
プログラム目的の説明が不足で、すみませんでした。
本件について、やりたいことは以下のとおりです。
1 既存シートが"Old" "New" "Temp"の3枚があります。
"Old"シートと"New"シートは行の項目(AAA-KKK)同じ、列の内容が異なるモノとなり、
そして、比べる対象シートであり、
Tempシート内はマクロのコントロールボタン(実行、キャンセルなど)を置いている
2 "Old"シートの内容を丸コピーで"TTT"シートに作成し、実行結果を反映する用
3 マクロの流れは、まずMyStr1配列の内容で"Old"シート項目(AAA-KKK)のセル位置を
1ずつ確定してから、"Old"シートと"New"シートの該当部分を比べる。
そして、異なる部分が見つければ。、"TTT"シート内の同じセルの色を変更で、結果を示すことである。
※AAAーKKKの項目が比較する対象外なので、次の行を移動する"X = X + 1"が必要となる
その為、質問したソースを次のように直して、目的が達成できました。
ReDim MyStr1(K) -> ReDim MyStr1(7) 変更
If Sheets("Old").Cells(X, Y) = MyStr1(K) Then 変更
N = N + 1 削除
なお、今後機能アップする予定があるので、まだわからないことがあると思いますので、宜しくお願いします。 (^@^)
No.4
- 回答日時:
おせっかいついでに…
前回のご質問(http://oshiete1.goo.ne.jp/qa5074351.html)でも申し上げましたように、「やりたいこと」とコードの食い違いが多すぎるので、このまま皆様に質問を続けても、ゴールに着くまでに相当量の質問が必要になりそうです。
仮に、エラーが出なくなっても、目的とは違う動作になっているかもしれません。
まず、「やりたいこと」を再整理し、これに沿ってコードの構成を見直すことをお勧めします。
(現状だと、ご説明の「やりたいこと」と提示されているコードとの関連が理解できない部分が多すぎます。)
ついでに言わせてもらうなら、今、出ているエラーも、前回私が指摘済みのことが原因ですよ。(Kの値が未定)
ご指摘、ありがとうございました。
ご指摘の通り、目的説明の不足で回答して頂いた皆様にお手間をかけまして、すみませんでした。
これからも、続けてマクロを勉強しますから、何かあれば、まだ宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
DoEventsが必要な理由について
-
GIFアニメをループさせたくない
-
vba
-
アクティブセルから、A列最終行...
-
VBA Dir関数でファイルをループ...
-
流れ図(フローチャート)が分か...
-
DOSコマンドのループ内のTIMEコ...
-
Application.OnTime の使い方
-
ループフリー
-
VBA for文が止まらない
-
vb.netからエクセル関数書き込み
-
csh foreachで「*」でエラ...
-
一巡伝達関数と開ループ伝達関数
-
VBA for i=1 to lastrow
-
VB.NETで素因数分解のプログラ...
-
ループ内での条件処理
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
ループ7回目の悪役令嬢は、元敵...
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
エクセルの当番表を作っていま...
-
GIFアニメをループさせたくない
-
VBAで3秒だけ時間を止めたい
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
-
DOSコマンドのループ内のTIMEコ...
-
ListBox 複数選択 で オートフ...
-
vbscriptでIE自動入力(途中で...
-
vb.netからエクセル関数書き込み
-
DoEventsが必要な理由について
-
Java 南京錠
-
アクティブセルから、A列最終行...
-
テキストボックスの名前に変数...
-
範囲指定したセルを1つずつ飛...
-
VBA Dir関数でファイルをループ...
おすすめ情報