Excel VBA質問箱 IV

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

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


6255 / 13646 ツリー ←次へ | 前へ→

【46344】#DIV/0!を表示させず、この用になる場合は違う文字表示 ももたん 07/1/31(水) 16:45 質問[未読]
【46347】Re:#DIV/0!を表示させず、この用になる場合... へっぽこ 07/1/31(水) 16:50 発言[未読]
【46348】Re:#DIV/0!を表示させず、この用になる場合... へっぽこ 07/1/31(水) 16:51 発言[未読]
【46349】Re:#DIV/0!を表示させず、この用になる場合... Kein 07/1/31(水) 16:57 回答[未読]
【46350】Re:#DIV/0!を表示させず、この用になる場合... ももたん 07/1/31(水) 17:00 質問[未読]
【46353】Re:#DIV/0!を表示させず、この用になる場合... ハチ 07/1/31(水) 17:23 発言[未読]
【46354】Re:#DIV/0!を表示させず、この用になる場合... ももたん 07/1/31(水) 17:28 質問[未読]
【46357】Re:#DIV/0!を表示させず、この用になる場合... ハチ 07/1/31(水) 18:03 回答[未読]
【46355】Re:#DIV/0!を表示させず、この用になる場合... Kein 07/1/31(水) 17:30 発言[未読]
【46381】Re:#DIV/0!を表示させず、この用になる場合... ぴかる 07/2/1(木) 12:45 発言[未読]

【46344】#DIV/0!を表示させず、この用になる場合...
質問  ももたん  - 07/1/31(水) 16:45 -

引用なし
パスワード
   タイトルの通りなのですが、エクセルの各セルの中に割り算の式がはいっており
  例 =A1/A2*100
計算を出す数式をいれているのですが、とくに数値を入れずゼロのままにしておく
セルもあるのでどうしてもいくつかのセルがエラーとして
  #DIV/0!
と表示されます。
これを改善すべく
  =IF(ISERROR(A1/A2*100),"×",A1/A2*100)
と入力し、エラーの際は × と表示するようにしたのですが、
あまりにシート場にこのような箇所がありますので、1つ1つ入力するのでは
なくシート全体に対してエラーがでた箇所は『×』と表示させたいのですが、
どのようなマクロプログラムを打てばよいのかわからずずっと悩んでいます。
わかる方がいましたら教えてください。
本当に困っています。

【46347】Re:#DIV/0!を表示させず、この用になる場...
発言  へっぽこ  - 07/1/31(水) 16:50 -

引用なし
パスワード
   1.対象となる範囲を選択。
2.F5を押す→セル選択→数式を選び、エラー値だけチェック→OK。
3.×を入力し、Ctrl+Enter。

というのはどうでしょうか?

【46348】Re:#DIV/0!を表示させず、この用になる場...
発言  へっぽこ  - 07/1/31(水) 16:51 -

引用なし
パスワード
   マクロが良ければ今の操作を記録するとヒントになるかと。

【46349】Re:#DIV/0!を表示させず、この用になる場...
回答  Kein  - 07/1/31(水) 16:57 -

引用なし
パスワード
   こんな感じでどうかな ? アクティブシートに対する処理になります。

Sub MyError_Cells()
  On Error Resume Next
  Cells.SpecialCells(3, 16).Value = "×"
End Sub

ただし、エラーになったセルの数式は消えてしまいますが。

【46350】Re:#DIV/0!を表示させず、この用になる場...
質問  ももたん  - 07/1/31(水) 17:00 -

引用なし
パスワード
   数式にたとえばA1の部分に後々数字を入れる可能性もありますので、
とにかく毎回エラーの場所が変わる部分に関して『×』を表示させたいのです。
 =IF(ISERROR(A1/A2*100),"×",A1/A2*100)
の結果と同じようになる形で。
数式は非常に使うので、消したくないのです。
だからたまたま表示してしまったエラー項目に関して×を入れるという感じです。
いちいちこれを全セルにうっていると非常に時間がかかるため
やはりシートにマクロ言語で何か直接うつかたちにしたいのですが・・・

【46353】Re:#DIV/0!を表示させず、この用になる場...
発言  ハチ  - 07/1/31(水) 17:23 -

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

>いちいちこれを全セルにうっていると非常に時間がかかるため

ここは・・AutoFillすれば良いのでは?

【46354】Re:#DIV/0!を表示させず、この用になる場...
質問  ももたん  - 07/1/31(水) 17:28 -

引用なし
パスワード
   全体をいっきにAUtofillしようにも、1つ1つのセルが割り算の数式が違うのです。
だからVBAか何かで方法はあるかと思うのですが、どなたかおわかりになる方はいないでしょうか??

【46355】Re:#DIV/0!を表示させず、この用になる場...
発言  Kein  - 07/1/31(水) 17:30 -

引用なし
パスワード
   >数式は非常に使うので、消したくないのです。
数式を残したまま、計算結果と全く関係のない値を表示することは出来ません。
それよりもむしろ、大量の数式を入力したまま使うことの方が負担が大きく、
好ましいとは言えないと思います。ではどうすれば良いのかというと
全ての数式をマクロで入れるようにし、計算後に全て値のみにして閲覧・保存
すれば良いのです。マクロを組むのはちょっとホネが折れるかも知れませんが、
一度作ってしまえばとても便利で安全な運用ができるようになります。
もちろんマクロで入れるときには =IF(ISERROR(A1/A2*100),"×",A1/A2*100)
という式にします。あと、計算方法は予め手動計算にしておきます。
マクロによる数式入力は、手動計算になっていてもちゃんと再計算されるように
作られています。

【46357】Re:#DIV/0!を表示させず、この用になる場...
回答  ハチ  - 07/1/31(水) 18:03 -

引用なし
パスワード
   ▼ももたん さん:
>全体をいっきにAUtofillしようにも、1つ1つのセルが割り算の数式が違うのです。
>だからVBAか何かで方法はあるかと思うのですが、どなたかおわかりになる方はいないでしょうか??

VBAとはいえ万能ではありません。
その数式に法則性があれば可能かもしれませんが、
いまの情報だけではわかりません。

考え方を変えて
今の数式を"=IF(ISERROR(・・"に書き直すマクロでどうでしょ?
現在の数式は正しいと想定して
数式のある範囲を選択した状態で
↓のマクロを実行してみてください。
念の為、今の状態をバックアップしておくことをお勧めします。

Sub Test()
  Dim R As Range
  Dim Siki As String

  For Each R In Selection
    If Left(R.Formula, 12) <> "=IF(ISERROR(" And _
    Left(R.Formula, 1) = "=" Then
      Siki = Mid(R.Formula, 2)
      R.Formula = "=IF(ISERROR(" & Siki & "),""×""," & Siki & ")"
    End If
  Next R
End Sub

【46381】Re:#DIV/0!を表示させず、この用になる場...
発言  ぴかる  - 07/2/1(木) 12:45 -

引用なし
パスワード
   ももたんさん、こんにちは。

あたくし作のツールバーソフト「ピカつーる」の機能です。よかったら、お試し下さい。
エラーの場合は、セル色と文字色を同じにしてなんも起きてない様に見せてます。

Sub 演算エラー非表示()
  
Dim 初期セル As Range
Dim セル As Range
Dim 設定数 As Integer
Dim I As Integer
Dim 数式 As String
Dim FrgA As Integer
Dim FrgB As Integer
Dim カウント As Long
  
  On Error GoTo errout
  
  メッセージ = "セルの値が↓の様な演算エラーとなった場合、文字色を変更し非表示とします。" & vbLf & _
        " ( #N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME? )" & vbLf & "" & vbLf & _
        "条件付き書式を用いて実行します。" & vbLf & _
        "(既に3ヶの書式が設定されているセルは実行されません。)" & vbLf & "" & vbLf & _
        "次の3つのうちのいずれかを選択して下さい。" & vbLf & "" & vbLf & _
        "《 はい 》    … シート内すべての数式セルを非表示モードにする。" & vbLf & _
        "《 いいえ 》   … 非表示モードを解除する。" & vbLf & _
        "《 キャンセル 》 … 何もせず、閉じる。"
  スタイル = vbYesNoCancel + vbQuestion + vbDefaultButton1 + vbApplicationModal
  タイトル = " 【 演算エラー非表示設定 】"
  YESNO = MsgBox(メッセージ, スタイル, タイトル)
  FrgA = 0
  FrgB = 0
  
  If (YESNO = vbYes) Or (YESNO = vbNo) Then
  
    Application.ScreenUpdating = False  '画面固定
    If ActiveSheet.ProtectContents Then FrgA = 1
    If YESNO = vbYes Then FrgB = 1
    If YESNO = vbNo Then FrgB = 2
    
    Set 初期セル = Selection
    ActiveSheet.Unprotect
    Cells.SpecialCells(xlCellTypeFormulas, 23).Select
    カウント = 0
    
    For Each セル In Selection
      設定数 = セル.FormatConditions.Count
      If 設定数 > 0 Then
        For I = 1 To 設定数
          数式 = セル.FormatConditions(I).Formula1
          If (Len(数式) >= 9) And (Left(数式, 9) = "=ISERROR(") Then
            セル.FormatConditions(I).Delete
            カウント = カウント + 1
          Exit For
          End If
        Next
      End If
   
      If FrgB = 1 Then
        設定数 = セル.FormatConditions.Count
        If 設定数 < 3 Then
          セル.FormatConditions.Add Type:=xlExpression, Formula1:= _
           "=ISERROR(" & セル.Address() & ")=TRUE"
          If セル.Interior.ColorIndex = xlNone Then
            セル.FormatConditions(設定数 + 1).Font.ColorIndex = 2
          Else
            セル.FormatConditions(設定数 + 1).Font.ColorIndex = _
            セル.Interior.ColorIndex
          End If
        End If
      End If
    Next

    初期セル.Select
    Set 初期セル = Nothing
    Application.ScreenUpdating = True  '画面固定解除
    If FrgA = 1 Then ActiveSheet.Protect
    If FrgB = 1 Then
      MsgBox "エラー非表示モードにしました。", vbInformation
    ElseIf FrgB = 2 Then
      If カウント = 0 Then MsgBox "エラー非表示に設定されてませんでした。", vbInformation
      If カウント > 0 Then MsgBox "通常の状態に戻しました。", vbInformation
    End If
  End If
  Exit Sub
 
errout:
  MsgBox Error(Err.Number), vbExclamation

End Sub

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