エクセルマニア

EXCEL iferrorの質問と相談

TOP > 相談と回答 > 「EXCEL iferror」について
VLOOKUP ピボットテーブル グラフ EXCEL 書式設定 条件付き書式 マクロ
VBA For Do Or If With

「EXCEL iferror」での検索結果 : 7件見つかりました。(ページ1/1)

EXCEL iferrorの検索結果

VBAの計算結果の表示方法について教えて頂けないでしょうか。 以下のVBAコードには、Dim i As Long以下に計...

2016/12/14 21:21 Yahoo知恵袋   閉じる

相談 VBAの計算結果の表示方法について教えて頂けないでしょうか。
以下のVBAコードには、Dim i As Long以下に計算処理を行うコードを記述しているのですが、 例えば、計算元となるセルのP列やN列のデータが、両方または片方でも「--」となって計算できない状態にある場合、 処理結果が表示されるK列に「--」と表示させるコードを教えて頂けないでしょうか。
現在のコードではK列が空白となってしまいます。
よろしくお願い致します。
Sub DataIn() Dim bkName As String Dim bkSrc As Workbook, stSrc As Worksheet, stTyu As Worksheet, uRng As Range bkName = Application.GetOpenFilename("Excel ブック,*.xls?") If bkName = "False" Then Exit Sub Set bkSrc = Workbooks.Open(bkName) Set stSrc = bkSrc.Worksheets("Sheet1") Set stTyu = ThisWorkbook.Worksheets("抽出") Set uRng = stSrc.UsedRange uRng.Copy ThisWorkbook.Worksheets("Sheet1").Range("A4").PasteSpecial xlPasteAll uRng.Columns("A").Copy Destination:=stTyu.Range("B4") uRng.Columns("D:E").Copy Destination:=stTyu.Range("E4") Excel.Application.CutCopyMode = False Dim i As Long i = 5 Do Until stTyu.Range("P" & i).Value = "" And stTyu.Range("N" & i).Value = "" With stTyu.Range("K" & i) .Value = "=IFERROR(P" & i & "/N" & i & ","""")" .NumberFormat = "#,##0.00倍;-#,##0.00倍;0.00倍;@" End With i = i + 1 Loop

.Value = "=IFERROR(P" & i & "/N" & i & ","""")" ↓ .Formula = Replace("=IFERROR(P#/N#,""--"")", "#", i) ということですか?

質問連投失礼します。。。 Excel VBAについてご教示お願いします。 =IFERROR(INDEX(Index!G:...

2016/11/09 14:56 Yahoo知恵袋   閉じる

相談 質問連投失礼します。


Excel VBAについてご教示お願いします。
=IFERROR(INDEX(Index!G:G,SUMPRODUCT((Index!D:D=E5)*(Index!E:E=J5)*ROW(Index!G:G))),"") 現在、上記の関数で銀行コードを検索し、支店名を見つけ支店コードを返す関数です。
まず 問題点・・・ 約1000行ほどあり、この関数のせいですごく重たく処理が遅くなる SheetはIndexに B列 C列 D列 E列 F列 G列 銀行名 フリガナ 銀コード 支店名 フリガナ 支コード Sheetの口座に E列 F列 G列 H列 I列 K列 銀コード フリガナ 銀行名 支コード フリガナ 支店名 とあります。
※コードと名前が逆なのは、最終的にCSVファイルに変換するときに この口座シートの並びでないとインターネットバンキングの 外部ファイルうんたらが反応しないからです。


そこで 目的・・・ これの関数より処理を速くしたいです。
この関数だと遅かったら2~3分ほど稼働状態になり CPUファンの音がえらいことにorz とりあえず現在は口座のページだけ数式の計算設定を手動にして 口座登録時等に再計算させるようにしています。
どうかご教示お願い致します。

sumproduct関数だと問答無用で範囲全体を計算することになるので、matchで探して一つ見つかったらやめちゃう方が速そうです。 =index(Index!G1:G2000, match(E5&J5, index(Index!D1:D2000&Index!E1:E2000, 0),0)) 銀行コードや支店コードがちゃんと文字列で入力されてる前提ですけど。

マクロの高速化を教えてください。 VBAの知識がほとんどない者です。 Excel2010の「マクロの記録」使用してマクロ...

2015/09/28 10:46 Yahoo知恵袋   閉じる

相談 マクロの高速化を教えてください。
VBAの知識がほとんどない者です。
Excel2010の「マクロの記録」使用してマクロを作成しましたが、 実行したところ処理に多大な時間がかかってしまいます。
データ量が少ない場合(加工したいデータのレコードが少ない場合)は 少しの時間待てば完了しますが、レコード数が8000を超えるといつまでたっても 処理が完了しません。
恐らく、効率の悪い記述がされているのかと思います。
知識のある方、助けていただけないでしょうか。
関数「IFERROR(VLOOKUP(RC[-1],'2'!C[-1],1,FALSE」をコピーをするのが 重いのかと思います。
---------- Sub check_csv() ' ' check_csv Macro ' ' ActiveWorkbook.Worksheets("3").AutoFilter.sort.SortFields.Clear ActiveWorkbook.Worksheets("3").AutoFilter.sort.SortFields.Add Key:=Range("B1" _ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("3").AutoFilter.sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Columns("C:C").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("C2").Select ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],'2'!C[-1],1,FALSE),"""")" Range("C2").Select Selection.AutoFill Destination:=Range("C2:C10030") Range("C2:C10030").Select Range("C1").Select ActiveCell.FormulaR1C1 = "関数" ---------- 上記の処理の後に以下の処理も組み合わせています。
---------- Sub DeleteRow_kuuhaku() ' ' DeleteRow_kuuhaku Macro ' ' Dim i As Long, z As Long Application.ScreenUpdating = False With Sheets("3") z = .UsedRange.Rows.Count For i = z To 1 Step -1 If .Range("C" & i) = "" Then .Range("C" & i).EntireRow.Delete End If Next End With Application.ScreenUpdating = True End Sub ---------- 上記二つのマクロを含め、複数のマクロを 1つにまとめて実行しています。
「マクロの記録」で作成しているため、 不要な手順が含まれているかもしれませんが、 よろしくお願い致します。

Range("C2").Select ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],'2'!C[-1],1,FALSE),"""")" Range("C2").Select Selection.AutoFill Destination:=Range("C2:C10030") これらは下記1文に集約できます。 Range("C2:C10030").FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],'2'!C[-1],1,FALSE),"""")" 行削除は、Rangeオブジェクトをまとめて一回の処理にすれば、多少早くなると思います。 膨大なデータがあるときは、行削除そのものが重い(手動で削除しても重いのでわかると思います)ので、 必要な行だけを集め、別シートにコピーするという方法も検討されてみてください。 dim delUni as range set delUni = nothing With Sheets("3") z = .UsedRange.Rows.Count For i = z To 1 Step -1 If .Range("C" & i) = "" Then if delUni is nothing then set delUni = .Range("C" & i) Set delUni = Union(delUni, .Range("C" & i)) End If Next if not delUni is nothing then delUni.EntireRow.Delete end if End With

VBAで、 計算結果が桁数が大きすぎてオーバーフローした場合、その旨をmsgboxで表示させることはできますか? Exc...

2014/03/24 17:02 Yahoo知恵袋   閉じる

相談 VBAで、 計算結果が桁数が大きすぎてオーバーフローした場合、その旨をmsgboxで表示させることはできますか? Excelのワークシート関数でいうところの、IFERROR関数みたいな感じで・・・

以下のURLを参考にOn Errorでハンドルしてあげれば出せると思います。 http://officetanaka.net/excel/vba/tips/tips104.htm

【Excel】シート名やシート数が変わっても対応可能なセル参照がしたいです。 Excelの関数を使って異なる複数のシート...

2013/05/22 17:53 Yahoo知恵袋   閉じる

相談 【Excel】シート名やシート数が変わっても対応可能なセル参照がしたいです。
Excelの関数を使って異なる複数のシートのセルを参照しています。
例) =IFERROR(SUM('神奈川1304:福岡1304'!$M18), ) 各シートの値の合計値はシート[総計]に表示されるようにしているのですが、集計の度にシート名やシートの数が変わる為、上記の式では毎回「#REF」と表示されてしまい、都度式を入れ直さなければならずとても厄介です。
そこで集計の度にシート名やシート数が変わっても対応できるような方法があれば・・と思っているのですが、VBA等でこれを実現する事はできないでしょうか? ちなみにExcelのバージョンは2010です。
どなたかご存知の方、教えてください。
よろしくお願い致します。

シート[開始]、シート[終了]でデータシートを挟み、=IFERROR(SUM(開始:終了!$M18), )の様にしては如何でしょうか。 どうしてもVBAと云う事なら、各シートの計数対象は数式なのか、手入力なのか?やセル構成を詳しく記載した方がよいと思います。

VBAの質問です。 書式を設定済ファイルを開き、そのファイルに、関数を書き込んで値だけ残すVBAを作成しようとしていま...

2013/02/03 01:20 Yahoo知恵袋   閉じる

相談 VBAの質問です。
書式を設定済ファイルを開き、そのファイルに、関数を書き込んで値だけ残すVBAを作成しようとしています 以下を実行後、テンプレートに設定した書式が変わってしまいます。
保持方法をご教授ください。
以下を実行すると、 組み込みの書式で設定してあったもの【#,##0_);(#,##0)】が、 ユーザー定義の【#,##0;-#,##0】に変換されてしまいます。
(記述に関係ない別のシートの書式もすべての変わってしまいます) Dim NameFileOpen As String Dim NameFileOpenOnlyFilename As String Dim range1 As Range NameFileOpen = Application.GetOpenFilename(FileFilter:="Microsoft EXCELブック,*.xlsx") If NameFileOpen <> "False" Then Workbooks.Open Filename:=NameFileOpen End If NameFileOpenOnlyFilename = Dir(NameFileOpen) Workbooks(NameFileOpenOnlyFilename).Activate Application.ScreenUpdating = False 'H5より前5か月の月をオートフィルで書き込む Sheets("シート名").Select Range("H5").AutoFill Destination:=Range("C5:H5") '前5か月データを検索する関数を書き込む→値だけ残す Set range1 = Range("C6:G21") range1.FormulaR1C1 = "=IFERROR(HLOOKUP(R5C,対象シート!,R[-3]C1+1,0),"""")" range1.Value = range1.Value Application.ScreenUpdating = True End Sub テンプレートの書式をすべてユーザー定義に修正してみたら、 コマンド終了後も書式を保持することができました。
組み込みの書式でテンプレートを作成してしまったので、 できればそのまま使用したいと思い、 書式を保持できる記述方法があればと思い質問させていただきました。
どなたかお分かりになる方、ぜひぜひご教授ください、よろしくお願いいたします!!!

元シートについての状態が全くわかりませんが、コードを見たところ、書式に関する内容は Range("H5").AutoFill Destination:=Range("C5:H5") の部分だけに思えます。 H5の表示形式の設定はどうなっているのでしょう?そこが違うからオートフィルした部分も変わっている、ということはないですか?それでもおかしいという場合はNumberformatかNumberformatLocalプロパティに【#,##0_);(#,##0)】を設定されてはいかがでしょう? また、蛇足ですが、 NameFileOpenOnlyFilename = Dir(NameFileOpen) Workbooks(NameFileOpenOnlyFilename).Activate は、ファイルをOpenした際にOpenされたものがアクティブブックになるので記述が不要に感じます。

IFERRORがない LibreOffice3.3を導入しました。 しかし今まで使ってきたExcelにあったIFERRO...

2011/10/04 11:39 Yahoo知恵袋   閉じる

相談 IFERRORがない LibreOffice3.3を導入しました。
しかし今まで使ってきたExcelにあったIFERRORがありませんでした。
LibreOfficeは3.4がリリースされているようですが、こちらにはIFERRORはあるのでしょうか。
また、そうでなければ他の関数でどの様に代用させれば良いのでしょうか?

IFERROR 関数は Excel2007 から搭載された関数ですね。 たとえば、 =IFERROR(式またはセル, エラーの場合の処理) こういう場合の代替策として、 =IF(ISERROR(式またはセル), エラーの場合の処理, 式またはセル) こんな風にすれば、同じような結果になると思います。 OpenOffice だけでなく、Excel2003以前のExcelでも同様です。