- ベストアンサー
Excel2007で表の検索とセル操作方法
- Excel2007で表を作成し、別のセルの操作方法について調べています。D列に特定の文字がある場合に、E~J列を結合し、特定の文字を入力する方法や、条件付き書式を使って特定の条件で入力する方法を試しましたがうまくいかず、VBAを使用する方法を調べています。
- Excel2007で表を作成し、別のセルの操作方法について調べています。D列に特定の文字がある場合に、E~J列を結合し、特定の文字を入力する方法や、条件付き書式を使って特定の条件で入力する方法を試しましたがうまくいかず、VBAを使用する方法を調査中です。
- Excel2007で表を作成し、別のセルの操作方法について調べています。D列に特定の文字がある場合に、E~J列を結合し、特定の文字を入力する方法や、条件付き書式を使って特定の条件で入力する方法を試しましたが上手くいきません。VBAを使用することで処理を行う方法を調査中です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まぁ,無理矢理マクロを押しつけているのはこちらですから,出来るだけ対応はします。ただ,後出しで後から後から問題が発生したり「実はもっとこうしたい」が次々出てくるのはツライものがあります。 対応内容: ○表は5行目がタイトル行で,6行目からデータが入っている ○5行目のタイトル行と6行目との境に二重下線が引いてある ○#N/Aが計算されているセルがある ●表範囲には罫線が引かれている 手順: 5行目タイトル行の二重下線を引き直す 前回のマクロを消去し,次のマクロに差し替える sub macro1r1() dim h as range for each h in range("D6:D" & range("D65536").end(xlup).row) with h.offset(0, 1) if h.text = "休" then .resize(1, 6).clearcontents .resize(1, 6).merge .value = "休館日" .font.name = "未だ不明の所定のフォント名" ’★ .font.size = 36 ’★ else .unmerge .clearcontents .resize(1, 6).borders.linestyle = xlcontinuous ’●不要の場合はこの行削除 .resize(1, 6).font.name = "HGSゴシックE" ’☆ .resize(1, 6).font.size = 24 end if end with next end sub ☆と★を手直してからマクロを実行する。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
次のように「実際のエクセルはこうなっていて,こうしたいんです」というのが重要です。 >実はD列には前もって文字が入っていて、バッチ的な感じで処理できるようにしたかったのです。 >D列にはVLOOKUPで呼んだ他のシートの他の表の文字が入ってます。ある文字は"休"です。 準備: 前回回答したマクロは役に立たないのでバッサリ消して丸ごと捨てる。 エクセル画面に戻る ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1() dim h as range for each h in range("D2:D" & range("D65536").end(xlup).row) with h.offset(0, 1) if h.value = "休" then .resize(1, 6).clear .resize(1, 6).merge .value = "休館日" .font.name = "未だ不明の所定のフォント名" ’★ .font.size = 36 ’★ else .unmerge .clearcontents .resize(1, 6).font.name = "HGSゴシックE" ’☆ .resize(1, 6).font.size = 24 end if end with next end sub ★の部分を適切に修正してから,ファイルメニューから終了してエクセルに戻る 手順: ALT+F8を押し,macro1を実行する シート上にオートシェイプの図形等を配置,右クリックしてマクロの登録でmacro1を登録し,クリックして実行する #こちらの質問相談掲示板の機能で☆の行のフォント名が適切に表示されない可能性があります。実際のエクセル画面からフォント名をコピーし貼り付けて,修正してご利用下さい。
補足
再び丁寧に教えていただきありがとうございます。 実行してみたところいくつか問題がありました。 ●表は5行目から始っていて、5行目は列の内容が入っていて、実際の内容は6行目からなのですが、 実行してみたところ、E5の内容が消えました。→これは.clearcontentsを削除することで対応でき そうです。 ●D6に"休"が入っていたとき、5行目と5行目の境の罫線(二重線)が消える。D7に"休"が入って いたときは6行目と7行目の境の罫線(一重線)は消えません。試しに5行目と6行目の境の罫線を 一重線にしてやってみましたが、やはり消えました。→これは後から線を引きなおすようにすればよい でしょうか。 ●例えばD6、D7、D8、D19に"休"が入っていた場合、前3つの方のE~J列は変化するのですが、 E19~J19は変化しない。→これは、前もって伝えていなかったのですが、D列にはVLOOKUPの式が 入っているのですが、#N/Aが返っていることもあります。このせいで止まってしまったのでしょうか? ●動かすと実行時エラー'13'と表示される。 実際に動かしてみて、思っていたイメージだったのでとても嬉しく、感謝しているのですが、 特に3番目が困っています。
- keithin
- ベストアンサー率66% (5278/7941)
マクロを使って次のようにします。 手順: シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub worksheet_change(byval Target as excel.range) dim h as range set target = application.intersect(target, range("D:D")) if target is nothing then exit sub for each h in target with h.offset(0, 1) if h = "ある文字" then ’★ .resize(1, 6).merge .value = "決まった文字" ’★ .font.name = "所定のフォント名" ’★ .font.size = 14 ’★ else .unmerge .clearcontents .resize(1, 6).clearformats end if end with next end sub ファイルメニューから終了してエクセルに戻り(そのまえにマクロの★を付けた部分を所定の内容に修正してから) D列に「ある文字」を記入したり消去してみます。 #余談 補足には及びませんが,ご質問で説明が足りていない内容は次の通りです。 ●Excel2007で表を検索とは? ●ある文字とは? ●通常とはフォント、フォントサイズ、を変えてとは? ●決まった文字とは? ●E列でIF関数を使ってE~J列に入れるとは? ●引用する形にしても入れ先が結合できてないせいかうまくできません。とは??
補足
こんなに早く回答いただきありがとうございました。 説明が足りず申し訳ありませんでした。 特にタイトルは字数制限があり、舌足らずになってしまいました。 さっそく書いていただいたコードを教えていただいたように貼ってみたのですが、 D列に新たに"ある文字"を入れると"決まった文字"が入力されるのですが、前もって入っていたところは 変化しませんでした。 実はD列には前もって文字が入っていて、バッチ的な感じで処理できるようにしたかったのです。 以下ご指定があった点について説明を補足します。 ●Excel2007で表を作っているのですが、その表のある列を検索して合致したときは~の意味でした。 ●D列にはVLOOKUPで呼んだ他のシートの他の表の文字が入ってます。ある文字は"休"です。 ●E~J列はD列に"休"と入っていないときはそれぞれのセルに文字をHGSゴシックEの28ポイントで 入れているのですが、D列が"休"のときはE~J列を結合して,別のフォント、もっと大きいサイズで ●"休館日"と入れたいのです。 ●今まではE~J列に貼りつけたいもの(E~J列を結合して"休館日"と入れたものを別に作っていて、 コピー、E列に貼りつけとしているので、たとえばそれがE40にあるとして、 E列に=IF(D9="休",E40,"")のようにすればうまくいくかと思ったのですが、E~F列に"館日" みたいな感じで入るだけでした。E列のものもE列に入れればうまくできるので、結合があるとうまく いかないのかと思いました。 知識不足でうまく説明できずすみません。
お礼
とても助かりました。ありがとうございました。 その後遊びで字体を斜めにしたり、色をつけたりしてなんとなくなじんできたような気がします。 ボタンも今回初めてつくりましたが、ちょっと感動しました。 まだ構造的なこと(?)はよくわからないのですが、これから勉強していきたいと思います。 いろいろわがままなことをいってしまい、申し訳ありませんでした。