• ベストアンサー

エクセルVBAで関数が設定してある場合の“0”が出てしまう対処法

Sheet1に入力したものをSheet2に表示されるようになっています。 例えばSheet1のA1に「abc」とあり、Sheet2のN5に「=A1」としています。 このSheet2を別ブックにしています。 コードの一部ですが、 .Value = .Value としてSheet1に入力したのをSheet2で値としていますが、Sheet1で入力していなくてSheet2で関数入力してある場合、別ブックにした場合値の「0」になったままですが、これをどうにか消したいと思っています。 方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.5

#3です Range("F13").ClearContents を Range("F13").value="" >うまくできませんでした。どこにそう書いたらいいかがわかっていないからです。 質問者さんはコードを .Value = .Value しか提示されていないので 当然その行を置き換えるしかないので説明を省きました 的確な回答が必要なら、コードをすべて補足されては 正直、何をやりたいのか分かりません

その他の回答 (5)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

もうひとつ 直接、値を代入するのはどうでしょうか。 結合セルが途中に含まれていてもOKでした。 Sub test2()   Dim a As Range   Dim b As Range   Set a = Workbooks("AA.xls").Sheets("Sheet1").Range("A1")   Set b = Workbooks("BB.xls").Sheets("Sheet1").Range("A1")   Do     b.Value = a.Value     Set a = a.Offset(1, 0)     Set b = b.Offset(1, 0)   Loop While a.Address <> "$A$15"   Set a = Nothing: Set b = Nothing End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

結合セルがある場合、MergeAreaプロパティを使えばよいです。 セルの値が0の場合、セルの数式からブック名、シート名、セル番地を取得し、 リンク元セルの判定をするようにしてみました。 Sub test1()   Dim rng As Range   Dim c As Range   Dim wb As String   Dim ws As String   Dim wc As String      Set rng = Workbooks("別ブック名").Sheets("Sheet2").Range("A1:A50")   For Each c In rng     If c.Value = 0 Then       On Error Resume Next       wb = Replace(Split(c.Formula, "]")(0), "=[", "")       ws = Split(Split(c.Formula, "]")(1), "!")(0)       wc = Split(Split(c.Formula, "]")(1), "!")(1)       On Error GoTo 0       If wb <> "" Then         If Workbooks(wb).Sheets(ws).Range(wc).Value = "" Then           c.MergeArea.ClearContents         End If         wb = "": ws = "": wc = ""       End If     Else       c.MergeArea.Value = c.MergeArea.Value     End If   Next End Sub

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

if .value=0 then .value="" else .Value = .Value end if if .value="" then .value="" else .Value = .Value end if のどちらかでうまくいきそうですけど

wait4u
質問者

お礼

ありがとうございました。 私の知識不足のせいで教えていただいたもので うまくできませんでした。どこにそう書いたらいいかが わかっていないからです。いろいろ考えて コードの途中で、別ブックがアクティブになっているときに、 If Range("F13") = 0 Then Range("F13").ClearContents End If として関数が設定してあって、0となる可能性のある個所を全部 そうしようと思っています。 上のような稚拙なコードですが、こんなのより簡単なコードだと どうなるでしょうか? あと、結合セルの場合もあり、その場合は上記のように書いても エラーとなりましたが、どのように対処するものでしょうか? 厚かましいですが、お教えいただければ幸いです。

回答No.2

別ブックにしなくても0が出てくると思いますけど・・・? 関数で対応しようとするとSheet2の「=Sheet1!A1」を「=IF(Sheet1!A1=0,"",Sheet1!A1)」にすれば表示はされなくなります。 何か的外れな回答でしたら補足をお願いします。

wait4u
質問者

お礼

ありがとうございます。別ブックにするのは、Sheet2を別ブックと して保存する必要があり、コードで実施しています。 出来上がったSheet2には関数などが入らない状態のものなので、 関数は使わないで、VBAコードにより解決できないかと考えています。

noname#99913
noname#99913
回答No.1

 0値を表示しないように設定したらどうですか。オプションで設定できますよ。

wait4u
質問者

お礼

ありがとうございました。 ご回答いただいたことは知っていますが、0を完全に消した状態を コードでできないかと考えています。

関連するQ&A

専門家に質問してみよう