Excel97のマクロでAutoFillを使おうとしているのですが、エラーが出て実行できません。

何も表示されていないシートでコマンドボタンを押すと、AutoFillを使ってA1セル~E1セルとA2セル~E2セルに数字の1~5が表示されるようにしたいと考えています。

下記のようにマクロを書いたところ、A1~E5はうまくできたのですが、
「Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries」
の行でエラーが発生します。
「実行時エラー:1004 RangeクラスのAutoFillメソッドが失敗しました。」と表示されます。


Private Sub CommandButton1_Click()

  ActiveSheet.Range("A1").Select
  ActiveCell.FormulaR1C1 = "1"
  Selection.AutoFill Destination:=ActiveCell.Range("A1:E1"), Type:=xlFillSeries

  ActiveSheet.Range("A2").Select
  ActiveCell.FormulaR1C1 = "1"
  Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries

End Sub


どなたかエラーの原因を教えていただけないでしょうか?
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんばんは。



>どなたかエラーの原因を教えていただけないでしょうか?

難しいことなのですね。教本には、載っていないですね。

まず、基本的なことなのですが、コントロールツールのCommandButton は、シート属性を持ったものなのですね。ですから、記録マクロを、そのままペタンと貼り付けてもうまくいかないことが多いです。

エラーは2番目のSelection で出ているはずです。

Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries

ActiveCell.Range("A2:E2")
というのは、ActiveCellが、Range("A2")ですと、相対参照になっていますから、A4:E4 ということになってしまいます。元の値がありませんので、エラーが出ます。

それを、第一弾目に直したものです。

 Range("A1").Select
 Selection.Value = "1"
 Selection.AutoFill Destination:=Range("A1:E1"), Type:=xlFillSeries

 Range("A2").Select
 Selection.Value = "1"
 Selection.AutoFill Destination:=Range("A2:E2"), Type:=xlFillSeries

それを直しますと、以下のようになります。
通常、文字列で入れても、ワークシートでは、文字列が数値に変換されています。ワークシートの状況が見えていませんので、一応、数値にしておきます。
'------------------------------------------------------
 Range("A1").Value = 1
 Range("A1").AutoFill Destination:=Range("A1:E1"), Type:=xlFillSeries

 Range("A2").Value = 1
 Range("A2").AutoFill Destination:=Range("A2:E2"), Type:=xlFillSeries
'------------------------------------------------------

もう少し、マクロに慣れてくるとこのようになります。
ただし、書式が文字列になっている場合は、この方法が出来ません。

With Range("A1:E2")
   .FormulaLocal = "=Column(RC)"
   .Value = .Value
End With
    • good
    • 1
この回答へのお礼

大変よく分かりました。
ありがとうございました。

お礼日時:2006/01/25 09:38

ActiveSheet.Range("A1").Select


ActiveCell.FormulaR1C1 = "1"
Selection.AutoFill Destination:=Range("A1:E1"), Type:=xlFillSeries

ActiveSheet.Range("A2").Select
ActiveCell.FormulaR1C1 = "1"
Selection.AutoFill Destination:=Range("A2:E2"), Type:=xlFillSeries
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2006/01/25 09:39

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qメソッドの英単語の意味について

文字列処理メソッドの中にあるcharAtメソッドのcharAtってどういう意味ですか?
(例)
ss = "ABCDEFG"
ch = ss.charAt(2)・・・ssの2番目の文字を取得。

文字処理メソッドの中にあるisDightメソッドのisDightってどういう意味ですか?
(例)
if (Character . isDight(ch))・・・chが数字なら真
if (Character . isUppercase(ch))・・・chが大文字なら真

substringメソッドのsubってどういう意味ですか?
HexstringメソッドのHexってどういう意味ですか?
isUppercaseメソッドのcaseどういう意味ですか?

Aベストアンサー

charAt=Character(文字) At(~の)

isDigit= Is(~か否か) Digit(数字)

isUppercase = Is(~か否か) Uppercase(大文字)

Sub は「部分的な」って意味合いでしょうか。
Hexは Hexa-decimal (十六進)

英単語については
http://dictionary.goo.ne.jp/search.php

コンピュータ用語については
http://yougo.ascii24.com/
あたりが役に立つかと思います。

個々の単語の意味については、それほど気にしなくてもいいかと思いますよ。慣用句みたいなもんで、使ってるうちに慣れてきますんで(^^;

QRange("AQ" & TR).Formula =の右辺に書く式を教えてください

よろしくお願いします
いつもgooの皆さんには大変お世話になっております
お陰様で全く知識ゼロだったマクロが少しですが書けるようになりました
エクセルも大分わかってきました
win8.1でエクセルは2013です

式の中身です(日本語表示)
もしも、AN42の値が1で、なおかつ、M42とO42とAO42とAP42の値がすべて同じなら1
そうでなければ0

教えていただきたい事
上記の内容の式を
Range("AQ" & TR).Formula =
の右側に書くにはどう書いたらよいでしょうか?
TRは行番号で42です

以上です
うまく説明できなくて迷惑をかけるかもしれませんが
よろしくお願いします

Aベストアンサー

当方、初心者のくせにメッセージ失礼いたします。

セルAQ42にコチラの関数を入れました。
=IF(AND(AN42=1,M42=O42,O42=AP42),1,0)

こちらをVBAに直すとこうなりました。
"=IF(AND(RC[-3]=1,RC[-30]=RC[-28],RC[-28]=RC[-1]),1,0)"

マクロに詳しい方ならもっと綺麗なVBAを記載してくださるかと思います。。。

Q「メソッド」の意味

VBAで出てくる「メソッド」を日本語に置き換えると
「動詞」と言う意味でしょうか?

Aベストアンサー

こんにちは

>日本語に置き換えると
>「動詞」

うーん、「動詞(Verb)」。それは、違う言語の話ですね。
きっと、どこかで調べたのでしょうね。時々、そういう方はいらっしゃるようですが、そういう概念の世界から入ると、半永久的に覚えられないと思います。

オブジェクト指向の話を持ち出すと、話がややこしくなってしまいますから、オブジェクト指向については当面忘れていたほうがよいですね。VBAでは、完全なオブジェクト指向にはならないはずです。

VBAプログラミングにおいて、「メソッド」とは、何かを命令して、その結果を得るとこですから、一般に私たちが作る、Sub プロシージャと機能としては変わらないです。それをクラス(お仕着--型)から作るから、呼び名をメソッドに変わるのです。

プロパティは、オブジェクトの特徴を表すものだから、それを使う側からみると、たくさんある設定値です。これは、作る側からすると、なるほどと分かるのです。

もっと具体的な話を持ってきたほうがよいと思います。
例えば、Endプロパティというのは、なぜ、プロパティなのだろうか、動きを伴っているのに?
SpecialCells メソッドは、なぜ、メソッドなのだろうか?

そうやって考えると、言葉の定義というものはあてにならないものだとお分かりになると思います。結論的な言い方にすると、作る側がそう決めたからに他ならないのではないか、と考えます。


まあ、私の回答に異論はあってもいいけれども、私は、自分自身の体験で、メソッドを解釈して、何年も過ごしています。もちろん、手元には、VB/VBA用語辞典で確認しています。

メソッドとは、オブジェクトの手順では、さっぱり理解できません。クラスでメソッドを作る時にやっていることは、Subプロシージャで作るのと何ら変わりはないから、上記のように考えました。厳密には、メソッドはオブジェクトの中で存在するものですから、ステージが違うのは言うまでもありません。しかし、そう考えると、メソッドというもの印象がはっきりするのです。

こんにちは

>日本語に置き換えると
>「動詞」

うーん、「動詞(Verb)」。それは、違う言語の話ですね。
きっと、どこかで調べたのでしょうね。時々、そういう方はいらっしゃるようですが、そういう概念の世界から入ると、半永久的に覚えられないと思います。

オブジェクト指向の話を持ち出すと、話がややこしくなってしまいますから、オブジェクト指向については当面忘れていたほうがよいですね。VBAでは、完全なオブジェクト指向にはならないはずです。

VBAプログラミングにおいて、「メソッド」とは、何かを...続きを読む

QExcelでの表編集でC1に =IF(A1="",B1,A1)

Excelでの表編集でC1に =IF(A1="",B1,A1)
と以前文字データのある列A1、B1、2つからそれぞれ穴あき
を補いc1に表示する式=IF(A1="",B1,A1)を教えていただいたのですが
2列まではこの式で行けるのですが3列以上に対応させる記述が
分かりません。
3列以上の表示を一列にまとめる式を教えてください。
お願いします。

Aベストアンサー

条件が良く判りませんが?

セルB1が空白のとき、セルC1をセルD1に表示
という条件を追加すると
=IF(A1="",IF(B1="",C1,B1),A1)

こんな感じですが、イメージと違う場合は補足してください。

Qメソッドの引数としてのthisの意味

java初心者です。教えてください。
メソッドの引数としてのthisは何を表しているのですか?

いろいろ調べてみてthisには以下の2つの使用法があることがわかりました。
1.インスタンス変数の名前とインスタンスメソッド内のローカル変数名がかぶったときに、メソッド内でインスタンス変数を表すときにthis.変数名とする。

2.あるクラスのコンストラクタ内で、同じクラスの別のコンストラクタを呼ぶときに使う。

しかし、引数としてのthisの意味がわかりません。
具体的には、addMouseListener(this);や、g.drawImage(img,10,10,this);のthisです。
後者の場合はオブジェクトgのインスタンスメソッドなので、thisはオブジェクトgへの参照を表しているのでしょうか?

Aベストアンサー

# うまく言葉で表現できる自信はありませんが。。
thisはそのクラスの、現在処理を実行しているオブジェクト(インスタンス)です。

例えば、Aというクラスでg.drawImage( img, 10, 10, this );を実行したとき、
thisはAのインスタンスです。
gではなく自分自身への参照を、gへ渡しているのです。
drawImageの第4引数の型は、
呼び出しているクラス(もしくはその継承元)の型ではないですか?

こんな説明でわかりますか?(^-^;

Q=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $

いつもお世話になってます。
以下の関数式について、お時間がありましたらどうぞご教示ください。

=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $12,2,FALSE))

「シート2の範囲指定した表にA1セルの値と同じ値の右隣になる値を返せ。ただし該当なき場合は空白とせよ。」

純粋になんでこのような構文になるのかが解りません。

1.ISNAってそもそもなんでしょう?
2.同じ式を繰り返すのはなぜ?
(模範式で、このように同じ式を繰り返す構文があまり無いように思えたのです。)

・参考となる他所のページがあれば教えて下さい。
・素人です。お手柔らかにお願いします。

(エクセル2003)

Aベストアンサー

1.ISNAってそもそもなんでしょう?
ISで始まる情報関数の一つで、#N/A!エラーのみを判定する関数
結果はTRUE(真),FALSE(偽)のいずれかになります。
エラー判定のIS関数には他に
ISERR:#N/A!を除くすべてのエラーを判定する関数
ISERROR:すべてのエラーを判定する関数
があります。

2.同じ式を繰り返すのはなぜ?
ISNAの判定する値がセルでなく数式の結果だからです。
A2=VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)
なら
A3=IF(ISNA(A2),"",A2)
ということになります。A2のように計算の為のセルを省略する為に
=IF(ISNA(数式),"",数式)のように同じ数式を2回繰り返しになってます。

Qobjective-Cのメソッドの意味

「UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis」
とはどういう意味のメソッドなのでしょうか?
どなたか教えて頂けないでしょうか。
以上、何卒宜しくお願い致します。

Aベストアンサー

それはメソッドではありませんね。定数(Constant)です。
メソッドと決めつけていたから、クラスリファレンスを検索しても、見つけられなかったのでしょう。Constantだとわかっていれば、クラスリファレンスを検索したら、見つかりますよ。

QRange("BI" & TR).Formula = に続く式の書き方を教えてください

よろしくお願いします。いつもgooの皆さんには大変お世話になっております
win8.1でエクセルは2013です

Private Sub Worksheet_Change(ByVal Target As Range)内のマクロです

マクロでセルに式を書き込みたいのですがエラーになってしまいます
一度使った書き方はメモを見てすぐかけるのですが
初めてのスタイルだと書けません
&でつなげるのに規則がありますが、頭で整理できていません

TRはTarget.Rowのことで宣言済みです
Dim TR As Long
TR = Target.Row

書きたいのは
BKのTRからBTのTRまでの合計を求めてエラーならERRと表示する
です
以下をどう直せばよいでしょうか?
教えてください

Range("BI" & TR).Formula = "=IFERROR(SUM(BK" & TR & ": BT" & TR )",""ERR"")"

Aベストアンサー

こんばんは。

Range("BI" & TR).Formula = "=IFERROR(SUM(BK" & TR & ": BT" & TR )",""ERR"")"
   ↓
Range("BI" & TR).Formula = "=IFERROR(SUM(BK" & TR & ": BT" & TR & "),""ERR"")"

後ろのTRの後の「 & "」 が抜けているようです。

本格的なマクロするなら、数式を入れるのではなくて、SUMの値を変数に入れたほうがよいですね。
その値は、Variant 型にしておけば、エラー値も取れますから、エラーになったら、ERRの文字を代入すれば、Formula で数式を入れる必要はありませんね。

Q.get○○Info(); メソッド についての意味

質問させていただきます。
Javaの構文なのか、OracleやSQLなどのデータベースの構文なのか
解らないのですが、MVCモデルで開発中にプログラム中に、
「.get○○Info();」といったものが出てきました。
この「.get○○Info();」は多分メソッドだと思うのですが、
どういった意味を持つものなのでしょうか?

インターネットで検索しても、0に近いくらいまったく出てきません。

でも、プログラム中にあるからにはやはり
「.get○○Info();」は存在する構文だと思うので
どなたか教えていただけませんか?

宜しくお願いします。

Aベストアンサー

>クラスから調べて、そのクラスのメソッドを調べることは出来ますが、
>それだと、調べたいメソッドが見つけ出せなくて・・・・・

調べたいメソッドが見つからないということは、
少なくともJava5.0の中にはないのだと思います。

どのAPIを見ればよいかは、
調べたいクラスのパッケージ名を見ると分かるかも知れません。

例えばパッケージ名に、
「org.apache.struts」という文字列が含まれていたら、
そのクラスはStrutsのAPIに含まれていることが分かり、
StrutsのAPIを見ればメソッドの機能が分かると思います。


>メソッドって自分でどのような働きをするか決めることが出来るのですか?

はい。できます。

>このメソッドはこの働きをするという風に決まっているんじゃないんですか?

「.get○○Info()」だからこの働きをするということはクラスによります。
なので、そのクラスがどういうものなのかを調べる必要があると思います。

調べるポイントは、パッケージですね。

パッケージ名に自分の会社に関係するような文字列が含まれていたら、
それは自分の会社の誰かが作成したものだと言うことが推測できます。
なので、自分の会社の誰かに聞けば何とかなると思います。

そうでなければ、そのパッケージ名をキーワードにGoogleなどで検索すると良いかも知れません。

>クラスから調べて、そのクラスのメソッドを調べることは出来ますが、
>それだと、調べたいメソッドが見つけ出せなくて・・・・・

調べたいメソッドが見つからないということは、
少なくともJava5.0の中にはないのだと思います。

どのAPIを見ればよいかは、
調べたいクラスのパッケージ名を見ると分かるかも知れません。

例えばパッケージ名に、
「org.apache.struts」という文字列が含まれていたら、
そのクラスはStrutsのAPIに含まれていることが分かり、
StrutsのAPIを見ればメソッドの機能が分...続きを読む

Qエクセルで、=IF(A12="a",TRUE)は =A1="a"  ???

エクセルで、
=IF(A12="a",TRUE)

=A1="a"
と省略できるのですか?

やってみるとまったく同じようなのですが、いまいち不安です。

また、=IF(D4=TRUE,"OK!","No!")も、日頃=IF(D4,"OK!","No!")と略してますが、これも正しいんですよね?
気になったものですから確認させてください。

Aベストアンサー

こんにちは。maruru01です。

IF関数について、少し補足説明します。
IF関数は、No.1にもあるように、

=IF(条件式,真の場合,偽の場合)

という書式ですが、

=IF(条件式,真の場合)

と、偽の場合を省略することが出来ます。
ここで偽の場合は、FALSEという論理値を返します。
つまり、質問欄の1つ目の例に当たります。
なお、

=IF(条件式)

と、真の場合も省略することは出来ず、

=IF(条件式,,偽の場合)

と、空欄にすると、真の場合は数値の「0」を返すことになります。
ちなみに、偽の場合も、

=IF(条件式,真の場合,)

と、引数区切りのカンマだけ付けると、空欄と見なされて(省略とは異なる)数値の「0」を返します。

次に、条件式についてですが、
条件式は、

「左辺」+「比較演算子」+「右辺」

の書式になっているものを指します。
ここで、比較演算子とは、
「=、>、<、>=、<=、<>」
を指します。
条件式は、成立/不成立の結果、TRUE/FALSEという論理値を返します。
つまり、

=A1="a"

は、条件式の戻り値そのものを表示していることになります。
それに対して、IF関数の方は、条件式を判定した結果、真の場合と偽の場合をそれぞれ実行して表示しています。
その真の場合と偽の場合が、条件式の戻り値とちょうど一致しているということです。

さて、IF関数の第1引数は、通常は上記の条件式を指定しますが、実際はIF関数は第1引数を数値として判断しています。
その判定基準は、第1引数が、
0 → 偽の場合を実行
0以外 → 真の場合を実行
となります。
そして、第1引数が条件式の場合に限り、戻り値の論理値を、
TRUE → 1
FALSE → 0
と数値に変換して判定しているのです。
これが、質問欄の後半の2つの数式の挙動の違いの原因なのです。

=IF(D4=TRUE,"OK!","No!")

は、第1引数は「D4=TRUE」という条件式です。
この場合、戻り値は必ずTRUE/FALSE(=1/0)です。
(ただし、D4にエラーが入っている場合を除く)
一方、

=IF(D4,"OK!","No!")

の方は、第1引数は「D4」で、これはセルD4の値そのものです。
で、前述のように、IF関数は第1引数を数値として判定するので、このD4が数値(と論理値)以外の場合(文字列など)はエラーになります。
D4が数値(と論理値)の場合は、前述のように、「0」かそれ以外かで判定され、真/偽の場合のいづれかを実行して表示します。

このIF関数の第1引数が数値として判定されているということを利用した例が以下のようなものです。
例えば、A列に数値が1つでもあれば"OK"、1つもなければ(つまり0)"NG"を表示する場合、意味を考えれば、

=IF(COUNT(A:A)>0,"OK","NG")

ですが、これを、

=IF(COUNT(A:A),"OK","NG")

と、A列の数値の個数(COUNT関数の戻り値)そのもので判定することが出来るわけです。

以上、長くなりましたが、補足説明でした。

こんにちは。maruru01です。

IF関数について、少し補足説明します。
IF関数は、No.1にもあるように、

=IF(条件式,真の場合,偽の場合)

という書式ですが、

=IF(条件式,真の場合)

と、偽の場合を省略することが出来ます。
ここで偽の場合は、FALSEという論理値を返します。
つまり、質問欄の1つ目の例に当たります。
なお、

=IF(条件式)

と、真の場合も省略することは出来ず、

=IF(条件式,,偽の場合)

と、空欄にすると、真の場合は数値の「0」を返すことになります。
ちなみに、偽...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング