検索でのエラー回避について

このQ&Aのポイント
  • まとまったデータがあるところから検索したい月及び各項目のデータを検索し、項目シート事に抽出するという作業を行なっています。しかし、6月にはデータはあるが、5月にはデータはないため、次の検索ができなくなってしまいます。このエラーの回避方法について教えてください。
  • データの検索作業において、6月のデータはありますが、5月のデータがないため次の検索ができません。どうすればこのエラーを回避できるでしょうか?ご教示いただけますと幸いです。
  • データの検索作業において、6月にはデータがあるが、5月にはデータがないため、次の検索ができなくなってしまいます。この問題を解決する方法を教えてください。
回答を見る
  • ベストアンサー

検索でのエラー回避について

検索でのエラー回避について まとまったデータがあるところから検索したい月及び各項目のデータを検索し、項目シート事に抽出するという作業を行なっています。そこで問題がでました。6月にはデータはあるが、5月にはデータはない。 そうすると以下のコードの場合デバックが入り、次の検索が出来ません。 どうしたらよいのでしょうか? 分かる方がいらっしゃいましたらどうかお願い致します。 'シートの変更 Range("B30").Select Sheets("東京").Select '●Sheet2書込み行 Sheets("東京").Range("A5").CurrentRegion.Clear Sheets("東京").Range("A5:F5").Value = _ Array("依頼書No.", "受付日日", "担当者", "枚数", "工数", "備考") Row2 = 5 For R = 2 To Sheets("日報").Cells(Rows.Count, "A").End(xlUp).Row If Sheets("東京").Range("A2") = Sheets("日報").Cells(R, "A") And _ Sheets("東京").Range("B2") = Month(Sheets("日報").Cells(R, "C")) Then Row2 = Row2 + 1 Sheets("東京").Cells(Row2, "A") = Sheets("日報").Cells(R, "B") Sheets("東京").Cells(Row2, "B") = Sheets("日報").Cells(R, "D") Sheets("東京").Cells(Row2, "C") = Sheets("日報").Cells(R, "F") Sheets("東京").Cells(Row2, "D") = Sheets("日報").Cells(R, "I") Sheets("東京").Cells(Row2, "E") = Sheets("日報").Cells(R, "K") Sheets("東京").Cells(Row2, "F") = Sheets("日報").Cells(R, "L") End If Next R '●抽出結果を日付で並べ替え If Row2 = 5 Then MsgBox "該当データなし!" Else Sheets("東京").Range("A5:F" & Row2).Sort _ Key1:=Range("B6"), Order1:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin End If Sheets("東京").Select Range("B5:B200").Select Selection.NumberFormatLocal = "yyyy/m/d"     Rows("5:5").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .ShrinkToFit = False .MergeCells = False End With このあとに式を入れて、罫線を入れてコピーして、というコードが入っています。 どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

提示のコードでエラーが出るとしたら >If Sheets("東京").Range("A2") = Sheets("日報").Cells(R, "A") And _ >Sheets("東京").Range("B2") = Month(Sheets("日報").Cells(R, "C")) Then このMonth(Sheets("日報").Cells(R, "C"))の部分。 このセルの値が日付ではなくて文字列だった場合にはエラーがでます。 但し、質問の文言からはデータがあれば(6月は)上手くいくと受け取れますから この部分のエラーではないと判断できます。 恐らくエラー部分は質問で省略された部分(罫線やCopyのコード)にあるのでしょう。 もし、罫線コードがマクロ記録の範囲指定部分のみを修正したものであれば 質問の状況では当然ながらエラーが出ます。 で、エラー回避の1番簡単な方法は? 該当データがなかったらその時点で処理を終了させるということです。 これは以下の▲の部分に、1行追加するだけです。 '------------------------------------------------- ●抽出結果を日付で並べ替え   If Row2 = 5 Then     MsgBox "該当データなし!"     Exit Sub    '▲▲これを入れる   Else '------------------------------------------------------- うんにゃ、あくまでも罫線のコードを修正したい、ということであれば 現在の罫線のコードを全て削除して、以下のコードと入れ替えてください。 '------------------------------------------------------  With Sheets("東京").Range("A5:F" & Row2).Borders    .LineStyle = xlContinuous    .Weight = xlThin    .ColorIndex = xlAutomatic  End With '------------------------------------------------- SORT以降のコードには(たぶん省略されてる部分にも) おかしくはないが修正した方がいい部分がありますが、 ま、今回は、動作することが先決ということで。。。 以上です。  

loveless-05410
質問者

お礼

回答有難う御座います。 入れ替えてみます! 初心者なのでネットで拾ったりとしていたので多少へんです。 上記のコードを入れ替えてみたいと思います。 有難う御座います。

その他の回答 (3)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

こういう質問が出るということは、誰かが作ったプログラムですか?、質問者自身が理解したものになってないと想定されますが。 5月を検索してー、 抽出なければ続けて6月で検索、とする とか、 検索して必ず見つかる月だけに事前絞り込みしておいてコンボボックスにて選んだら実際に抽出する、 とか コードにできなくても何かイメージしていることがあると思います。設計案はないですか。

loveless-05410
質問者

お礼

回答有難うございます。 ネットで拾ったり教えていただいたりしました。 一番最後にEnd Ifをもっていったら上手くいきました。 有難う御座います。

回答No.2

この質問は、次の質問と同じですか? '   http://okwave.jp/qa/q6000620.html この状況をもう少し具体的に説明してください。 '  検索対象の[日報]シート上に、6月にはデータはあるが、5月のデータはない。 '  この場合に、[東京]シートのB2に (どうすると) ’  どのようなエラーメッセージ表示されて ’  そうすると以下のコードの度どの部分で止まっているのか。 ’  [次の検索が出来ません。]というのは、一旦エラーを起こすと、 ’   その後で、マクロを止めて、再度マクロを起動させた場合にも、 '     [東京]シートのB2に (どうすると)検索できないのか なお、コードの終わりの方にある次の部分は、必要ではないか、or シートを作った最初にやれば、その後ではやらなくて良いような気がします。 Sheets("東京").Select   Range("B5:B200").Select   Selection.NumberFormatLocal = "yyyy/m/d"   Rows("5:5").Select   With Selection    .HorizontalAlignment = xlCenter    .VerticalAlignment = xlBottom    .WrapText = False    .Orientation = 0    .AddIndent = False    .ShrinkToFit = False    .MergeCells = False   End With

loveless-05410
質問者

お礼

回答有難う御座います。 >そうすると以下のコードの度どの部分で止まっているのか。 該当しません。のところでとまってしまうんです。 EndIfを最後にもっていったら上手く出来ました。 有難う御座います。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

シートのレイアウトが判らない上に、どのコードでどんなエラーになるのかも判らないのでは、何が原因でどう直せば良いのかを突き止めるのはかなり難しいですね。 試しにちょっとやってみましたが、質問者様が言うようなエラーを出せませんでした。

loveless-05410
質問者

お礼

回答有難う御座います。 データ上に検索月の東京のデータがないときにデバックしてしまいました。 EndIfを最後にもっていったら上手くいきました。 有難う御座います。

関連するQ&A

  • VBAについて質問です。

    VBAについて質問です。 まとまったデータがあるところから検索したい月及び各項目のデータを検索し、項目シート事に抽出するという作業を行なっています。そこで問題がでました。6月にはデータはあるが、5月にはデータはない。 そうすると以下のコードの場合デバックが入り、他の検索が出来ません。 どうしたらよいのでしょうか? 分かる方がいらっしゃいましたらどうかお願い致します。 'シートの変更 Range("B30").Select Sheets("東京").Select '●Sheet2書込み行 Sheets("東京").Range("A5").CurrentRegion.Clear Sheets("東京").Range("A5:F5").Value = _ Array("依頼書No.", "受付日日", "担当者", "枚数", "工数", "備考") Row2 = 5 For R = 2 To Sheets("日報").Cells(Rows.Count, "A").End(xlUp).Row If Sheets("東京").Range("A2") = Sheets("日報").Cells(R, "A") And _ Sheets("東京").Range("B2") = Month(Sheets("日報").Cells(R, "C")) Then Row2 = Row2 + 1 Sheets("東京").Cells(Row2, "A") = Sheets("日報").Cells(R, "B") Sheets("東京").Cells(Row2, "B") = Sheets("日報").Cells(R, "D") Sheets("東京").Cells(Row2, "C") = Sheets("日報").Cells(R, "F") Sheets("東京").Cells(Row2, "D") = Sheets("日報").Cells(R, "I") Sheets("東京").Cells(Row2, "E") = Sheets("日報").Cells(R, "K") Sheets("東京").Cells(Row2, "F") = Sheets("日報").Cells(R, "L") End If Next R '●抽出結果を日付で並べ替え If Row2 = 5 Then MsgBox "該当データなし!" Else Sheets("東京").Range("A5:F" & Row2).Sort _ Key1:=Range("B6"), Order1:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin End If Sheets("東京").Select Range("B5:B200").Select Selection.NumberFormatLocal = "yyyy/m/d"     Rows("5:5").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .ShrinkToFit = False .MergeCells = False End With このあとに式を入れて、罫線を入れてコピーして、というコードが入っています。 どうぞ宜しくお願い致します。

  • エクセル、マクロにて月を指定して別シートに表示はできるのでしょうか?

    エクセル、マクロにて月を指定して別シートに表示はできるのでしょうか? 毎度毎度申し訳ありません。開始日の検索で、5月と打っただけ5月分だけ表示6月とうったら6月が出て来る方法なんてあるのでしょうか?ありましたら、下記のコードをどう直せいいか教えて頂けますでしょうか?宜しくお願い致します。 【作業内容:場所と月を検索、さらに要らない列を消し、別シートに表示】【検索月はC】  A B   C     D     E     F   G   H    I   J    K 部署 No.  開始日  終了日   担当者  設備  刃名 枚数  内容 工数 備考 茨城 1 2010/5/7  2010/5/10  B緒  L型   K  16枚  研削 6.00 東和電気 東京 2 2010/6/7  2010/6/8   B緒  L型   K  16枚  研削 6.83 東和電気 茨城 3 2010/5/18  2010/5/19  B緒  L型   K  16枚  研削 1.50 東和電気 茨城 4 2010/5/16  2010/5/19  B緒  L型   K  16枚  研削 6.83 東和電気 茨城 5 2010/6/10  2010/6/10  B緒  L型   K  16枚  研削 6.83 東和電気 ↓ A  B   C     D    E     F   部署 No.  開始日  担当者  内容   工数 茨城 1 2010/5/7  B緒   研削   6.00 茨城 3 2010/5/16  B緒  掃除   6.83 茨城 4 2010/5/18  B緒  出荷   1.50 【コード】 Sub 検索() Dim R As Long Dim Row2 As Long '●Sheet2書込み行 Sheets("集計表").Range("A5").CurrentRegion.Clear Sheets("集計表").Range("A5:F5").Value = Array("依頼部署", "依頼書No.", "研磨開始日", "担当者", "作業内容", "作業内容", "工数") Row2 = 5 For R = 2 To Sheets("日報").Cells(Rows.Count, "A").End(xlUp).Row If Sheets("日報").Cells(R, "A") = Sheets("集計表").Range("A2") And _ Sheets("日報").Cells(R, "C") >= Sheets("集計表").Range("B2") And _ Sheets("日報").Cells(R, "C") <= Sheets("集計表").Range("C2") Then Row2 = Row2 + 1 Sheets("集計表").Cells(Row2, "A").Value = Sheets("日報").Cells(R, "A").Value Sheets("集計表").Cells(Row2, "B").Value = Sheets("日報").Cells(R, "B").Value Sheets("集計表").Cells(Row2, "C").Value = Sheets("日報").Cells(R, "C").Value Sheets("集計表").Cells(Row2, "D").Value = Sheets("日報").Cells(R, "E").Value Sheets("集計表").Cells(Row2, "E").Value = Sheets("日報").Cells(R, "I").Value Sheets("集計表").Cells(Row2, "F").Value = Sheets("日報").Cells(R, "J").Value End If Next R '●結果の並べ替え If Row2 = 5 Then MsgBox "該当データなし!" Else Sheets("集計表").Range("A5:D" & Row2).Sort _ Key1:=Range("B6"), Order1:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin Sheets("集計表").Select End Sub

  • VBAのファインドメソッドで検索すると対象外のデータが選択されることがある

    CDのリスト表(12列で、現在2269行 範囲名"収録表")Sheets("データ")から,キーワードで該当ディスクを検索し、 結果をSheets("検索")に転記する、プログラムを作りましたが、 仮に、該当データが10件、転記されたとして そのデータを見ると、中に1件、対象外のデータがはいっている事が たまにあります、いろんな原因を考えてみましたがわかりません。 もともと、VBAのファインドメソッドが、こんなエラーを起こしやすいのか、、、(そんな事、ないよね) どなたか、教えてください。 下が、プログラムです Sub 新規検索() Application.ScreenUpdating = False Dim myData, myRng As Range Dim myWord As String myWord = InputBox("キーワードを入力してください") データ処理中F.Show vbModeless データ処理中F.Repaint Set myData = Range("収録表") Set myRng = myData.Find(What:=myWord, LookIn:=xlValues, _ Lookat:=xlPart, MatchCase:=False, MatchByte:=False) If myWord = "" Then MsgBox ("キーワードを入力してください") Exit Sub End If If Not myRng Is Nothing Then Application.Goto Cells(myRng.Row, 1), True Else: Unload データ処理中F MsgBox ("該当データはありません") Exit Sub End If Sheets("検索").Range("K1") = myRng.Row '一番最初の検索値のRow Call コピー1 Do Until Range("K1") = Range("L1")   Call 次を検索 Loop Call 検索終了 Unload データ処理中F Application.ScreenUpdating = True End Sub Sub 次を検索() Dim myData, myRng As Range Sheets("データ").Select Set myData = Range("収録表") Set myRng = Cells.FindNext(after:=ActiveCell.Offset(1)) If myRng <> "" Then Application.Goto Cells(myRng.Row, 1), True End If Sheets("検索").Range("L1") = myRng.Row '2番目以降の検索値のRow   Call コピー2 End Sub Sub コピー1() Sheets("検索").Range("A3:L5000,L1").ClearContents Dim myData As Range Set myData = Range("収録表") Set motorng = Application.Intersect(myData, ActiveCell.EntireRow) Set sakiRng = Sheets("検索").Range("A65535").End(xlUp).Offset(1) motorng.Copy sakiRng Sheets("検索").Visible = True Sheets("検索").Activate End Sub Sub コピー2() Dim myData As Range Set myData = Range("収録表") Set motorng = Application.Intersect(myData,   ActiveCell.EntireRow) Set sakiRng = Sheets("検索").Range("A65535").End(xlUp).Offset(1) motorng.Copy sakiRng Sheets("検索").Visible = True Sheets("検索").Activate End Sub Sub 検索終了() Dim r As Long r = Range("A65536").End(xlUp).Row Range("A" & r).Select ActiveCell.FormulaR1C1 = "=COUNTA(R3C:R[-1]C)" MsgBox "全部で" & Range("A" & r).Value & "件ありました" Range("A65535").End(xlUp).EntireRow.ClearContents Call 行頭表示 End Sub

  • Next,End Withのエラー

    Sub 入力() If Sheets("入力").Range("D3").Value = "" Then MsgBox "客先名を入力して下さい" Else Dim K最終行 As Long Dim T最終行 As Long Dim i As Integer With Sheets("入力") For i = 3 To 12 If .Cells(i, "H").Value <> "" Then U最終行 = Sheets("注文書").Range("G65536").End(xlUp).Row + 1 If U最終行 = 461 Then MsgBox "注文書がいっぱいです" Exit Sub Else End If E最終行 = Sheets("営業確認").Range("G65536").End(xlUp).Row + 1 Sheets("営業確認").Range("k" & E最終行).Value = .Cells(i, "b").Value Sheets("営業確認").Range("b" & E最終行).Value = .Cells(i, "c").Value Sheets("営業確認").Range("c" & E最終行).Value = .Cells(i, "d").Value Sheets("営業確認").Range("d" & E最終行).Value = .Cells(i, "e").Value Sheets("営業確認").Range("g" & E最終行).Value = .Cells(i, "h").Value Sheets("営業確認").Range("f" & E最終行).Value = .Cells(i, "i").Value Sheets("営業確認").Range("i" & E最終行).Value = .Cells(i, "m").Value Sheets("営業確認").Range("h" & E最終行).Value = .Cells(i, "p").Value Else End If Select Case .Cells(i, "o").Value Case "北" K最終行 = Sheets("北").Range("h65536").End(xlUp).Row + 1 Sheets("北").Range("B" & K最終行).Value = .Cells(3, "C").Value Sheets("北").Range("c" & K最終行).Value = .Cells(3, "b").Value Case "中" T最終行 = Sheets("中").Range("H65536").End(xlUp).Row + 1 Sheets("中").Range("b" & T最終行).Value = .Cells(3, "c").Value Sheets("中").Range("c" & T最終行).Value = .Cells(3, "b").Value End Select Exit Sub Dim Dummy As Worksheet Dim SheetName As String Dim OTA As Long Dim GEN As Long Dim SheetName2 As String With Sheets("入力") '3行目~22行目まで For j = 3 To 22 SheetName = Sheets("入力").Range("D3").Value On Error Resume Next Set Dummy = Sheets(SheetName) SheetName2 = .Cells(i, 14).Value 'もしシートがあれば・・・ If Err.Number = 0 Then 'SheetName2は入力シートのN行 SheetName2 = .Cells(i, 14).Value OTA = Sheets(SheetName2).Range("B65536").End(xlUp).Row + 1 Sheets(SheetName2).Range("A7").Value = .Cells(3, "D").Value Sheets(SheetName2).Range("C3").Value = .Cells(3, "C").Value Sheets(SheetName2).Range("B" & OTA).Value = .Cells(i, "H").Value Sheets(SheetName2).Range("I" & OTA).Value = .Cells(i, "I").Value Sheets(SheetName2).Range("F" & OTA).Value = .Cells(i, "K").Value Sheets(SheetName2).Range("H" & OTA).Value = .Cells(i, "L").Value Sheets(SheetName2).Range("J" & OTA).Value = .Cells(i, "M").Value 'シートが無ければ・・・ Else GEN = Sheets("原紙").Range("B65536").End(xlUp).Row + 1 Sheets("原紙").Range("A7").Value = .Cells(3, "D").Value Sheets("原紙").Range("C3").Value = .Cells(3, "C").Value Sheets("原紙").Range("B" & GEN).Value = .Cells(i, "H").Value Sheets("原紙").Range("I" & GEN).Value = .Cells(i, "I").Value Sheets("原紙").Range("F" & GEN).Value = .Cells(i, "K").Value Sheets("原紙").Range("H" & GEN).Value = .Cells(i, "L").Value Sheets("原紙").Range("J" & GEN).Value = .Cells(i, "M").Value '原紙をコピーする Sheets("原紙").Copy BEFORE:=Sheets(1) 'シートの名前を市場コードにする Sheets(1).Name = SheetName Next End With Exit Sub On Error GoTo 0 Sheets("原紙").Select Range("C3:E3,A7,B16:B35,F16:F35,H16:J35").Select Range("H35").Activate Selection.ClearContents Sheets("入力").Select Sheets("入力").Range("D3,G3:J12,L3:M12").Value = "" Sheets("入力").Range("D3").Select Range("B3").Formula = "=IF(D3="""","""",VLOOKUP(D3,'\\Seika-sv01\支店共有\マーケティング用\[担当者リスト.xls]リスト形式'!$B:$D,3,FALSE))" MsgBox "入力が完了しました" End If End Sub 上記のようにマクロを組みましたがエラーが出てしまいます。

  • VBAのFINDのエラーを回避したいです。

    以下のようなものを作成しましたが、1シートでは、問題なく回るものの2シート目のmをFINDしているところでエラーが発生します。原因は、該当するmが存在しないためだと思うのですが、そのような場合にエラーを回避し、次のシートへ飛びエラーが発生したシート番号を最後に表示してほしいです。 そのようなことは可能でしょうか? 読みにくいプログラムかもしれませんが、よろしくお願いします。 Dim top, m, under, bottom, cnt, she Application.ScreenUpdating = False '画面固定 cnt = Sheets.Count 'シートの数 For she = 1 To cnt Sheets(she).Activate Columns("F:F").Select Selection.Find(What:="0", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate top = ActiveCell.Row - 1 Rows("1:" & Format(top)).Select Selection.Delete Shift:=xlUp Range("A1").Select m = Range("E1") + 10 If m >= 60 Then m = m - 60 Else m = m End If Columns("E:E").Select Selection.Find(What:=Format(m), After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate under = ActiveCell.Row bottom = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row - 1 Rows(Format(under) & ":" & Format(bottom)).Select Selection.Delete Shift:=xlUp Range("A1").Select Next she End Sub

  • エクセルVBAについて

    こんにちわ! 今、エクセルでAシートの入力した項目をBのシートへデーターが入力できるようなシステムを以下のようにくみました。 そこでBシートにデーターが入力されるのですが20行まで入力すると入力できないようにしたいのですが、なかなか上手くいきません。 A1からF20まで書式のロックを外しそれ以外のセルは保護をかけたのですがその状態でVBAを使って20行以上入力できませんという感じのエラー表示をしたいのですが、どうすればいいでしょうか? VBAは初心者ですが宜しくお願いします。 Private Sub CommandButton1_Click() Dim row As Integer row = WorksheetFunction.CountA(Sheets("date").Columns(1)) + 1 Sheets("date").Cells(row, 1).Value = Range("B2").Value row = WorksheetFunction.CountA(Sheets("date").Columns(2)) + 1 Sheets("date").Cells(row, 2).Value = Range("B3").Value row = WorksheetFunction.CountA(Sheets("date").Columns(3)) + 1 Sheets("date").Cells(row, 3).Value = Range("B4").Value row = WorksheetFunction.CountA(Sheets("date").Columns(4)) + 1 Sheets("date").Cells(row, 4).Value = Range("B5").Value row = WorksheetFunction.CountA(Sheets("date").Columns(5)) + 1 Sheets("date").Cells(row, 5).Value = Range("B6").Value row = WorksheetFunction.CountA(Sheets("date").Columns(6)) + 1 Sheets("date").Cells(row, 6).Value = Range("B7").Value Sheets("統制入力").Select Range("B17").Select ActiveWindow.SmallScroll Down:=-9 Range("B3:B7").Select Selection.ClearContents Range("B1").Select End Sub

  • Excel VBA グラフ作成のときのエラー

    VBA初心者です。Excel2003を使っています。 Sheet1に作りたいグラフがあります。 データは下記のとおりです。 ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A")のところで、「実行時エラー13 型が一致しません」とエラーがでます。 不思議なのは、昨日は動いていたのです。 なぜ、エラーが出るようになったのかわかりません。 ご教授よろしくお願いします。 A B 1 a 1 2 2 3 3 4 4 5 5 6 b 6 7 7 8 8 9 9 10 10 11 c 11 12 12 13 13 14 14 15 15 Sub test() Wrow = Worksheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To Wrow If Worksheets("sheet1").Cells(i, "A").Value = "a" Then a_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "b" Then b_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "c" Then c_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "d" Then d_data = Worksheets("sheet1").Cells(i, "A").Row End If Next Sheets("sheet1").Select Range(Cells(a_data, "B"), Cells(b_data, "B")).Select ActiveSheet.ChartObjects.Add(30, 10, 500, 200).Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(a_data, "B"), Cells(b_data - 1, "B")), PlotBy:=xlColumns ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1" Sheets("sheet1").Select ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") ←エラーがでます。 ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(b_data, "A") ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, "B"), Cells(d_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(c_data, "A") End Sub

  • Match関数がうまく機能していない??

    すみません。また教えて下さい。 過去ログを見てシート1にあったデータをシート4にあるデータと照らし合わせてすでにあれば書き換え、なければ追加というようにできるようにしたく過去ログを参考にしてやったのですが、どうしてもエラーが出てしまいます。 Private Sub aa() Dim intlastrow1 As Integer Dim strb As String Dim longlastrow1 As Long intlastrow1 = Sheets(1).Range("A7").End(xlDown).Row longlastrow1 = Sheets(4).Range("A1").End(xlDown).Row Dim c As Object Dim rtn As Variant Dim d As Integer With Sheets(4) .Select For Each c In .Range("A1", "A" & longlastrow1) rtn = Application.Match(c.Value, Sheets(1).Range("A7:A" & intlastrow1), 0) d = c.Row strb = Cells(d, "A").Value If IsError(rtn) Then With Sheets(4).Cells(longlastrow1 + 1, "A") .Value = strb With .Font .Name = "MS Pゴシック" .Bold = False .Size = 8 End With End With Sheets(4).Cells(longlastrow1 + 1, "B").Value = Sheets(1).Range("A2").Value Sheets(4).Cells(longlastrow1 + 1, "F").Value = ShowFormula(Sheet1.Range(Cells(d, "J"), Cells(d, "N"))) longlastrow1 = longlastrow1 + 1 End If If Not IsError(rtn) Then Exit Sub End If Next c End With End Sub 以上のように組んだのですがうまくいきません。 具体的に言うとシート1のA7よりしたに名前が並んでいる(山田、鈴木・・・)とお考え下さい(シート4のA2以下にも同様に名前が並んでいる)。字数の関係で判定後の処理が不十分になっています。

  • 計算方法について

    次のようなデータがあります。     A  B 1  200 2 -350 3  500 4 -260 5  ・ 6  ・ 実際には600ほどあります。 次のように0>大きいものと0<ものの数をだすためにIF分を使ったのですが時間がかかってしょうがないのですがもっと早くやる方法はありますか教えてくださいよろしくお願いします。 実際に使っているものです。 抜粋したので少し構文が違うかもしれませんが要するに勝率を出したいのです。 Dim a, b, Sr As Double Cau = 7 For x = 1 To 5 shi = "あきない0" shi = shi & x r = Sheets(shi).Range("A65536").End(xlUp).Row For i = 90 To r Sheets("MAIN").Cells(Cau, 9) = "計算中" Sr = Sheets(shi).Cells(i, 10).Value If Sr >= 0 Then 'Sheets("MAIN").Range("G6") = Sr 'Sheets("MAIN").Range("G7") = a a = a + 1 Else b = b + 1 'Sheets("MAIN").Range("H6") = Sr 'Sheets("MAIN").Range("H7") = b End If Sheets("MAIN").Cells(Cau, 9) = "" Next i If shi = "あきない01" Then Sheets("MAIN").Range("Y9") = a Sheets("MAIN").Range("Y10") = b Sheets("MAIN").Range("I11") = a / (a + b) End If 省略-------------------------------------繰り返し a = 0 b = 0 Cau = Cau + 5 Next x

  • エクセル2000マクロエラー

    下記のマクロを実行すると、Sheets(M_KAKOBA(count)).Selectのロジックでインデック スが有効範囲にありません。というエラーメッセージがでます。 エクセルのツール→オプション→全般→新しいシートの数を2から3に変更すると エラーは発生しないのですが、エクセルのツール→オプション→全般→新しいシートの数を2 のままでエラーを出さないようにするには、ロジックを変更すればできるのでしょうか? ロジックの追加方法を教えてください。 Sub 送信() '変数の設定 Dim work, hensu, i, j Windows("加工品.xls").Activate work = Sheets("masta").Cells(3, 6).Text 'シート名の変更 Windows(F_NAME).Activate Sheets(M_KAKOBA(count)).Select ActiveSheet.Name = work Windows("加工品.xls").Activate Sheets(work).Select i = 5 Do i = i + 1 hensu = Cells(i, 5) Loop While hensu <> "" Range(Cells(1, 1), Cells(i + 1, 33)).Select Selection.Copy Windows(F_NAME).Activate Sheets(work).Select Range("a1").Select Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A2").Select End With Selection.BorderAround Weight:=xlThin, ColorIndex:=xlAutomatic ' '行の高さ If Worksheets(work).AutoFilterMode = False Then Range(Cells(5, 1), Cells(i + 1, 31)).Select Selection.AutoFilter End If End Sub

専門家に質問してみよう