Excel2007マクロ/オートフィルの問題解決方法は?

このQ&Aのポイント
  • VBA初心者がEXCEL2007でオートフィルのマクロを作成していますが、一行のみの場合にうまく動作しない問題が発生しています。一行の場合でもオートフィルを実行する方法はあるのでしょうか?
  • A列の最終行からデータが入っている行までB列のデータをオートフィルで入力したい場合、一行のみの場合にはオートフィルができない問題があります。他に一行の場合にもオートフィルを実行する方法はないのでしょうか?
  • EXCEL2007で使用するオートフィルのマクロにおいて、A列の最終行からデータが入っている行までB列のデータを入力する際、一行のみの場合にはオートフィルができません。一行の場合にもオートフィルを実行する方法はありますか?
回答を見る
  • ベストアンサー

EXCEL2007マクロ/オートフィルについて

VBA初心者です。 EXCEL2007でオートフィルのマクロを作ったのですが、下記のケースで困っています。 A列のデータが入っている行までB列のデータをオートフィルで入力したく、 A列の最終行からデータが入っている行までを求めてB列のデータをオートフィルで入れるため、下記のマクロを設定しました。 Sub test()   Range("B1").AutoFill Destination:=Range("B1", Range("A1048576").End(xlUp).Offset(, 1)) End Sub ところが、A列のデータが2行以上ある場合はうまくいくのですが、一行のみだった場合オートフィルができなくてマクロがとまってしまいます。 一行なので当然なのですが、このような処理をしたい場合、他に方法はないものでしょうか? お知恵を拝借できますと大変助かります。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 2行以上ある場合だけ処理するように条件分岐してみましょう.。 Sub Re7755068a()   With Range("B1", Range("A1048576").End(xlUp).Offset(, 1))     If .Count > 1 Then Range("B1").AutoFill Destination:=.Cells   End With End Sub > ところが、A列のデータが2行以上ある場合はうまくいくのですが、一行のみだった場合オートフィルができなくてマクロがとまってしまいます。 エラーを回避する為にはどうすればよいか、という方向に考えを進めるのが第一です。

Littlebear_ak
質問者

お礼

cj_moverさま 大変明快に教えてくださりありがとうございました! 必要としていた処理がスムーズに進むようになりました! 早々のご回答とても嬉しかったです。 行き詰まった時に助けてくださるcj_moverさまのような方がいらして、 本当にありがたかったです。心から感謝いたしますm(__)m。

関連するQ&A

  • 実行時エラー1004 オートフィルができない

    エクセルなのですが、A列の文字にたいする数式をB列に入れて最終行までオートフィルするマクロを作りたいのですが実行時エラー1004が発生してしまいます。 Sub macro1() Dim LastRow As Long LastRow = Range("A65536").End(xlUp).Row Range("B1").Value = "=LEN(A1)" Range(Range("B1"), Selection).AutoFill Destination:=Range("B1:B" & LastRow) End Sub このコードです。 Range(Range("B1"), Selection). ここら辺が怪しいかなと思ってるのですが、どうすればいいでしょうか? オートフィルを使わずにfor~nextでやる方法も知ってますが、オートフィルでやる方法をご教授いただきたいです。 よろしくお願いします。

  • ExcelVBAでのオートフィルの使い方

    Excel2003です。 Bセルに入っている値をHセルまで右方向にオートフィルするマクロを組んでいるのですが、うまく動きません。 Bセルの最終行は変動し、オートフィルはBセルの最終行と最終行の1つ手前の2つ分をオートフィルしたいのです。 Range("B1").End(xlDown).Offset(-1, 0).Select Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault Range("B1").End(xlDown).Offset(0, 0).Select Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault これで、オートフィルしようと思っていたのですが、 Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault この式の実行で、 実行時エラー'1004' RangeクラスのAutoFillメソッドが失敗しました と、出てしまいます。   Selection.AutoFill Destination:=Range("B23:H23"), Type:=xlFillDefault こういうマクロなら動くので、AutoFillの後に明確な範囲指定をしていないせいなのでしょうか? 最終行が変動してしまう為、このような明確な範囲指定をする事ができません。 いい解決方法はないでしょうか?

  • VBAでオートフィルができません

    エクセル2007です。 画像のようにA列に値を入れて、B列に半角にする関数を入れて、最終行までオートフィルをしたいのですが、 --------------------------------------------------------- Sub test() Dim 最終行 As Long 最終行 = Cells(65536, 1).End(xlUp).Row ActiveCell.FormulaR1C1 = "=ASC(RC[-1])" Selection.AutoFill Destination:=Range("b1:b" & 最終行), Type:=xlFillDefault End Sub --------------------------------------------------------- をすると、 Selection.AutoFill Destination:=Range("b1:b" & 最終行), Type:=xlFillDefault の部分で、 [実行時エラー'1004'アプリケーション定義またはオブジェクト定義エラー] になってしまいます。 原因と対策を教えてください。ご回答よろしくお願いします。

  • オートフィルのマクロを作りたい

    ある列に複数のデータがある場合、その一番上の右隣のセルに数式などを入力後、そのセルの右下の小さい四角をダブルクリックすると、左の列のデータある一番下までオートフィルされますよね。 これのマクロを組みたいのですが、単純に出来ません。 普通通りマクロの記録をすると、実際に入力されていたセル番号までのマクロとなってしまい、データを追加した場合意味が無くなります。 具体的に説明すると、 A1からA10までそれぞれデータがある場合、 B1に数式を入力後、オートフィルでB10までコピー。 これをマクロで組もうとすると、B10までのフィルが組まれてしまい、A11~A20までデータを追加後マクロを実行してもB10までのフィルしか実行されません。 「左の列のデータがあるところまで」というマクロは組めないのでしょうか。

  • マクロで、行追加後もオートフィル&並べ替えができるようにしたい

    マクロでわからないことがあるので教えていただけないでしょうか? (1)計算式を入力 (2)オートフィルでコピー (3)並べ替え このようなマクロを作りたいのですが、行を追加してもちゃんとオートフィルと並べ替えができるようにしたいのです。 過去の「教えてgoo」に載っていたものをコピーしてVBに貼り付けたら、オートフィルはできるようになったのですが、並べ替えがうまく実行されません。 どうも範囲がおかしいように思うのですが、もともとVB言語の意味がわかっていないので、どう変更すればいいのかさっぱりわかりません・・・ 以下は、現在のマクロの記述です。セルI7を基準にして、H列も一緒に並べ替えたいと思っています。H列とI列は行が増えたり減ったりします。 勉強不足ですいませんが、教えてください。よろしくお願いいたします。 ------------------------------------------------------- Sub 計算→並べ替え() ' ' 計算→並べ替え Macro ' マクロ記録日 : 2006/12/1 ユーザー名 : ○○ ' ActiveCell.FormulaR1C1 = "=MOD(RC[-1],5)" Range("I7").AutoFill Destination:=Range("I7", Range("H65536").End(xlUp).Offset(, 1)) Range("I7").Select Range("H6:I13").Sort Key1:=Range("I7"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal End Sub -------------------------------------------------------

  • オートフィルの自動化について

    EXCELでB4からB列に値がある分、A列にオートフィルを実行 させたいのですが、 Selection.AutoFill Destinationで明確に記載すれば できるのですが、何か他に方法はありませんでしょうか。 A4 B4 1 データ    データ    データ 上記でA5以降マクロでオートフィルを実行させる処理を やりたいのですが.. 知ってる方いましたら教えてください

  • マクロとオートフィル

    オートフィルを使った「マクロの記録」の部分でつまずいてしまいました。 A列に名前、B列に数字が入っていて、2列にオートフィルタをかけている場合 B列の0の数字のみを非表示にしたかったので オートフィルのタブを使って「0」のチェックマークを外すという動作を「マクロの記録」で記録しました。 そこまではいいのですが、データの追加があったのでオートフィルタの範囲内に数字と名前をそれぞれの列に追加したあと上記のマクロを使ってみると、どうしても追加したデータと0が非表示になってしまいます。 これを避けるにはVBAで指示しないと行けないのでしょうか?

  • 縦方向にオートフィルをしたい

    Excel2003 2行ずつ結合したセルシートを使用しています。 F5とF6は結合、F7とF8も結合、G5とG6は結合、G7とG8は結合・・・とF~Qまで全て2行ずつ結合してあります。 F列~Q列の値が入ってるセルまでオートフィルをする為に、下記マクロを実行していますが、うまく動きません。 Range("F5:Q6").Select Range("F5:F6").AutoFill Destination:=Range(Range("F5:Q6"), Selection.End(xlDown)), Type:=xlFillSeries 実行時エラー1004 アプリケーション定義またはオブジェクトのエラーです ちなみに横方向のオートフィルはうまくいっています。これは行数が固定の為楽だった、というのがありますが Range("F5:F6").AutoFill Destination:=Range("F5:Q6"), Type:=xlFillSeries 2行ずつ結合したセルシートで最終行までオートフィルする場合はどうすればいいのでしょうか?

  • マクロでのオートフィルについて

    ここの掲示板でオートフィルのことが記載されておりましたが、 それについて、質問です。 オートフィルは、範囲が明確でないと実行することができないと思っております。 データを何行か挿入して、挿入する上の行からフィル処理を行いたい 場合って可能なのでしょうか。 例 A列 B列 C列(識別するための関数処理をがはいっている) 1 アメリカ 1 2 イタリア 3 3 フランス 4 4 メキシコ 2 5行目以降に何行か似たようなデータを挿入し、C列はオートフィルで 自動で処理を行いたい。 上記で問題になるのが、データを挿入した場合、C列には関数が 入ってない状態になると思います。 フィルの最終地点が不明確な場合、どのようにやればいいかが わかりません。

  • 結合しているセルへのオートフィル

    セルの頭に式を入れていて、それを最終行までオートフィルしたいのですが、うまくいきません。 セルは全て2行ずつ結合しています。 その状態で With Cells(Rows.Count, 5).End(xlUp) .Offset(1, 1) = "最終判定" .Offset(1, 2) = "最終判定" .Offset(1, 3) = "最終判定" .Offset(1, 4) = "最終判定" .Offset(1, 5) = "最終判定" .Offset(1, 6) = "最終判定" .Offset(1, 7) = "最終判定" .Offset(1, 8) = "最終判定" .Offset(1, 9) = "最終判定" .Offset(1, 10) = "最終判定" .Offset(1, 11) = "最終判定" .Offset(1, 12) = "最終判定" Range("F5:F6").AutoFill Destination:=Range(Range("F5:Q6"), Selection.End(xlDown)), Type:=xlFillSeries というマクロを使用していますが(色々弄くり回していたので原型と少々変わってるかもしれません)、セルが結合している為出来ませんなどのエラーが出ます。 そこで回避手段として下記のマクロを組んでみました。 Public Sub testcode() 'ダミーデータ '5000行まで結合する為にダミーの判定用データを作成する(5000行までまずいかない) With Cells(5000, 5) .Offset(1, 1) = "最終行判定用" .Offset(1, 2) = "最終行判定用" .Offset(1, 3) = "最終行判定用" .Offset(1, 4) = "最終行判定用" .Offset(1, 5) = "最終行判定用" .Offset(1, 6) = "最終行判定用" .Offset(1, 7) = "最終行判定用" .Offset(1, 8) = "最終行判定用" .Offset(1, 9) = "最終行判定用" .Offset(1, 10) = "最終行判定用" .Offset(1, 11) = "最終行判定用" .Offset(1, 12) = "最終行判定用" End With '月の下のセルを結合する For m = 6 To 17 Set c = Cells(5, m) Cells(5, m).Activate Do Until c.Value <> "" Or c.Offset(1).Value <> "" c.Resize(2).Merge Set c = c.Offset(1) Loop Next m Range("F5") = "=IF~省略" Range("F5:F6").AutoFill Destination:=Range("F5:Q6"), Type:=xlFillSeries 'ダミーの5000行までオートフィルする Range("F5:Q6").AutoFill Destination:=Range("F5:Q5000"), Type:=xlFillSeries With Range("F5:Q5000") '選択範囲内で中央配置 .HorizontalAlignment = xlHAlignCenterAcrossSelection .Copy End With Range("F5").PasteSpecial Paste:=xlPasteValues 'コピーの解除 Application.CutCopyMode = False 'ダミーデータの選択 Range(Cells(Rows.Count, 5).End(xlUp).Offset(1, 1), Cells(Rows.Count, 5).End(xlUp).Offset(1, 12)).Select '削除 Range(Cells(Rows.Count, 5).End(xlUp).Offset(1, 1), Cells(5001, 17)).Delete End Sub 1.まず、F~Q列の5001行に文字を入れる 2.5000行まで2行ずつセルを結合する、F~Q列全て行う 3.F5にオートフィルしたい式を入れる 4.F5~Q6(ここも2行ずつ結合してあります)までオートフィルをする 5.F5~Q6に入っている式を下方向へオートフィルする 6.本来なら不要のダミーデータを選択し、削除する A~E列までは別にデータが入っていて、F~Q列はA~E列の最終行に合わせてオートフィルさせる、という目的で上記マクロを作成し使用しております。 一応これで動くのですが問題点があります。 1.5000行まで無駄なデータを入れているため結合処理が遅い(普段は300~1500程度だが中途半端に設定すると最終行が取得できない可能性があるため) 2.同じく無駄なデータの削除処理が遅い 以上2点が問題点となっております。 上記処理をなくしたいのですが、2行ずつの結合したセルに対して、位置が不明確な場合、オートフィルを飛ばすのは難しいでしょうか? よいマクロが有れば教えてください。

専門家に質問してみよう