Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : Excel 2016)
100マス計算の記述のエラー
投稿日時: 20/07/30 10:41:42
投稿者: beginner001

100マス計算の1行目と1列目にA1のセルを除いて数字が入力されています。数字が追加されても計算できるように、下記の記述をして実行してみましたが、うまくいきません。
修飾子が不正です と出ますがいろいろやっても駄目です。
どなたか教示下さい。よろしくお願いします。
 
Sub exercise_4()
   Dim i As Long
   Dim j As Long
For i = 2 To 11
  For j = 2 To 11
    Cells(i, j).Value = Cells(Rows.Count.End(xlUp), 1).Value * Cells(1, Columns.Count.End(xlToRight)).Value
  Next
Next
End Sub

回答
投稿日時: 20/07/30 11:55:02
投稿者: hatena
投稿者のウェブサイトに移動

10行×10列以外の場合もあるということでしょうか。
だとしたら下記のようなコードですね。。
 

Sub exercise_4()
    Dim i As Long, j As Long
    Dim MaxRow As Long, MaxCol As Long
    MaxRow = Cells(Rows.Count, 1).End(xlUp).Row
    MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column
    For i = 2 To MaxRow
        For j = 2 To MaxCol
            Cells(i, j).Value = Cells(i, 1).Value * Cells(1, j).Value
        Next
    Next
End Sub

回答
投稿日時: 20/07/30 20:34:57
投稿者: WinArrow
投稿者のウェブサイトに移動

> Cells(i, j).Value = Cells(Rows.Count.End(xlUp), 1).Value * Cells(1, Columns.Count.End(xlToRight)).Value
↑のコードは、間違っていませんか?
それとも、掲示板への入力ミスですか?
  
おかしなところ
>Cells(Rows.Count.End(xlUp), 1).Value

こちらになると思いますが・・・・・・
Cells(Rows.Count,1).End(xlUp).Value

回答
投稿日時: 20/07/30 23:08:36
投稿者: WinArrow
投稿者のウェブサイトに移動

 
>100マス計算の1行目と1列目にA1のセルを除いて数字が入力されています。
ということは、A2〜A11、B1〜J1には、数字が入っているという説明にないます。
 
ところが、
>数字が追加されても
この説明はなに?・・・・・矛盾していない?
 
でも、A列最終行を求めたり、1行目の最右列を求めたり
しているところを見ると、後者のよな気がします。
しかし、コードの中には
>数字が追加されても
は書かれていない・・・・?
 
筋書きが理解できません。
 
表のデザインとやろうとしていることををきちんと説明しましょう。
 
 
 
 

回答
投稿日時: 20/07/31 10:44:02
投稿者: WinArrow
投稿者のウェブサイトに移動

セルに数式を入力すれば、簡単に対応できるものを
敢えてVBAで処理する意図は?
 
例えば
セルB2に
=$A2*B$1
と入力し
横へ10個、下へ10個、フィルドラッグすれば、
できると思います。

回答
投稿日時: 20/07/31 11:54:45
投稿者: Suzu

引用:
下記の記述をして実行してみましたが、うまくいきません。
修飾子が不正です と出ますがいろいろやっても駄目です。

コードを拝見する限り、どこからか コードの断片のみを持ってきて
どうにかされようとしていると拝見いたします。
 
・繰り返し処理 の動作内容
・オブジェクトのプロパティーやメソッド
 ・・・etc
 
を理解せずに繋ぎ合わせてどうにかしようとされている様にみえます。
 
 
修飾子が不正です は、
 
Rows.Count.End(xlUp)
 
Rows.Count は、行数(数字) のプロパティーであり、
そこには、Endプ ロパティーが存在しないので エラーになっています。
 
引用:
数字が追加されても計算できるように

もあり、意図としては、値の入っている 最終行/最終列 を求めたいのでしょうから
 
hatena さんの提示されているように
A列の 値の入っている 最終行の行数 :Cells(Rows.Count, 1).End(xlUp).Row
1行目 の値の入っている 最終列の列数:Cells(1, Columns.Count).End(xlToLeft).Column
 となります。
 
また、
引用:
For i = 2 To 11
  For j = 2 To 11
    Cells(i, j) ・・・

 
この部分は、セルの
 2行目の 2列目・3列目・・・11列目 (B2・C2・・・K2)
 3行目の 2列目・3列目・・・11列目 (B3・C3・・・K3)
  :
 11行目の 2列目・3列目・・・11列目 (B11・C11・・・K11)
をそれぞれ参照する事になります。
 
11の部分を、先に求めた 最終列数、最終行数 に変える必要があります。
 
WinArrow さん が 仰っている 矛盾がそこですね。
 
 
 
1行目、A列 に空白が無いなら
引用:
Sub Sumple()
    With Range("B2").CurrentRegion
        Range(Range("B2"), .Item(.Count)).FormulaR1C1 = "=R1C*RC1"
    End With
End Sub
で良いと思います。
 
上記は、セルに数式を入れています。
値を入れておく必要があるなら B2から最終セル をコピーし 値貼けを行う事で対応できます。

トピックに返信