[[20110625192333]] 『突然 #VALUE! になる』(超超初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『突然 #VALUE! になる』(超超初心者)  Excel2003    WindowsXPです
 下記の複数シートが有るブック(元表を使用する時にコピーしている)で
 使用中に突然 長さを表示するセル [C7] [G7] [K7]・・・・[S39]が #VALUE! になる事が有ります。

 原因・解決法を教えて下さい。

   A   B   C    E   F   G    I   J   K    M   N   O    Q   R   S
  7
  8

 23
 24

 39
 40

 「端子台の長さを表示するセル」
 C7セル =TBLEN(A8,B8,C8)
 G7セル =TBLEN(E8,F8,G8)
 K7セル O7セル S7セル C24セル・・・・S39セル にもおなじように入っています。

 このブックの最初のシートに端子台の規格を表記してあります。
 A列に「型式1」 B列に「型式2」C列に「型式3」D列に「長さ」を表記

 マクロはまったく解りませんのでコピーだけします。

 Function TBLen(strKey1 As String, strKey2 As String, strKey3 As String) As Single

    Dim intI As Integer

    With Worksheets("端子台長さ")

        '---  引数の初期化  ---
        TBLen = 0

        '---  シート内の検索  --- --- --- --- --- --- --- --- --- --- --- --- --
        intI = 2
        Do Until .Cells(intI, 1) = ""
            If .Cells(intI, 1) = strKey1 And _
               .Cells(intI, 2) = strKey2 And _
               .Cells(intI, 3) = strKey3 Then           '条件比較

                TBLen = .Cells(intI, 4)                 '端子台長さ
                Exit Function
            End If
            intI = intI + 1
        Loop
        '--- --- --- --- --- --- --- --- --- --- --- --- --
    End With

End Function

 気のせいか数時間後に直っています。?? こんな事って有りますか。


 Option の自動計算が Off になっていませんか?
 と思いましたが、C列が循環しているせいではないですか?
 (Mook)

 お世話になります。

 通常の使用中には良いのですが突然(1,2ヶ月に1回ぐらい
 ブック内全てのシートの 上記 のセルが #VALUE! になります。

 「オプション」の「計算方法」の「自動」にチェックが入っています。

 C列が循環するような操作「移動・コピー等」を行った場合にはそのセルだけで、
 他への影響は無かったと思います。

 「C列が循環する」と何かとの複数原因か? とも考えましたが解りません。

 質問ですが  作ってもらったVBAです 間違っていませんか?
 (超超初心者)

 こちらで検証して#VALUE!になると思われるケースは、
 
・.Cells(intI, 4)で数値以外(数値化できない文字列)が関数の結果として渡される場合。
  (データ型が一致しない)
・32768行以上検索が行われる場合。
  (Integer型変数のオーバーフロー)
・参照するシート「端子台長さ」が存在しない場合。
  (オブジェクトエラー、「インデックスが有効範囲にない」)
 
 これらを回避することだけを考慮すると、
 Function TBLen(strKey1 As String, strKey2 As String, strKey3 As String) As Variant
     Dim intI As Long
     Dim sh As Worksheet
     For Each sh In Worksheets
         If sh.Name = "端子台長さ" Then
             With Worksheets("端子台長さ")
                 '---  引数の初期化  ---
                 TBLen = 0
                 '---  シート内の検索  --- --- --- --- --- --- --- --- --- --- --- --- --
                 intI = 2
                 Do Until .Cells(intI, 1) = ""
                     If .Cells(intI, 1) = strKey1 And _
                        .Cells(intI, 2) = strKey2 And _
                        .Cells(intI, 3) = strKey3 Then           '条件比較

                         TBLen = .Cells(intI, 4)                 '端子台長さ
                         Exit Function
                     End If
                     intI = intI + 1
                 Loop
                 '--- --- --- --- --- --- --- --- --- --- --- --- --
             End With
         Else
             TBLen = "Sheet does not exist"
         End If
     Next sh
 End Function
 
いずれにしても、数時間後に直る、というのが理解できない現象ですが。
(みやほりん)(-_∂)b

 (みやほりん)(-_∂)b さん  ありがとうございます。

 >.Cells(intI, 4)で数値以外(数値化できない文字列)が関数の結果として渡される場合。
   数値です。

 >・32768行以上検索が行われる場合。
   増える可能性がありますが現在 235行 です。

 >・参照するシート「端子台長さ」が存在しない場合。
   直前まで使用中でした。  現在は、直ったために普通に使用しています。

 又同じ現象が起こったら その時の前後を把握して再質問させていただきます。

 お世話に成りました。 まずは、解決した事にさせていただきます。
 (超超初心者)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.