- ベストアンサー
エクセルVBAでマクロを動作させる度に異なる種類の線を書く
- エクセル(2007)VBAを使って、マクロを動作させる度に線の種類を変更させたいです。
- 以前質問させて頂き、下記のようにマクロを記載したのですが、(2)⇒(3)へ動作しません。。。
- 実線と細い実線の定数が同じく「 1 」な事が問題なのかと思うのですが、何か上手く実行できる方法はありませんでしょうか。。。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
LineStyle= xlContinuous のときだけ、Weight の値も見て処理を分けては如何でしょう。 Sub 罫線チェンジ() nL = Selection.Borders.LineStyle nW = Selection.Borders.Weight Select Case nL Case xlNone '(5)→(1) nLL = xlContinuous nWW = xlThin Case xlContinuous '(1)か(2) If nW = xlThin Then '(1)→(2) nLL = xlContinuous nWW = xlHairline Else '(2)→(3) nLL = xlDash nWW = xlThin End If Case xlDash '(3)→(4) nLL = xlDot nWW = xlThin Case Else '(4)→(5) nLL = xlNone End Select '罫線を設定 With Selection.Borders .LineStyle = nLL If nLL <> xlNone Then .Weight = nWW End With End Sub
その他の回答 (1)
- goota33
- ベストアンサー率53% (7/13)
ソースを以下のように変えてみてはどうでしょうか? 一応(2)⇒(3)が正しく動作するのと、マクロが (1)実線⇒(2)細い実線⇒(3)細線⇒(4)点線⇒(5)線なし というように変わるかどうか確認しました。 もし一番最初に実行する時のマクロで、 線の太さが気に入らなければxlMediumをxlThinに変えてください。 Private lngBuff As Long Sub 罫線チェンジ() If IsNull(lngBuff) = True Then lngBuff = 0 lngBuff = lngBuff + 1 Debug.Print lngBuff Select Case lngBuff Case Is = 1 Selection.Borders.LineStyle = xlContinuous Selection.Borders.Weight = xlMedium Case Is = 2 Selection.Borders.LineStyle = xlContinuous Selection.Borders.Weight = xlHairline Case Is = 3 Selection.Borders.LineStyle = xlContinuous Selection.Borders.Weight = xlThin Case Is = 4 Selection.Borders.LineStyle = xlDot Case Else Selection.Borders.LineStyle = xlNone lngBuff = 0 End Select End Sub
お礼
回答ありがとうございます!! ご丁寧にコードを書いて頂きありがとうございます。 また、線の太さを変更したい場合・・とご親切なアドバイスもありがとうございます! ”Case Is = ○”と記載できる方法があるんですね。 それには、最初の宣言がとても大事になっているのだと思うのですが、、 知識が足りなくきちんと理解できておらず申し訳ありません。 どちらもやりたいことがスムーズにできたので、ベストアンサーをつけるのに 悩んだのですが、先に回答頂いた方にさせて頂きました。すみません。。 本当にありがとうございました!!!
お礼
回答ありがとうございます!! ご丁寧にコードを書いて頂きありがとうございます。 凄いです、、、。私のレベルでは到底たどりつけない技が各所に。。。 Caseの中にif、最初の線のスタイル・太さの宣言など、 恰好良いマクロをありがとうございます。 いつかこんな風に書けるようになりたいと思いました。 本当にありがとうございます!!!