- ベストアンサー
なぜ、セルが埋まるのか?
- セルが埋まる理由について教えてください。
- 参考書のプログラムが読みきれないので、セルを埋める命令について教えてください。
- セルの値に応じて別のセルを埋める方法について教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> 右辺が なぜ カラムが進むのか? おそらく I4:I9 が I5:I11 と進んで 計算されているはず・ > なぜなら、11(k)が 4から endr - 6 まで ことなる数値で埋まるのですから。 > そんな仕掛けが どこにあるのでしょう?? 特定の範囲に、同じ数式を設定しているはずなのに、セルに表示される数値が違うということですよね。 実際にセルに設定された数式を確認してみれば、何が起こっているか想像がつきそうですが。 特定の範囲に数式を設定する場合、数式中のセルの指定方法によって異なる結果になります。 I4:I9のように「相対指定」をすると、範囲の左上のセルではI4:I9で数式が設定されますが、その右隣のセルでは列が1つずれてJ4:J9と設定されます。また、下のセルでは行が1つずれてI5:I10と設定されます。これは、手動でセルの範囲を選択してコピーした場合でも同じ処理が行われます。 $I$4:$I$9のように行および列の指定の前に$を付けると「絶対指定」となり、前述のような処理は行われず、すべてのセルの数式はI4:I9を参照します。
その他の回答 (5)
- anpauro11
- ベストアンサー率28% (4/14)
補足を見ましたが、処理の目的というより考えた内容のようですね。 Range(Cells(4, 11), Cells(endr - 6, 11)).Formula = "=AVERAGE(I4:I9)/(AVERAGE(I4:I9)+AVERAGE(J4:J9))*100" の部分は単に範囲を指定してその範囲に一括で数式を設定するというものですね。 だからセルを埋めてるのはFOR~NEXTのループじゃないでしょうか?
- aoumiushi
- ベストアンサー率45% (234/512)
よくわからんがF列の各行とその直後の行の数値を比べ、 マイナスならI列、プラスならJ列にその差を計算しているようですね。 K列では上から6行分の平均値の割合を出しているのかな? Cells(20000, 1).End(xlUp).Select endr = ActiveCell.Row で最終行を探しendrにその行番号代入してます。 For i = 4 To endr - 1 で4行目から最終行までループさせて計算をして、I・J・K列に結果を表示しているからでは?。 ※下記の部分で表示 Cells(i, 9) = Cells(i, 6) - Cells(i + 1, 6) Cells(i, 10) = 0 Cells(i, 9) = 0 Cells(i, 10) = Cells(i + 1, 6) - Cells(i, 6) Range(Cells(4, 11), Cells(endr - 6, 11)).Formula = "=AVERAGE(I4:I9)/(AVERAGE(I4:I9)+AVERAGE(J4:J9))*100"
- axsies
- ベストアンサー率64% (38/59)
> Cells(i, 9) = Cells(i, 6) - Cells(i + 1, 6) > Cells(i, 10) = 0 のCells()ですね。 Cells(i, 9).Value = Cells(i, 6).Value - Cells(i + 1, 6).Value Cells(i, 10).Value = 0 が本来ですが、VBAの場合メソッドやプロパティを省略すると「特定のプロパティ」へのアクセスと解釈される仕様があるようです。 詳しくは、↓この辺のURLを参照してください。 http://officetanaka.net/excel/vba/speed/s8.htm http://okwave.jp/qa/q2680854.html
- imogasi
- ベストアンサー率27% (4737/17069)
私も質問の意味がわからない。 前半は参考書に書いてあったのですか。 Cells(20000, 1).End(xlUp).Select endr = ActiveCell.Row これだとA列データ最終行の「セルの値」がendrに入る。 普通は(私ほか多くの他人の実例では)データ最終行の行番号をとらえて endr=Cells(20000, 1).End(xlUp).Row For i = 4 To endr '処理 Next i とする。A列最終行には何か数値データ(データ数などが入っている例か? 20000という数字を使うのも唐突だ。 For i = 4 To endr - 1とEndrの一行前で繰り返しを止めているのはなぜか。 jとja は使われていないようだが、そのあとを見て、質問に関係ない変数なら質問に載せないこと。 >なぜ、セルが埋まるのか? とはなに? >、変な質問かもしれませんが 内容が変というよりも、聞きたい内容の表現が出来てない、文章表現力の問題ではないか。 ーー >単なる代入に過ぎないかと?? 代入というのも間違いではないと思うが、関数式をVBAでセルに設定しているようだ。 突然 Cells(endr - 6, 11)). が出てきて理解できない。 VBAやプログラムは、コードだけの問題ではなく、データの有様との 関連で適否が判断で気宇もの。 質問にデータ例を挙げないで、質問するのは、この大切なことがわかっていない証拠 >Formula のヘルプでも?? 質問の式のどこがわからないのか。エクセルのワークシートの関数(VBAの関数ではない)の勉強をせよ。 >j = endr: ja = 0 ja の 宣言も ないようです。 これは>Formula のヘルプでも??と関連するのか? 変数の宣言はやるべきです。しかしVBAではやらなくても、ロジック的に誤りがなければ実行がうまくいく場合がある。 配列などはそうは行かない。 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_040.html お勧めの初期設定。 ーーーー この質問コーナーは多数の人が読むものである。 この質問コーナーにVBAの質問できるようなるには、VBAを多少勉強が済んでからにすべきだ。 文章表現も含めて、もう少し勉強してからにしては。
- anpauro11
- ベストアンサー率28% (4/14)
もうちょっと何をさせてるプログラムなのか解説があると分かりやすいです。 上のFOR~NEXTのiが4から始まってる理由とか 「セルを埋める」が指してる意味とか・・・
補足
恐縮です。 I=4 は タイトルがあるから だけです NEXTの部分は 4から セルの最後まで 埋まります。これは当然といえばそうです。 問題は Range(Cells(4, 11), Cells(endr - 6, 11)).Formula = "=AVERAGE(I4:I9)/(AVERAGE(I4:I9)+AVERAGE(J4:J9))*100" レンジとして 11(k)を 4から endr - 6 まで Formula でとっているのですが 右辺が なぜ カラムが進むのか? おそらく I4:I9 が I5:I11 と進んで 計算されているはず・ なぜなら、11(k)が 4から endr - 6 まで ことなる数値で埋まるのですから。 そんな仕掛けが どこにあるのでしょう?? j = endr: ja = 0 これが?? が質問です。
お礼
サンクス 理解しました。 絶対番地じゃないから 右辺もカラムが進む。 VB6やなもんで、勝手に変わるのが