お世話になります。

 私は会社でExcelを使い事務をしております。
 式を入力して少し事務を簡素化する事は出来ますが、マクロやVBには明るくありません。
 シート1の雛型1箇所に入力すると同時に、シート2に一覧表が作成される様には出来ないものでしょうか?
 頑張ってマクロを使ってみましたが、シート1のB1を入力するとシート2のB1の数値まで変わってしまいます。(表を参考にしてください)

 シート1(雛型)
   A       B        C
1 固定数  入力した数字  数式A/B


 シート2(一覧表)
    A           B         C
1 シート1A1の数字 シート1B1の数字 シート1C1の数字 
2 シート1A1の数字 シート1B1の数字 シート1C1の数字
3 シート1A1の数字 シート1B1の数字 シート1C1の数字
4 シート1A1の数字 シート1B1の数字 シート1C1の数字

 分かりにくい説明で申し訳ありません。
 皆さまのお知恵をお待ちしております。
 よろしくお願いします。

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

A 回答 (4件)

シート名



シート1 : 雛形
シート2 : データ蓄積用

シート1のB1に変更があった場合、シート1のA1:D1の:

1)「値のみ」をシート2に順次蓄積する。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastA As Long, ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("シート1")
Set ws2 = Sheets("シート2")
With Target
If .Address <> "$B$1" Or .Count <> 1 Or IsEmpty(Target) Then Exit Sub
If WorksheetFunction.Count(ws1.Range("a1:b1")) <> 2 Then Exit Sub
lastA = ws2.Range("a65536").End(xlUp).Row
ws2.Range("a" & lastA + 1).Resize(1, 4).Value = _
ws1.Range("a1").Resize(1, 4).Value
End With
End Sub

2)数式も含めてシート2に順次蓄積する。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastA As Long, ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("シート1")
Set ws2 = Sheets("シート2")
With Target
If .Address <> "$B$1" Or .Count <> 1 Or IsEmpty(Target) Then Exit Sub
If WorksheetFunction.Count(ws1.Range("a1:b1")) <> 2 Then Exit Sub
lastA = ws2.Range("a65536").End(xlUp).Row
ws2.Range("a" & lastA + 1).Resize(1, 4).Copy _
Destination:=ws2.Range("a" & lastA+1)
End With
End Sub
    • good
    • 0
この回答へのお礼

 迅速かつ丁寧なお返事をありがとうございます。
 早速試してみたところ、思っていた通りになりました。これで事務処理もスムーズになると思います。
 丁寧な方々に出会えてすぐに問題も解決でき、本当ならば全員にポイントを差し上げたいところですが、今回はこのような配点にさせていただきました。
 ご了承下さいませ。
 本当にありがとうございました。
 
 

お礼日時:2004/12/09 14:25

私も#1のお方と同じく質問の意味(何をしたいか)が判りません。

シート1は固定数と入力値1個を取るためのものですよね。シート1のC1の数式A/Bは何のためにある(使う)のですか。
シート2は何をしたいのでしょうか。
数値実例でも3-4行上げてもらえれば判るかもしれない。
シート2の各行で変わるのは何ですか。
●今閃きました。ひょっとしてシート1に入力した
値を行をづらして記録すること及びA/Bの値を計算して
累積して記録して行きたいのでしょうか。
それであればシート1のChangeイベントなど使い
シート2の行数を1ずつ増やせば良いのですが、VBAとしてもやや難しい。行を表す変数の扱い(下記のi)が私も含め、初学者には難しいと思う。
シートのChangeイベントに
Private Sub Worksheet_Change(ByVal Target As Range)
i = i + 1
Worksheets("sheet3").Cells(i, "B") = Target
End Sub
標準モジュールに
Public i
Sheet1のセルに値をいれるとSheet3のB列に
B1->B2->B3・・・に入力値をセットします。
あとA1の値とか、C列は(VBAでもやれますが)関数でやれば良いでしょう。

この回答への補足

 皆さまお返事ありがとうございます。
 質問の仕方が悪く申し訳ありません。
 今回アークタンジェントを利用して角度取得一覧表を作成することが目的です。
 そのためにシート1のA1には10、C1はA/B、D1には式ATAN(C1)*180/PI()を入力し、B1に数値を入力すれば角度を求めることが出来る雛型を作成しました。
 B1が更新されるたびに、シート2にA1~D1の入力内容が自動的にとび、一覧表が作成されるようにしたいと思っています。
 ちなみに求めたい角度は800~1000個あります。
 初心者はやはり欲張らずに一覧表を作成し、式をコピーした方が良いのでしょうか?
 皆さまの意見をお待ちしています。

補足日時:2004/12/09 09:26
    • good
    • 0

Sheet1の一列目を入力用として、Sheet2にデータを重ねていくということでしょうか?


Sheet1のシートタブを右クリックして「コードを表示」を選択
下記のコードを貼り付ける。

Sheet1のB1が変更された時点でSheet1のA1:B1が入力されている場合、Sheet2のA列の最後の次の行に転記されます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastA As Long, ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("sheet1")
Set ws2 = Sheets("sheet2")
With Target
If .Address <> "$B$1" Or .Count <> 1 Or IsEmpty(Target) Then Exit Sub
If WorksheetFunction.Count(ws1.Range("a1:b1")) <> 2 Then Exit Sub
lastA = ws2.Range("a65536").End(xlUp).Row
ws2.Range("a" & lastA + 1).Resize(1, 3).Value = _
ws1.Range("a1").Resize(1, 3).Value
End With
End Sub
    • good
    • 0
この回答へのお礼

 お返事ありがとうございます。
 質問の仕方が悪く申し訳ないです。
 #3さんのお返事に補足しました。
 もしお時間があれば回答お願いします。

お礼日時:2004/12/09 09:47

すみません、ちょっとやりたいことの内容がよくわからないんですが、質問に書かれたシート2はご自分で作ったマクロの結果という意味でしょうか?


作りたいのは

 シート1(雛型)
   A       B        C
1 固定数  入力した数字  数式A/B
2 固定数  入力した数字  数式A/B
3 固定数  入力した数字  数式A/B
4 固定数  入力した数字  数式A/B

 シート2(一覧表)
    A           B         C
1 シート1A1の数字 シート1B1の数字 シート1C1の数字 
2 シート1A2の数字 シート1B2の数字 シート1C2の数字
3 シート1A3の数字 シート1B3の数字 シート1C3の数字
4 シート1A4の数字 シート1B4の数字 シート1C4の数字

ということでしょうか?
単純にシート1のそれぞれのセルを参照する、ということではダメなんですね?
    • good
    • 0
この回答へのお礼

 お返事ありがとうございます。
 質問の仕方が悪く申し訳ないです。
 #3さんのお返事に補足しました。
 もしお時間があれば回答お願いします。

お礼日時:2004/12/09 09:45

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

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

このQ&Aを見た人が検索しているワード

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

Qシートベルトの固定解除

チャイルドシートを取りはずそうとして,(シートベルトの固定機能が作動しているときに)誤って,チャイルドシートの固定する金具の軸に引っかけてしまい,そのためチャイルドシートが取り外せなくなってしまいました。つまり引っ張っても,固定されてしまってシートベルトが伸びずにはずせなくなってしまったのです。
一度,シートベルトを巻き戻すほかに,シートベルトの固定を解除する方法はないのでしょうか。
車屋さんに頼むしかないのでしょうか。

Aベストアンサー

最近の車のリアシートの、最後までシートベルトを引き出すとカチカチカチカチと引き込まれるタイプですね?

探してもないかとは思いますが、お車によってはどこかをどうにかするとシートベルトが、チャイルドシート固定機構が外れる構造になっているかもしれません。その場合は、お車の取扱説明書に書かれている場合もあると思いますので、まずは探してみて下さい。(外車や高級車ですと、電気的に、裏コマンドで、例えば“どこかのスイッチを何回繰り返し押すとチャイルドシート固定機構が外れる。”なんてことになっているかもしれませんので、)無理に何かをやってみる前に、その辺(取扱説明書や、ディーラーに電話 問い合わせ)をまずよく確かめてみて下さい。

次に、“知恵の輪”的にやってみるしかないです。まず、反対側のシートベルトで、どこまで引き込めばチャイルドシート固定機構がフリーになるのかを確認し、その長さまで何とか引き込めないかを、知恵の輪の様にやってみるのです。これでしばらくやってみても無理でしたら、もう無理です。


次に、どこかを外し始めることになりますが、セダンですと、取扱説明書に、リアシートの外し方が載っている場合が多いです。これは、最近のリアシートは、シートカバーを付けたり外したりしやすいように、工具なしで簡単にリアシートが外れる場合が多いのです。リアシートが外れれば、その分すき間ができますので、その分引き込めてチャイルドシート固定機構がフリーになるかもしれません。
これも、シートを外す前に、反対側ベルトで長さを確認してから作業を始めたほうが良いですね。


フロントシートベルトに付いているアンカー(肩の上にある、肩ベルトの高さを調節する部分。)のようなものがリアシートベルトにも付いておりましたら、最後の手段があります。

(上記が全てが不可でしたら、)“最後の手段”、シートベルトの一番上のアンカーのところのボルトだけを外します。自転車の車輪が外せる程度のDIYが出来るかたがおられましたら、可能な作業ではありますが、100%の自信がある場合以外は、専門家に頼んで下さい。
ラチェットハンドル(http://www.koken-tool.co.jp/img/products/tec/ratchet/3753n.jpg)と ソケットレンチ(http://www.koken-tool.co.jp/catalog/img/main/h4/4400m.jpg)といった工具を必ず使って下さい。

決してこんな モンキレンチ(http://www.kyototool.co.jp/products/catalog/nepros/nwm.jpg)や スパナ(http://www.kyototool.co.jp/products/catalog/nepros/ns2.jpg)は使ってはいけません。

どこのボルトを緩めるかといいますと、リアシートベルトを支えてる、一番上の部分てありますよね?座った時に肩より上に来る部分です(アンカーといいます。)。これは、ボルト1本で取り付けられているのですが、きっとプラスチックの めくらぶた が付いていると思いますが、まずこれを外し、 ボルトを緩める前に、油性マジックインキなどでボルトの頭の一番上に印を付けておくと、あとで締め付けるときの目安になります。
その後、ソケットレンチにて、反時計回りにじわっと緩めます。この時注意して頂きたいのは、緩んだ瞬間に工具がリアガラスに当たって割れないように充分に気を付けて下さい。

ボルトが緩みさえすれば後は簡単です。手でボルトをクルクル緩め、完全に外れる前に、アンカー内にあるスペーサーやワッシャーをなどを なくさないように気を付けて、付いてる順番などを覚えながら外して下さい。

これでかなりの量のベルトが引き込めるようにはなるのですが、これを外したところで、必ずチャイルドシート固定機構が外れるかどうかは分からないというのが実際です。なぜなら、お車が、どの程度ベルトが引き込まれれば固定機構が外れるかや、チャイルドシートがどの程度ベルトを消費(巻き付き)しているかによって、変わってくるのです。

(リアシートの方は、アンカーが内装トリムの中に隠れているタイプの車もあり、その場合は、トリムを外すといったことは、出来そうな気がしても、お勧めできません。  トリムはなれない人が外すと割れてしまったりします。)


リアシート座面を外して、腰より下の部分のシートベルト(左シートなら腰の左側)の取り付け部を外す方法もありますが、ここまでやる場合は、よほど自信がある場合だけにして下さい。
(車をいじくるのが好きでいつもやっているかたですと簡単な作業ですが、そうでない場合は、工具を使う作業については専門家に頼んで下さい。)

最近の車のリアシートの、最後までシートベルトを引き出すとカチカチカチカチと引き込まれるタイプですね?

探してもないかとは思いますが、お車によってはどこかをどうにかするとシートベルトが、チャイルドシート固定機構が外れる構造になっているかもしれません。その場合は、お車の取扱説明書に書かれている場合もあると思いますので、まずは探してみて下さい。(外車や高級車ですと、電気的に、裏コマンドで、例えば“どこかのスイッチを何回繰り返し押すとチャイルドシート固定機構が外れる。”なんてこと...続きを読む

QA1に数字の1を入力するとB1の値がA1に表示、A2に数字の2を入力するとB2の値がA2に表示

エクセル初心者です

セルのA1に数字の1を入力するとB1の値がA1に表示、A2に数字の2を入力するとB2の値がA2に表示されるようなものを作りたいのですが・・・
どなたかご教授お願いします

例えば、A1に1を入れるとB1の値"北海道"がA1に表示され、A2に2を入れるとB2の値"青森"がA2に表示といった感じでです

宜しくお願いいたします

Aベストアンサー

No3,5,6です。
補足要求をしましたが時間がないので、No6での以下の理解、

B4がROOT,C4が♭9,D4が9,E4がm3,F4がM3~M4がM7
置き換え対象はB6:W11の範囲

ということでいいのなら以下で出来ます。

1.シートのタブを右クリックし、コードの表示を選択
2.出てきたVBエディター(白い画面)に下記をコピペ

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x
If Intersect(Target, Range("B6:W11")) Is Nothing Then Exit Sub
x = Target.Value
Application.EnableEvents = False
Target.Value = Range("A4").Offset(0, x)
Application.EnableEvents = True
End Sub

3.AltキーとF11キーを一緒に押してワークシートへもどります。

Qチャイルドシートの固定金具

チャイルドシートを固定するときに使う、固定金具(ロッキングクリップ)はどこで売っているのでしょうか。
ご存知でしたら教えてください。よろしくお願いします。

Aベストアンサー

お近くのオートバックス、イエローハット、ジェームスなどで売ってます。
シートベルトだけでなく、補助ベルトも使ってつけるとしっかり固定できます。

Qエクセルについてなのですが、 例えば指定の範囲内に A B B C A B C A B B C D

エクセルについてなのですが、

例えば指定の範囲内に
A B B C A B C A B B C D B D
と並んだセルからAとDの合計を出したい時はどのようにすればいいのですか?

COUNTIFSだったら複数条件を満たした数を表示するので希望とは違います。
希望はA or Dの合計を出したいのです。

Aベストアンサー

こんにちは!

COUNTIFS関数はAND条件になりますので、今回の質問には適しません。

=COUNTIF(範囲,"A")+COUNTIF(範囲,"D")
のように「A」のセル数と「D」のセル数をコツコツと足し算するのが
間違いないと思います。m(_ _)m

Qシート下にサブウーハー固定

シートの下にサブウーハーを設置したいのですが、何か良い固定方法はあるでしょうか?

Aベストアンサー

軽量化でマットをはずしたりしていないのであれば、
マジックテープの硬いほうをマットに触れる面に両面テープで
付けると、車のマットがマジックテープのやわらかいほうの役割を
するので、固定しやすいです。

QExcelのVlookupについて質問です シート1 ▽ A B ⑴ ⑵ シート2 ▽ A B C

ExcelのVlookupについて質問です

シート1
▽ A B



シート2
▽ A B C D E F
⑴ 1 あ 4 か 7 さ
⑵ 2 い 5 き 8 し
⑶ 3 う 6 く 9 す

というふたつの表から検索したいのですが、何か方法はあるのでしょうか。
シート1のA⑴に「5」と打てばA⑵に「き」と、「7」と打てば「さ」と検索するようにしたいです。
列は2列でないと検索できないのでしょうか。
よろしくお願いします。

Aベストアンサー

こんにちは!

VLOOKUP関数ではないのですが、A2セルに
=IFERROR(INDEX(Sheet2!A1:Z100,SUMPRODUCT((Sheet2!A1:Z100=A1)*ROW(A1:A100)),SUMPRODUCT((Sheet2!A1:Z100=A1)*COLUMN(A1:Z1))+1),"")

どうしてもVLOOKUP関数でやりたい場合は
=IFERROR(VLOOKUP(A1,OFFSET(Sheet2!A1:B100,,SUMPRODUCT((Sheet2!A1:Z100=A1)*COLUMN(A1:Z1))-1),2,0),"")

といった感じでしょうかね。

※ A1~Z100セルまでを対象としています。m(_ _)m

Qお腹で固定するチャイルドシートについて

 12月に第二子が誕生する予定です。第一子は,ベビーシートとチャイルドシートが兼用になっているもの(寝かせられるタイプ)を使っていました。
 第二子の誕生に合わせて,当然もう一つ購入を考えていますが,兼用のものは高いので,下の子はお下がりを使ってもらって,上の子に新しいものを買おうと思っています。
 いまのところ,プリムキッズのようなお腹の部分で固定するタイプを考えています。ただ,肩からベルトで股まで固定するタイプに比べて,お腹のみの固定の方が,事故のときに力を受け止める場所が少ないので,体に負担がかかるのではないかと心配しています。
 国土交通省の実験サイトでは,「良」となっているので大丈夫なのでしょうが,みなさんはどう思われますか?
 また,みなさんは第二子誕生のときはどのように対応されていましたか。よろしくお願いします。

Aベストアンサー

お子さんはおいくつでしょうか?
うちの子は今3歳で、今使ってるチャイルドシート↓
http://www.coscojuvenile.com/product.asp?productID=38のベルトが目イッパイになってきた
(股下カッチンの為)事、最近お友達を乗せてあげることが増えた事等の理由からいずれ使うであろう
(最近使ってますが)ジュニアシートを購入しました。
いわゆる一般的な座台だけのジュニアシートは子供の体に直接シートベルトを装着するので、
・シートベルトが体を圧迫しないか?
・3歳の座高では微妙にシートベルトが首をかすめるのではないか?
・寝てしまった時に・・不安。
と言う不安材料があったのと、寝た時に前の台を抱えて枕代わりにしたりしてたので、前の台は必要だと
思いました。なので今まで使ってたのと同じ形(前台付)のジュニアシートにしました。
考えてらっしゃるプリムキッズも同じような前台付ですよね?

参考までに、うちの購入したジュニアシートです。↓

参考URL:http://www.coscojuvenile.com/product.asp?productID=34

お子さんはおいくつでしょうか?
うちの子は今3歳で、今使ってるチャイルドシート↓
http://www.coscojuvenile.com/product.asp?productID=38のベルトが目イッパイになってきた
(股下カッチンの為)事、最近お友達を乗せてあげることが増えた事等の理由からいずれ使うであろう
(最近使ってますが)ジュニアシートを購入しました。
いわゆる一般的な座台だけのジュニアシートは子供の体に直接シートベルトを装着するので、
・シートベルトが体を圧迫しないか?
・3歳の座高では微妙にシートベルトが首を...続きを読む

QA1に数字を入力するとB1に加工して転記するマクロ

A1に入力されるのを監視して、入力された数字を加工してB1に自動的に転記するマクロを書きたいのですが、どのようにすればよいでしょうか?
他の質問(http://oshiete.goo.ne.jp/qa/3163895.html)から、こんな感じかなと思うのですが、【B1に下一桁を切り落として、転記】の部分をどう書いていいのか分かりません。
例えば、A1に「12345」と入力された場合、B1は「1234」を入力したいのです。

よろしくご指導ください。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

if Range("A1") <>"" then

【B1に下一桁を切り落として、転記】

End Sub

Aベストアンサー

こんにちは!

Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Address = "$A$1" And IsNumeric(.Value) Then
.Offset(, 1) = Int(.Value / 10)
End If
End With
End Sub

こんなんではどうでしょうか?m(_ _)m

Q【エクセル2003】シート保護でズームとスクロールを固定させる方法。

連続投稿すみません。お世話になってます。

シートを保護した後、シートの表示(ズーム)を変えられないようにしたいのですがどのようにすれば良いのでしょうか。70%で固定させて使ってもらいたいのです。

また、スクロールさせないようにする方法も知りたいです。

ご教示のほどよろしくお願いします。

Aベストアンサー

こんにちは。

>シートを保護した後、シートの表示(ズーム)を変えられないよう
本来、表示(ズーム)は、相手のPC環境に依存しているので、ユーザーオプションとして固定する方法はありません。

ですから、以下のように、マクロで行う方法しかありません。

標準モジュールの Auto_Open() や
ThisWorkbook モジュールの Private Sub Workbook_Open()
に、以下の中身をそっくり入れると良いです。


Sub TestZoomFixed()
'-----------------------
  '最初にシートの選択を必ずすること
  Worksheets("Sheet1").Select
  With ActiveWindow
    If .Zoom = 100 Then
      .Zoom = 70
    End If
  End With
  With Application.CommandBars.FindControls(, 925).Item(2)
    .Enabled = False
  End With
'----------------------
End Sub

終了時などに、
標準モジュールに、Sub Auto_Close() や

ThisWorkbook モジュールに
Private Sub Workbook_BeforeClose(Cancel As Boolean)
で、以下の中身を入れてあげます。

その反対は、
ズームは保存されますから、必要がなければ、コメントブロックのままにしてよいです。ただ、他のシートも同時に開いていたブックも、メニューからズームが使えなくなっています。(解決方法はあります)
'---------------------------
  Worksheets("Sheet1").Select
  'With ActiveWindow
  '  .Zoom = 100
  '  End If
  'End With
  With Application.CommandBars.FindControls(, 925).Item(2)
    .Enabled = True
  End With
'---------------------------

>スクロールさせないようにする方法

意味がはっきり分からないというか、取り違えているかもしれませんが、スクロールさせないという意味そのものは、スクロールロックをしてしまうことになるので、たぶん違うと思います。

例えば、使わない行や列を下や右端列まで選択し、

 書式-行-非表示、
 書式-列-非表示

としてしまう方法があります。その後で、

他にも、マクロで、シート・プロパテイのScrollArea というものがあって、その範囲を設定させてしまうと、範囲から外にはスクロールが出来なくなります。

例:
ThisWorkbook モジュールなどに入れてあげます。
Worksheets("Sheet1").ScrollArea ="A1:E10"

こんにちは。

>シートを保護した後、シートの表示(ズーム)を変えられないよう
本来、表示(ズーム)は、相手のPC環境に依存しているので、ユーザーオプションとして固定する方法はありません。

ですから、以下のように、マクロで行う方法しかありません。

標準モジュールの Auto_Open() や
ThisWorkbook モジュールの Private Sub Workbook_Open()
に、以下の中身をそっくり入れると良いです。


Sub TestZoomFixed()
'-----------------------
  '最初にシートの選択を必ずすること
  W...続きを読む

QSUMPRODUCT($A$1:$A$10,$B$1:$B$10)とSUMPRODUCT($A$1:$A$10*$B$1:$B$10)

エクセルのSUMPRODUCT関数についてお尋ねします。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)
の違いは何でしょうか?
両者とも同じ答えを返しますが、いろいろ試したところ、前者は範囲内に文字列があってもそれを無視して計算し、後者は文字列があればエラーになるようですが、その理解で正しいでしょうか?
正しいとすれば、なぜでしょうか?

Aベストアンサー

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算するように出来ています。最初、SUM関数に対し、そのように作られました。プログラムとしては、初歩的なものですが、そのアイデアは、今日まで、踏襲しているようです。このオリジナルの仕組みを考えたのは、VisiCalc の開発者、ブルックリン氏です。昔々、本で読んだことがあります。 PRODUCT関数とも共通です。3つの関数は、同じような仕様を持っています。

こちらが、本来の使い方です。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

つまり、
$A$1:$A$10 と $B$1:$B$10 の値を別々に取得しています。

では、
=SUMPRODUCT($A$1:$A$10,$B$1:$B$11)

とすると、なぜ、エラーが出るかというと、$B$11 に対応する数値が、NULL値(有効な値がない)だからです。それは、全体に反映させてしまいます。(理由は分かると思いますが、プログラムが途中で、エラーで止まってしまうからです)

ところが、こちらは、

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)

$A$1:$A$10*$B$1:$B$10 は、分割出来ません。したがって、この数式の中でのエラーは、そのまま、元の数式に反映されます。

ご自分で、ユーザー定義関数を作ってみれば分かります。VBAでも、同じように作ることが可能です。一度、試してみるとよいです。

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算...続きを読む


人気Q&Aランキング