- ベストアンサー
[Excel]罫線から数字に変換する方法
- マイクロソフトのExcel2003を使っていますが、罫線から数字に変換する方法を知りたいです。条件付き書式を使って数字に罫線を引くことはできることが分かりましたが、逆の操作がわかりません。
- 例えば、四方を罫線で囲まれたセルに対して、「8」と表示させたいです。上に罫線があるセルに対しては「1」、上と右に罫線があるセルに対しては「4」と表示させたいです。MSExcel2010やOpenOfficeでも構いませんので、どなたか教えてください。
- Excelのセルには罫線を引くことができますが、逆に罫線から数字に変換する方法を知りたいです。例えば、四方を罫線で囲まれているセルには「8」と表示させたいです。上に罫線があるセルには「1」、上と右に罫線があるセルには「4」と表示させたいです。マイクロソフトのExcel2003を使用していますが、MSExcel2010やOpenOfficeでも構いません。お知恵をお貸しください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
なかなか楽しそうな話題だったので、ちょっとだけ考えてみました。 マクロを使ってしまうのがちょっと哀しいところです。 詳しい条件が今一つ掴めなかったので、 とりあえずはセルの四方の罫線を数えるマクロです。 Sub CheckLine() Dim Tag As Range Dim ChLine As Integer, i As Long For Each Tag In Selection ChLine = 0 For i = 7 To 10 If Tag.Borders(i).LineStyle <> -4142 Then ChLine = ChLine + 1 End If Next Tag.Value = ChLine Next End Sub マクロを走らせたときに選択されている範囲のセル一つ一つに対し、 ・とりあえず変数を初期化 ・四方の罫線を確認 (引かれていない時は-4142なので、それ以外だったら+1 これを左・上・下・右の4回繰り返し、最大は「4」) ・最後に変数をセルに代入 と言う処理です。 でもこれではどこに罫線があるのか、数字から判断できませんね。 そこで、これに各々の条件をさらに加味します。 ・左に罫線がある=+1 ・上に罫線がある=+2 ・下に罫線がある=+4 ・右に罫線がある=+8 (つまり、最大は15=四方に罫線、最小は0=罫線無し) とします。 そうすると以下のコード Sub CheckLine2() Dim Tag As Range Dim ChLine As Integer, i As Long For Each Tag In Selection ChLine = 0 If Tag.Borders(xlEdgeLeft).LineStyle <> -4142 Then ChLine = ChLine + 1 End If If Tag.Borders(xlEdgeTop).LineStyle <> -4142 Then ChLine = ChLine + 2 End If If Tag.Borders(xlEdgeBottom).LineStyle <> -4142 Then ChLine = ChLine + 4 End If If Tag.Borders(xlEdgeRight).LineStyle <> -4142 Then ChLine = ChLine + 8 End If Tag.Value = ChLine Next End Sub こんな感じです。 これも範囲を先に選択して走らせます。 図は、これの結果です。 さてさて、ではこれをご要望の > 四方を罫線で囲まれているセルは(今回の例ではセルA1)→8 > 上に罫線をひかれていたら(今回の例ではセルB1)→1 > 上と右に罫線がひかれていたら(今回の例ではセルC1)→4 > と言った感じにセルA1、B1、C1に表示させたいです。 にどう応用するか?ですが、上述の通り、詳細な条件が若干不足しています。 具体的には「左はどうするか?下はどうするか?右だけの時は?」なんですけどね。 まぁ、これはコード内のIfをちょこちょこっといじってやると可能と思います。 例えば If Tag.Borders(xlEdgeTop).LineStyle <> -4142 And Tag.Borders(xlEdgeRight).LineStyle <> -4142 Then Tag.Value = 4 End If これで上右=4に出来ます。 これを繰り返すと良いでしょう。 ただしこの場合、条件を付けていく順番をキッチリ考えないといけません。 例えば、上右=4を入力した後に、上=1を入れてしまうと上書きされてしまいます。 ここは注意が必要です。 とりあえず、何かの参考になれば幸いです。 個人的には、CheckLine2の考え方がオススメです(笑)。
お礼
わざわざ考えてくれたみたいでありがとうございますm(_ _)m Excelの設定か関数を使えばなんとかなると思っていたのですが、 マクロ使わないとダメなんですね^^; tsubuyukiさんの回答は私がやりたいことそのものずばりだったので 大いに参考にさせていただこうと思います! 本当にありがとうございました。