- ベストアンサー
エクセルVBAで関数が設定してある場合の“0”が出てしまう対処法
Sheet1に入力したものをSheet2に表示されるようになっています。 例えばSheet1のA1に「abc」とあり、Sheet2のN5に「=A1」としています。 このSheet2を別ブックにしています。 コードの一部ですが、 .Value = .Value としてSheet1に入力したのをSheet2で値としていますが、Sheet1で入力していなくてSheet2で関数入力してある場合、別ブックにした場合値の「0」になったままですが、これをどうにか消したいと思っています。 方法はないでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#3です Range("F13").ClearContents を Range("F13").value="" >うまくできませんでした。どこにそう書いたらいいかがわかっていないからです。 質問者さんはコードを .Value = .Value しか提示されていないので 当然その行を置き換えるしかないので説明を省きました 的確な回答が必要なら、コードをすべて補足されては 正直、何をやりたいのか分かりません
その他の回答 (5)
- xls88
- ベストアンサー率56% (669/1189)
もうひとつ 直接、値を代入するのはどうでしょうか。 結合セルが途中に含まれていても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)
結合セルがある場合、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)
if .value=0 then .value="" else .Value = .Value end if if .value="" then .value="" else .Value = .Value end if のどちらかでうまくいきそうですけど
- hamaken5031
- ベストアンサー率22% (15/68)
別ブックにしなくても0が出てくると思いますけど・・・? 関数で対応しようとするとSheet2の「=Sheet1!A1」を「=IF(Sheet1!A1=0,"",Sheet1!A1)」にすれば表示はされなくなります。 何か的外れな回答でしたら補足をお願いします。
お礼
ありがとうございます。別ブックにするのは、Sheet2を別ブックと して保存する必要があり、コードで実施しています。 出来上がったSheet2には関数などが入らない状態のものなので、 関数は使わないで、VBAコードにより解決できないかと考えています。
0値を表示しないように設定したらどうですか。オプションで設定できますよ。
お礼
ありがとうございました。 ご回答いただいたことは知っていますが、0を完全に消した状態を コードでできないかと考えています。
お礼
ありがとうございました。 私の知識不足のせいで教えていただいたもので うまくできませんでした。どこにそう書いたらいいかが わかっていないからです。いろいろ考えて コードの途中で、別ブックがアクティブになっているときに、 If Range("F13") = 0 Then Range("F13").ClearContents End If として関数が設定してあって、0となる可能性のある個所を全部 そうしようと思っています。 上のような稚拙なコードですが、こんなのより簡単なコードだと どうなるでしょうか? あと、結合セルの場合もあり、その場合は上記のように書いても エラーとなりましたが、どのように対処するものでしょうか? 厚かましいですが、お教えいただければ幸いです。