プロが教える店舗&オフィスのセキュリティ対策術

エクセル VBAにて
If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle.xlContinuous = Value Then
wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Borders(xlDiagonalUp).LineStyle = xlContinuous
Else
wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Value = MasterData(masteridx, 14)
wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Font.Bold = True
wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Font.Size = 22
End If
以上のようにマスタシート対象品の選択セルが斜線だったら
生産日報シート対象品の選択セルに斜線を記入するようにしたいのですが、If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle.xlContinuous = Value Then
wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Borders(xlDiagonalUp).LineStyle = xlContinuous
の書き込み方(マスタシートの斜線判断)がわかりません。
どのように書き込むのでしょうか?

A 回答 (3件)

こんばんは。



この前の続きのような話になりそうですね。

MasterData(masteridx, 14)
MasterData は、Range ですね。あまり、このような使い方はしませんね。ご自分で分かっていればよいのですが、これは、相対位置になってしまいますので、かなりややこしくなります。

If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle.xlContinuous = Value Then
この部分を含めた以下は、このようにしたら良いと思います。


  With wb.Sheets(Seisannippou & CStr(SHeetNumber))
    If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle = xlNone Then
      .Range("T12").Borders(xlDiagonalUp).LineStyle = xlContinuous
    Else
      .Range("T12").Value = MasterData(masteridx, 14)
      .Range("T12").Font.Bold = True
      .Range("T12").Font.Size = 22
    End If
  End With
    • good
    • 0
この回答へのお礼

御礼が遅くなりましてすみません。

上記のコード書込参考になりました。
作成プログラムに書き込んでみましたが
 If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle = xlNone Then
の部分で  実行時エラー'424':
オブジェクトが必要です
以上のエラーが出てしまいます。
どうやら他の部分でエラーを誘発しているようですので
現在調べています。
色々と参考になることを教えていただきありがとうございます。

お礼日時:2008/04/28 09:03

こんにちは。



質問趣旨を勘違いしてるかもしれませんが。


  Dim rSrc As Range
  Dim rDst As Range
  
  Set rSrc = Worksheets("Sheet1").Cells(1, "A")
  Set rDst = Worksheets("Sheet2").Cells(1, "A")

  rDst.Borders(xlDiagonalUp).LineStyle = _
  rSrc.Borders(xlDiagonalUp).LineStyle

罫線を同期させるなら、If による判定は不要に思いました。

私見ですが、変数名は短く、またコードの可読性に気を配った方が回答
し易いです。
例えば、Set ステートメントひとつ使うだけでもご質問前段のコードは
非常にすっきりします。

  Dim r As Range
  
  Set r = wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12")
  
  If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle = xlContinuous Then
    r.Borders(xlDiagonalUp).LineStyle = xlContinuous
  Else
    r.Value = MasterData(masteridx, 14)
    r.Font.Bold = True
    r.Font.Size = 22
  End If

ご参考までに。
    • good
    • 0
この回答へのお礼

御礼が遅くなりましてすみません。
前任者が作成したコードをそのまま記載してしまい
可読性が悪くてすみません。
現状はとりあえず思うように動けばいいと
思って作成を行なっていますが
上記のように可読性が悪くて修正、追加時に
苦労をしております。
とても参考になりました。
ありがとうございます。

お礼日時:2008/04/28 08:30

#1の回答者です。



>作成プログラムに書き込んでみましたが
> If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle = xlNone Then
>の部分で  実行時エラー'424':
>オブジェクトが必要です

その部分にエラーが出るというのは、実際には分かりませんね。
全体的には、単に凝った変数を入れただけで、かなり単純なロジックだと思います。

同じような繰り返しや変数は、きちんとまとめて入れていけば、もっと分かりやすくなるだろうと思います。
例えば、
wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12")

このようなコンテナ型で書くなら、それを変数に入れるなり、With ステートメントにしたら、見やすく、より簡単になるだろうと思います。

オブジェクトが必要だというのなら、それはそのままの意味ですが、それは、そのコードの前の部分からのつなぎの問題だと思います。また、その部分より前で、何かのコードで、オブジェクトが失っている可能性もあります。

なお、もしかしたら、これはコントロールツールのコマンドボタンの内容から抜き出したものでしょうか。あまり、プロシージャから行の抜き出しされると、さっぱり見えないのです。
    • good
    • 0
この回答へのお礼

何度もアドバイスを頂きありがとうございます。
そうですね、凝った変数が使用してあるため
見にくい為、徐々に見やすく修正していきます。
もう一度最初から動作を確認してオブジェクトの
確認してみます。

お礼日時:2008/05/08 08:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています