- 締切済み
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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mt2008
- ベストアンサー率52% (885/1701)
> ちょっと補足的な質問ですが、もし、全部のシートに反映させる場合は、一個一個指定しなければならないのでしょうか。 ループを回してワークシートオブジェクトを順番に取得するのが一般的だと思います。以下のサンプルでは、全てのシートに対してシート名と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
- mt2008
- ベストアンサー率52% (885/1701)
> すみません、このSetされたsh1なんですが、結局使ってないですよね、、、これって削除しても大丈夫ですか? アクティブなシートが対象の場合はあえて使用しませんが、そうで無い場合は sh1.Cells(数字, 英語) の様に使用します。今回はなくても良いですね。
お礼
ありがとうございます。 ちょっと補足的な質問ですが、もし、全部のシートに反映させる場合は、一個一個指定しなければならないのでしょうか。
補足
すみません、補足です。 全てのシートの形式が、全て同じような状態(1月、2月・・・というような連立)で、データ数値だけ違っているような感じであれば、統一できるのではないかと思ったから、良い方法がないかと思ったわけです。
- mt2008
- ベストアンサー率52% (885/1701)
タイトルが「謎のエラー」なのに、エラーの箇所や内容が書いていないのは何故でしょう? あなたが「謎」に思っている部分がどこなのか判りませんが、とりあえず動くように修正して見ました。 「とりあえず動く」物なので無駄だらけですが参考になれば幸いです。 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
お礼
ありがとうございます、なんせ急いでいたもので、早めに書き終わりたくてこんな結果に・・・ すみませんでしたm(_ _)m エラーが起きていたのはif文で、Elseに対するifがありませんというので止まっていました。 今は携帯なので、家に帰ってまた試してみたいと思います、ありがとうございます。
補足
今使用してみて大丈夫でした、細かく解説ありがとうございます。 すみません、このSetされたsh1なんですが、結局使ってないですよね、、、これって削除しても大丈夫ですか?
お礼
参考になります、このあと試してみますb