Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


929 / 13645 ツリー ←次へ | 前へ→

【77453】カレンダーに青太線 桃太郎 15/10/13(火) 1:34 質問[未読]
【77454】Re:カレンダーに青太線 β 15/10/13(火) 7:16 発言[未読]
【77455】Re:カレンダーに青太線 β 15/10/13(火) 7:48 発言[未読]
【77457】Re:カレンダーに青太線 β 15/10/13(火) 10:22 発言[未読]
【77466】遅くなりましてすいません 桃太郎 15/10/13(火) 20:36 発言[未読]
【77467】ちょっと原因がわかりました 桃太郎 15/10/13(火) 20:54 発言[未読]
【77468】Re:ちょっと原因がわかりました β 15/10/14(水) 0:39 発言[未読]
【77469】Re:ちょっと原因がわかりました 桃太郎 15/10/14(水) 3:02 お礼[未読]

【77453】カレンダーに青太線
質問  桃太郎  - 15/10/13(火) 1:34 -

引用なし
パスワード
   こんにちは、よろしくお願いします。

Cell(4.5)に〇月1日のシリアルがあり、横長のカレンダーが置いてあります。
縦軸はメンバーのシフト表が32行目までありましたが、
事情により37行目まで増やしました。

7年ぐらい前にここで土日に青太線で囲むマクロを作っていただきました。
ところが今それを使うとまともに動かないことがわかりました。

原因がエクセルのバージョンのせいか、行を増やしたせいなのか
恥ずかしながらよくわかりません。

コードを見ていただいて修正していただけたら幸いです。

_________________________________________________________

Sub 罫線作成3()
' 罫線作成 Macro
' マクロ記録日 : 2006/3/13 ユーザー名 :


  Dim rngCurrent As Range
  Dim kei As Integer
 
  Set rngCurrent = ActiveSheet.Cells(4, 5)
 
  Application.ScreenUpdating = False
 
  With rngCurrent
    With .Resize(29, 31)
      .Borders(xlDiagonalDown).LineStyle = xlNone
      .Borders(xlDiagonalUp).LineStyle = xlNone
      With .Borders(xlEdgeLeft)
        .Weight = xlHairline
        .ColorIndex = xlAutomatic
      End With
      With .Borders(xlEdgeTop)
        .Weight = xlThin
        .ColorIndex = xlAutomatic
      End With
      With .Borders(xlEdgeBottom)
        .Weight = xlThin
        .ColorIndex = xlAutomatic
      End With
      With .Borders(xlEdgeRight)
        .Weight = xlHairline
        .ColorIndex = xlAutomatic
      End With
      With .Borders(xlInsideVertical)
        .Weight = xlHairline
        .ColorIndex = xlAutomatic
      End With
    End With
    '青太線の出力
    For kei = 0 To 30
      With .Offset(, kei).Resize(29)
        Select Case .Item(37, 1).Value
          Case Is = 7
            With .Borders(xlEdgeLeft)
              .Weight = xlMedium
              .ColorIndex = 11
            End With
            With .Borders(xlEdgeTop)
              .Weight = xlMedium
              .ColorIndex = 11
            End With
            With .Borders(xlEdgeBottom)
              .Weight = xlMedium
              .ColorIndex = 11
            End With
      If kei = 30 Then
       With .Borders(xlEdgeRight)
        .Weight = xlMedium
        .ColorIndex = 11
       End With
             End If
       
      Case Is = 1
          
      If kei = 0 Then
       With .Borders(xlEdgeLeft)
        .Weight = xlMedium
        .ColorIndex = 11
       End With
      End If
            With .Borders(xlEdgeTop)
              .Weight = xlMedium
              .ColorIndex = 11
            End With
            With .Borders(xlEdgeBottom)
              .Weight = xlMedium
              .ColorIndex = 11
            End With
            With .Borders(xlEdgeRight)
              .Weight = xlMedium
              .ColorIndex = 11
            End With
        End Select
      End With
    Next kei
  End With

  Set rngCurrent = Nothing
 
  Application.ScreenUpdating = True


以上です。自分でも数字をいじってみましたが、ますます動かなくなりました。
よろしくお願いします

【77454】Re:カレンダーに青太線
発言  β  - 15/10/13(火) 7:16 -

引用なし
パスワード
   ▼桃太郎 さん:

おはようございます。

アップされたコードは一部を修正したあとのものでしょうか?
いずれにしても、コードを読んで推測しながら、こうじゃないですかという回答をしてもいいのですが
その推測が間違っているかもしれませんね。

どのような罫線を引きたいのか、言葉で明確に定義されたほうが回答しやすいですね。

・ある矩形の領域がある。そこは、現在、どんなアドレスなのか。
・将来列が増える可能性があるか、行が増える可能性はあるか。
・その矩形の領域の縦方向に、
 矩形の左端と右端(矩形を囲むところ)には罫線必要か不要か、必要ならどんな罫線か
 矩形の内部の縦方向には、どんな罫線(ヘアラインでしょうけど)を引きたいか
・その矩形の領域の横方向に
 矩形の上端と下端(矩形を囲むところ)には罫線必要か不要か、必要ならどんな罫線か
・その矩形の内部の横方向には、その行の、どのセルの値を参照し、
 それがどんな値なら、どんな罫線を(青太線でしょうけど)引きたいか

このように整理できませんか。

【77455】Re:カレンダーに青太線
発言  β  - 15/10/13(火) 7:48 -

引用なし
パスワード
   ▼桃太郎 さん:

想像ですけど、レイアウトと罫線要件は以下のようなことですか?

・対象の領域は E4:AI32
・領域の上端、下端には、細線の黒
・領域の縦方向には左端、右端含めてヘアライン
・その上で各列の40行目の値(曜日が数字ではいっているんでしょうかね)を参照し
 7なら左、上端、下端が青太線、1なら右、上端、下端が青太線。
 結果的に 7,1 が連続していれば(土、日 ですかね)週末の縦2列が青太線で囲まれる。

こういうことでしょうかね?

この場合、将来、また行が増えるとすれば、40行目の判定場所もデータ行になるかもしれませんね。
行が増えても問題のない場所、矩形領域の上のほうに、それをもっていったほうがいいと思いますね。

【77457】Re:カレンダーに青太線
発言  β  - 15/10/13(火) 10:22 -

引用なし
パスワード
   ▼桃太郎 さん:

申し上げたように、要件を具体的に説明いただければ、適切な回答も可能かと思いますが
以下は、想像をたくましくしたコード案です。
領域や、罫線要件に誤解があるかもしれませんが。

Sub test()

  Dim rngCurrent As Range
  Dim col As Range
  Dim chk As Variant
  
  Set rngCurrent = Range("D4:AH32")
  
  Application.ScreenUpdating = False

  '領域の罫線を処理前に削除
  rngCurrent.Borders.LineStyle = xlNone
  '左端、右端含めて、縦に HairLine
  With rngCurrent.Offset(, -1).Resize(, rngCurrent.Columns.Count + 2).Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
    .Weight = xlHairline
  End With
  '領域上端、下端に細実線
  With rngCurrent.Borders(xlEdgeTop)
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With rngCurrent.Borders(xlEdgeBottom)
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  '土日枠
  For Each col In rngCurrent.Columns
    chk = Cells(40, col.Column).Value
    Select Case chk
      Case 1, 7
        '列上端、下端に青太線
        With col.Borders(xlEdgeTop)
          .Weight = xlMedium
          .ColorIndex = 11
        End With
        With col.Borders(xlEdgeBottom)
          .Weight = xlMedium
          .ColorIndex = 11
        End With
        '左あるいは右に青太線
        With col.Borders(IIf(chk = 1, xlEdgeRight, xlEdgeLeft))
          .Weight = xlMedium
          .ColorIndex = 11
        End With
    End Select
  Next
  
  Set rngCurrent = Nothing

  Application.ScreenUpdating = True

End Sub

【77466】遅くなりましてすいません
発言  桃太郎  - 15/10/13(火) 20:36 -

引用なし
パスワード
   また説明不足で申し訳ありません。

対象領域はE4からAI40です

土日の判定はどうしているのか、コードからわからなかったのですが

E4〜AI4 まではDATE関数により1日から31日まで表示されます。
E5〜AI5 まではWEEKDAY関数が置いてあり4行目のシリアルから曜日が表示
されるようにしてあります。

罫線は上下の端のみ普通の細線、内部は縦も横も書式設定でなしの下に出てくる
細かい点線でした。

βさんのコードためさせていただきますね

【77467】ちょっと原因がわかりました
発言  桃太郎  - 15/10/13(火) 20:54 -

引用なし
パスワード
   7年も経って昔の事がわからなくなっていました。

40行目に罫線作戦用のWEEKDAY関数が置いてありました。
何故そんな所に作ったのか忘れてしまいましたが、
昔もセル行を増やして、困ってあれこれした覚えがあります。

しかし今は何で40行目なのかわからなくなってしまいました。

今回の行を増やしたことにより罫線作成のためのと記してある
行は45行目に移動していました。

とすると元のコードのその部分を変更すればよいのでしょうか?

しかし私にはコードのどこが該当してどう直せばよいのかわかりません。
申しわけありませんが、そこの部分を教えてください。

βさんのコードも動きませんでした。これも45行目判定になったせいだと思われます。

【77468】Re:ちょっと原因がわかりました
発言  β  - 15/10/14(水) 0:39 -

引用なし
パスワード
   ▼桃太郎 さん:

Set rngCurrent = Range("D4:AH32") これを
Set rngCurrent = Range("E4:AI40") に変更。

chk = Cells(40, col.Column).Value これを
chk = Cells(45, col.Column).Value に変更。


>内部は縦も横も書式設定でなしの下に出てくる細かい点線でした。

元のコードには、横の点線をセットするコードは、無いと思うんですが?
もし、セットするなら、

  '土日枠

このコメントの前あたりに

  '領域内部に横 HairLine
  With rngCurrent.Borders(xlInsideHorizontal)
    .LineStyle = xlContinuous
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
    .Weight = xlHairline
  End With

を追加してみてください。

【77469】Re:ちょっと原因がわかりました
お礼  桃太郎  - 15/10/14(水) 3:02 -

引用なし
パスワード
   ▼β さん:


>Set rngCurrent = Range("E4:AI40") に変更。

表は37行目までだったので("E4:AI37")にして、全て解決しました。
一部参照本見てもよくわからないコードなので助かりました。

とてもとても感謝いたします。

929 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free