• 締切済み

VBA Excel2003 謎のエラー

いろいろ検索してみたのですが、問題が解決できません。 エクセルのSheet1のA1からG16のセルの内容を一つずつ感知し、マイナスだったら赤、プラスだったら緑、それ以外だったら何もしないという処理にしたいです。 Private Sub Workbook_Open() ThisWorkbook.Sheets("Sheet1").Select ThisWorkbook.Sheets("Sheet1").Range("A1").Select Dim 英語 As Integer Dim 数字 As Integer Dim sheet1 As Worksheets sh1 = Worksheets("Sheet1") sh1.Activate 英語 = 1 数字 = 1 For 数字 = 1 To 16 For 英語 = 1 To 6 '選択位置が、マイナスだったら赤、プラスだったら緑、それ以外は無視 If Range(sh1.Cells(英語 & 数字)) < 0 Then Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 7 ElseIf Range(sh1.Cells(英語 & 数字)) > 0 Then Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 4 Else Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 0 End If 英語 = 英語 + 1 Next 英語 数字 = 数字 + 1 Next 数字 End Sub

みんなの回答

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

> ちょっと補足的な質問ですが、もし、全部のシートに反映させる場合は、一個一個指定しなければならないのでしょうか。 ループを回してワークシートオブジェクトを順番に取得するのが一般的だと思います。以下のサンプルでは、全てのシートに対してシート名とA1セルの値を表示しています。 これで判りますか? Sub Sample()  Dim sh1 As Worksheet  For Each sh1 In ThisWorkbook.Worksheets   'シート名とA1の値を表示   MsgBox "シート名=" & sh1.Name & " A1=" & sh1.Cells(1, 1)  Next sh1 End Sub

adolfadolf
質問者

お礼

参考になります、このあと試してみますb

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

> すみません、このSetされたsh1なんですが、結局使ってないですよね、、、これって削除しても大丈夫ですか? アクティブなシートが対象の場合はあえて使用しませんが、そうで無い場合は sh1.Cells(数字, 英語) の様に使用します。今回はなくても良いですね。

adolfadolf
質問者

お礼

ありがとうございます。 ちょっと補足的な質問ですが、もし、全部のシートに反映させる場合は、一個一個指定しなければならないのでしょうか。

adolfadolf
質問者

補足

すみません、補足です。 全てのシートの形式が、全て同じような状態(1月、2月・・・というような連立)で、データ数値だけ違っているような感じであれば、統一できるのではないかと思ったから、良い方法がないかと思ったわけです。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

タイトルが「謎のエラー」なのに、エラーの箇所や内容が書いていないのは何故でしょう? あなたが「謎」に思っている部分がどこなのか判りませんが、とりあえず動くように修正して見ました。 「とりあえず動く」物なので無駄だらけですが参考になれば幸いです。 Private Sub Workbook_Open() ThisWorkbook.Sheets("Sheet1").Select '←無くて良い ThisWorkbook.Sheets("Sheet1").Range("A1").Select '←無くて良い Dim 英語 As Integer Dim 数字 As Integer 'Dim sheet1 As Worksheets ←「Worksheets」ではなく、「WorkSheet」。また変数名も違う。 Dim sh1 As Worksheet 'sh1 = Worksheets("Sheet1") ←Setを使う Set sh1 = Worksheets("Sheet1") sh1.Activate 英語 = 1 数字 = 1 For 数字 = 1 To 16   'For 英語 = 1 To 6 ←A~Gなら7列   For 英語 = 1 To 7    'If Range(sh1.Cells(英語 & 数字)) < 0 Then    'Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 7    If Cells(数字, 英語) < 0 Then     Cells(数字, 英語).Interior.ColorIndex = 7    'ElseIf Range(sh1.Cells(英語 & 数字)) > 0 Then     'Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 4    ElseIf Cells(数字, 英語) > 0 Then     Cells(数字, 英語).Interior.ColorIndex = 4    Else     'Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 0     Cells(数字, 英語).Interior.ColorIndex = 0    End If    '英語 = 英語 + 1  ←不要、For文のHELPを確認のこと   Next 英語  '数字 = 数字 + 1  Next 数字 End Sub

adolfadolf
質問者

お礼

ありがとうございます、なんせ急いでいたもので、早めに書き終わりたくてこんな結果に・・・ すみませんでしたm(_ _)m エラーが起きていたのはif文で、Elseに対するifがありませんというので止まっていました。 今は携帯なので、家に帰ってまた試してみたいと思います、ありがとうございます。

adolfadolf
質問者

補足

今使用してみて大丈夫でした、細かく解説ありがとうございます。 すみません、このSetされたsh1なんですが、結局使ってないですよね、、、これって削除しても大丈夫ですか?

関連するQ&A