- 締切済み
ただいま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個以上ある中から対応させようとすると、 これでは大変なので、簡単にできないかなと思いまして。。。 会社の人からも条件だけを登録(他のシート?)できてそこから抜き出せるプログラムにできないか?といわれています。 どうでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- layy
- ベストアンサー率23% (292/1222)
処理を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)
>会社の人からも条件だけを登録(他のシート?)できてそこから抜き出せるプログラム グッドアドバイスだと思います。 仮に シート名 登録として 検索文字 文字色 セル色 松山市 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)
>条件だけを登録(他のシート?)できてそこから抜き出せるプログラムにできないか あるブック.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)
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
補足
条件として130個あるので。。。 他にないでしょうか?