こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2009-05-25 17:34:46

QNo.4989405

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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

投稿日時 - 2009-05-26 16:09:32

お礼

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

投稿日時 - 2009-05-27 15:12:34

ANo.2

> すみません、このSetされたsh1なんですが、結局使ってないですよね、、、これって削除しても大丈夫ですか?

アクティブなシートが対象の場合はあえて使用しませんが、そうで無い場合は sh1.Cells(数字, 英語) の様に使用します。今回はなくても良いですね。

投稿日時 - 2009-05-26 10:45:44

補足

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

投稿日時 - 2009-05-26 11:48:49

お礼

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

投稿日時 - 2009-05-26 11:27:16

ANo.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

投稿日時 - 2009-05-25 18:55:12

補足

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

投稿日時 - 2009-05-26 10:13:25

お礼

ありがとうございます、なんせ急いでいたもので、早めに書き終わりたくてこんな結果に・・・
すみませんでしたm(_ _)m

エラーが起きていたのはif文で、Elseに対するifがありませんというので止まっていました。
今は携帯なので、家に帰ってまた試してみたいと思います、ありがとうございます。

投稿日時 - 2009-05-25 19:36:22

あなたにオススメの質問