• 締切済み

ただいまEXCEL VBA(アドイン)の勉強中です。

ただいまEXCEL VBA(アドイン)の勉強中です。 会社の人が作ったものをコピーしたりして応用しています。項目追加とかしかできませんが。。。 そこで課題を出されたのですが、わからなくて書き込みしました。 簡単に言うと、複数ある条件に当てはまるものがあったらセルを塗りつぶし、フォントの色を変えることです。 今は、条件が Range(Out_都市名IC & Out_Cnt).NumberFormatLocal = "@" Range(Out_都市名IC & Out_Cnt).HorizontalAlignment = xlRight Range(Out_都市名IC & Out_Cnt).Value = Range(Inp_都市名IC & Inp_Cnt).Value If Range(Out_都市名IC & Out_Cnt).Value = "松山市" Then Range(Out_都市名IC & Out_Cnt).Font.Bold = True Range(Out_都市名IC & Out_Cnt).Font.ColorIndex = 41 Range(Out_都市名IC & Out_Cnt).Interior.ColorIndex = 34 Range(Out_都市名IC & Out_Cnt).Interior.Pattern = xlSolid ElseIf Range(Out_都市名IC & Out_Cnt).Value = "広島市" Then Range(Out_都市名IC & Out_Cnt).Font.Bold = True Range(Out_都市名IC & Out_Cnt).Font.ColorIndex = 41 Range(Out_都市名IC & Out_Cnt).Interior.ColorIndex = 34 Range(Out_都市名IC & Out_Cnt).Interior.Pattern = xlSolid ElseIf Range(Out_都市名IC & Out_Cnt).Value = "仙台市" Then Range(Out_都市名IC & Out_Cnt).Font.Bold = True Range(Out_都市名IC & Out_Cnt).Font.ColorIndex = 41 Range(Out_都市名IC & Out_Cnt).Interior.ColorIndex = 34 Range(Out_都市名IC & Out_Cnt).Interior.Pattern = xlSolid ElseIf Range(Out_都市名IC & Out_Cnt).Value = "函館市" Then Range(Out_都市名IC & Out_Cnt).Font.Bold = True Range(Out_都市名IC & Out_Cnt).Font.ColorIndex = 41 Range(Out_都市名IC & Out_Cnt).Interior.ColorIndex = 34 Range(Out_都市名IC & Out_Cnt).Interior.Pattern = xlSolid End If とこんな感じにしてできていたのですが、条件が30個以上ある中から対応させようとすると、 これでは大変なので、簡単にできないかなと思いまして。。。 会社の人からも条件だけを登録(他のシート?)できてそこから抜き出せるプログラムにできないか?といわれています。 どうでしょうか?

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

処理を2つに分けて考えます。 >Range(Out_都市名IC & Out_Cnt).Value = "松山市" 30個にヒットしたかどうかの判定をして、結果を特定のセルへセットする。 「OK」「NG」とか。 特定のセル=「OK」なら Range(Out_都市名IC & Out_Cnt).Font.Bold = True Range(Out_都市名IC & Out_Cnt).Font.ColorIndex = 41 Range(Out_都市名IC & Out_Cnt).Interior.ColorIndex = 34 Range(Out_都市名IC & Out_Cnt).Interior.Pattern = xlSolid の処理をさせる。 これなら上の処理部分のみ(対象都市増減時に)考えれば良い。 これをシート上にどうもたせるかです。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

>会社の人からも条件だけを登録(他のシート?)できてそこから抜き出せるプログラム グッドアドバイスだと思います。 仮に シート名 登録として 検索文字   文字色 セル色 松山市     34   41 広島市     34   41 ・・・と一覧表を準備します。 Dim c As Range With Worksheets("登録").columns(s1) '---1列目が対象 Set c = .Find(What:=Range(Out_都市名IC & Out_Cnt).Value, LookIn:=xlValues, _ LookAt:=xlPart) '---cに検索結果を格納 If Not c Is Nothing Then '---条件に当てはまるセルがあれば Range(Out_都市名IC & Out_Cnt).Font.ColorIndex = .c.Offset(0,1).Value Range(Out_都市名IC & Out_Cnt).Interior.ColorIndex = .c.Offset(0,2).Value    End If  End With ・・・と云った感じで 考えてみてください。詳しくは http://www.moug.net/tech/exvba/0050116.htm 参照してください。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

>条件だけを登録(他のシート?)できてそこから抜き出せるプログラムにできないか あるブック.xlsのあるシートのA1:A130に「条件」を羅列してあるとすると。 作成例: if application.worksheetfunction.countif(workbooks("あるブック.xls").worksheets("あるシート").range("A1:A130"), Range(Out_都市名IC & Out_Cnt).Value) > 0 then  'ありました。  Range(Out_都市名IC & Out_Cnt).Font.Bold = True  Range(Out_都市名IC & Out_Cnt).Font.ColorIndex = 41  Range(Out_都市名IC & Out_Cnt).Interior.ColorIndex = 34  Range(Out_都市名IC & Out_Cnt).Interior.Pattern = xlSolid end if 具体的にどのように組み立てたら「あるブック」だの「あるシート」だのが,いまあなたが宿題を貰った使用目的で「使いやすく」なるのか考えて,工夫して実装してみてください。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

if で orを使って複数記述するとか、またはselect case文を使うとか。 select cade Range(Out_都市名IC & Out_Cnt).Value case "松山市", "函館市": '好きなだけ書いてください。行末に半角スペースと_を入れると次行に継続可能  Range(Out_都市名IC & Out_Cnt).Font.Bold = True  Range(Out_都市名IC & Out_Cnt).Font.ColorIndex = 41  Range(Out_都市名IC & Out_Cnt).Interior.ColorIndex = 34  Range(Out_都市名IC & Out_Cnt).Interior.Pattern = xlSolid case else   'その他の場合 end select

syoutan
質問者

補足

条件として130個あるので。。。 他にないでしょうか?