• ベストアンサー

Excel VBA For Each~Next構文についての質問

こんにちは。 VBA初心者のものですが教えてください。 ※Excel2003です 「Sheet2のC29:U29のセルについて 1より小さければ小数第2位まで表示 1以上であれば小数第1位まで表示」 の構文を作りたいのですが、 「実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」 のエラーが出てしまい、実行できません。 作成した構文は以下の通りですが、どのように訂正すればよいか、 ご教示いただけますでしょうか。 よろしくお願いいたします。 Sub ケタ() ' Dim rngCell As Range For Each rngCell In Worksheets("Sheet2").Range("C29:U29") If rngCell.Value < 1 Then rngCell.Selection.NumberFormatLocal = "0.00" Else rngCell.Selection.NumberFormatLocal = "0.0" End If Next rngCell End Sub

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

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

Selectionが余分です。

raymay0905
質問者

お礼

できました~! selectionは選択したセル範囲を指すんですね。 ありがとうございました。

その他の回答 (1)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

If rngCell.Value < 1 Then Sheet2.Select rngCell.Select Selection.NumberFormatLocal = "0.00" Else Sheet2.Select rngCell.Select Selection.NumberFormatLocal = "0.0" End If にしてください

raymay0905
質問者

お礼

できました! rngCell.Select を入れておくと selectionについて操作ができるんですね。 ありがとうございました。

関連するQ&A

  • Excel VBA For Each Next構文内の別シートを対象とする方法

    こんにちは。 VBA初心者のものですが教えてください。 「sheet1のC29:U29とsheet2のC31:G31について 1より小さければ小数第2位まで表示する」 の構文を作成したいのですが、 下記の構文ではエラーが出てしまいました。 どのように訂正すればよいでしょうか? ※できればrangeプロパティを使いたいのですが、  cellsプロパティを使わなきゃできませんか? すみませんがご教示をお願いいたします。 Sub test() Dim myrange As Range For Each myrange In Worksheets("sheet1").Range("C29:U29"),Worksheets("sheet2").Range("C31:G31") If myrange.Value < 1 Then myrange.NumberFormatLocal = "0.00" End If Next myrange End Sub

  • For Each ~ Nextステートメント

    今、1つのブックに200前後のワークシートがあるとします。 For Each ~ Nextステートメントを使って以下のようなプログラムを全てのワークシートに適用したいと考えています。 Sub test() Dim mySht As Worksheet For Each mySht In Worksheets If Range("A2").Value <> "1990/01/31" Then Rows("2:2").Select Selection.Insert Shift:=xlDown Range("A2").Select ActiveCell.FormulaR1C1 = "1990/01/31" End If If Range("A3").Value <> "1990/02/28" Then Rows("3:3").Select Selection.Insert Shift:=xlDown Range("A3").Select ActiveCell.FormulaR1C1 = "1990/02/28" End If ・・・(中略)・・・ Next End Sub しかし、これを実行しても、うまくいきません。 全てのワークシートについて、必ずしもA2のセルが 1990/01/31であるとは限らないことが原因かとは思うんですが、自身ではどうしてもうまくプログラムを書くことが できません。良いお知恵を拝借できればと思います。

  • Excel VBA 構文をすっきりさせたい

    いつもお世話になっています。 次のような構文を使って、データを別シートに転送するVBAを作成しました。 転送するデータが多い場合、構文が延々続くことになります。 もっとすっきりと記述する方法がありましたらぜひ教えてください。 お力添え、よろしくお願いします。 Sub データ() With ActiveSheet Dim last last = ActiveSheet.Range("b" & Rows.Count).End(xlUp).Row + 1 .Range("b" & last).Value = Worksheets(2).Range("b2").Value .Range("c" & last).Value = Worksheets(2).Range("c2").Value .Range("d" & last).Value = Worksheets(2).Range("d2").Value     以下同様に続く・・・・ End With End Sub

  • エクセルVBAでの質問です。

    エクセル2003での質問です。 book1のシート1からbook2のシート18セルC30へ 表のコピーを行い、C30が空白セルだったらそのまま貼り付け、 非空白だったら表最下部から2行あけて表のコピー操作を行う。 としたいのですが以下の箇所でエラーがでてしまいます。 book1.Activate sheet1.Range("C8:E24").Copy book2.Activate If sheet18.Range("C30") = "" Then sheet18.Range("C30:E46").Select Selection.PasteSpecial.xlPasteValues ←実行時エラー424発生 Else sheet18.Range("C30").End(xlDown).Offset(2).Select Selection.PasteSpecial.xlPasteValues ←実行時エラー424発生 End If 以上、解決策をご教示願います。

  • エクセルVBAについて

    エクセルVBA初心者で、勉強している者です。 今、ガントチャートのようなものを作っているのですが、 下記のような記述をしたのですがうまく動きません。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 時間グラフ作成() If Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = "10:00" Then Worksheets("(2)(2)(2)(2)").Range("T2").Select With Selection.Interior .ColorIndex = 8 .Pattern = xlSolid End With End If End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ F2のセルを空にし、「""」で実行すると動きました。 色々調べてみたものの、煮詰まってしまいました・・・。 よろしくお願いいたします。

  • Excel VBAの「FOR~NEXT関数」について

    VBAを初めて2ヶ月の超初心者です。 シートが2枚あり、sheet1は仕入金額一覧、sheet2は送付案内書になっています。VBAを利用して「sheet1から1行、sheet2へ転記し印刷後、次の行へ」と言う処理をしています。 Sub 送付案内() Dim 行番号 As Integer For 行番号 = 5 To 298 If Cells(行番号, 15).Value = 1 Then Range(Cells(行番号, 2), Cells(行番号,12).Select Selection.Copy Sheets("送付案内").Select Range(Cells(60, 1), Cells(60, 11)).Select ActiveSheet.Paste Application.CutCopyMode = False Worksheets("送付案内").PrintOut Sheets("作業").Select End If Next End Sub Sub 仕入先名() Dim 行番号 As Integer For 行番号 = 5 To 298 Sheets("作業").Cells(行番号, 2) = WorksheetFunction.VLookup(Cells(行番号, 1), Sheets("仕入先マスタ"). _ Range("$A$3:$B$1135"), 2, False) Next End Sub これでVBAを実行した場合、仕入金額一覧の並び順と微妙(2~3点)に異なる順番で印刷されました。仕入先名や仕入金額に間違いはありませんでした。 同様の経験のある方等、原因がわかる方がいらしたら、教えてください。よろしくお願いします。

  • for~Next 構文の間に処理を追加したい。

    for~Next 構文の間に処理を追加したい。 ちょっと必要に迫られまして、他人の作ったEXCELマクロをいじらないといけなくなったのですが、小生初心者でどうもうまくいきません。 sheet1に条件を入れて、sheet2のセルに表示された内容をラベルに印刷するというプログラムなのですが、 PrintColum = Worksheets("sheet1").Range("L5").Value MaxGyou = Worksheets("sheet1").Range("L4").Value Maxrow = Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Row Gyou = 1 + Worksheets("sheet1").Range("A3").Value Keta = 1 Worksheets("sheet2").Activate For k = 5 To Maxrow Hiduke = Worksheets("sheet1").Range("A" & k).Value ID = Worksheets("sheet1").Range("B" & k).Value Koumoku = Worksheets("sheet1").Range("C" & k).Value Kishaku_Min = Worksheets("sheet1").Range("D" & k).Value Kishaku_Max = Worksheets("sheet1").Range("E" & k).Value Maisu = Worksheets("sheet1").Range("F" & k).Value blank = Worksheets("sheet1").Range("G" & k).Value For i = Kishaku_Max To Kishaku_Min Step -1 For j = 1 To Maisu Keta = Keta + 1 Worksheets("sheet2").Range("A1").Cells(Gyou, Keta + 1).Value = " " & Hiduke & " " & ID & Chr(10) & " " & Koumoku + " 10^" + CStr(i) GyouHyouji = Worksheets("sheet2").Range("A1").Cells(Gyou, 1).Row Worksheets("sheet2").Range("A1").Cells(Gyou, 1).Value = (GyouHyouji - 1) Mod MaxGyou + 1 If Keta > PrintColum Then Keta = 1 Gyou = Gyou + 1 End If Next j Next i Next k Next i の処理が終了したとき、blankの値が"1"なら、ひとつだけ内容の違うセルを差し込みたいと考えています。 わかる範囲でいろいろ試したのですが、まったくうまくいきません。 どなたかお知恵を拝借できないでしょうか?

  • VBAの構文を作りましたが、うまくいきません。困った・・

    以下でVBAでつくりたいのです。 もし、○○株式会社なら 納品書シートのK3のセルを選ぶ その○○株式会社のなかでも○○センターの分なら 「NOなし」のメッセージと「○○セ)運賃出せ」のメッセージがでる もし、NOが入っていなかったら、納品書をしたまま印刷 NOが入っていたら、印刷なしで、売上日報表のシートへ戻る そこで私が手打ちでNOを消す作業をしたいと思います。 NOを手打ちで消したあと、手動で納品書シートに切り替えて納品書にある印刷ボタンをクリックして印刷(マクロボタンを納品書シートに作っています) ○○株式会社で○○センターの分でないなら、 NOが入っていたら、納品書の画面を表示したまま、印刷 NOが入っていなかったら、NO・確認のメッセージが出て、売上日報表シートへ戻る そこで、私が売上日報表に手打ちでNOを入れる作業をしたいと思います。 NOが入ったら、納品書シートを私が手動でクリックするので、納品書シートにある印刷のマクロボタンをまた押すと印刷 ○○株式会社でないなら、NOあるなしにかかわらず印刷   以上です。 ○○センターの分はNOが入っていたら印刷、NOが入っていなかったら、メッセージが出て、売上日報表に戻り、印刷されないようになってしまいます。その逆になってほしいのですが、難しいです。 どうすれば、うまくいくのでしょうか? 手打ちの部分は構文は要りません。 下記は構文です。 Public Sub msgbox○○会社() If Range("A5").Value = "○○会社" Then Worksheets("納品書").Range("k3").Select If Worksheets("納品書").Range("B17,B6") = "○○センター" Then MsgBox "NOなし" MsgBox "○○セ)運賃出せ" If Worksheets("納品書").Range("k3").Value < 0 Then '納品書画面を表示  Worksheets("納品書").Select Else Worksheets("納品書").Select   End If Else Worksheets("納品書").Select End If If Range("k3").Value > 0 Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _ :=True Else Worksheets("納品書").Select msgBox "NO" & vbCrLf & "確認" Worksheets("売上日報表").Select    End If    Else  ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1,     Copies:=1, Collate _ :=True   End If   End Sub 間違いはどこですか?

  • Excel VBAでの質問

    以前、質問に回答頂きそれを実行してうまくいったのですが、 特定のsheetだけsheetのつくりが違うため、 このsheetは毎回なにも処理をしないという処理を加えたいのですが、 (例えばsheet5とsheet8は処理をしない) 下記のコードにどのように付け加えればよいでしょうか? わかるかた宜しくお願い致します。 Dim i As Long For i = 1 To Worksheets.Count  If Worksheets(i).Range("A1").Value = 10 Then Worksheets(i).Range("K1") = Worksheets(i).Range("A1")  Worksheets(i).Range("A1:D80").ClearContents Next End Sub

  • Excel VBA offset()関数で質問

    Excel VBA offset()関数で質問です。 現在集計のマクロを作成しております。 ■処理内容 各sheetの特定の範囲を"copy" して集計sheetに順に貼り付け… といった処理をさせようと作成中です。 以下がソースになります。 Sub 集計() Dim ws As Worksheet i = 1 For Each ws In ActiveWorkbook.Sheets If ws.Name = "集計" Then Else Range("E1").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy ★Worksheets("集計").Range("A1").Offset(, i).Select ActiveSheet.Paste i = i + 1 On Error Resume Next ActiveSheet.Next.Select End If Next End Sub ★マークのところで現在エラーになっています。 実行時エラー '1004': RangeクラスのSelectメソッドが失敗しました。 と表示されます。 offset関数の使用方法の確認ですが… (とあるWebから抜粋したのですが… (^^; ) 例> Range("C3").Offset(,1).Selectとすれば、 行はそのままで、列が1列右に移動し、D3を選択します。 アドバイスよろしくお願い致します。

専門家に質問してみよう