- ベストアンサー
エクセルVBA(掛け算)
いつもおせわになります。 現在、下記のようなコードを書いてますがどうもうまくいきません。よろしくお願いいたします。 M列 = K列 × N列を6行目から最終行目で入れたくて下記のようなコードを書きました。 ところが・・・N列にはデータのない場合があるので、If~を入れてみました。ここまではうまくいったのですが、 O列 = K列 × P列のように数式を入れたい列が他にもあり、又同じコードを下記のように書いたら、P列にデータがないところで止まってしまいます。 '///////////////////////////////////////////// Dim wsS As Worksheet Dim r As Long Dim Srow As Long Set wsS = Worksheets("syukei") Srow = wsS.Range("D65536").End(xlUp).Row With Worksheets("syukei") For r = 6 To Srow If Cells(r, 12) = Noting Then r = r End If Cells(r, 13) = Cells(r, 11) * Cells(r, 12) Next End With With Worksheets("syukei") '↓////////ここらへんで止まる////////// For r = 6 To Srow If Cells(r, 14) = Noting Then r = r End If Cells(r, 15) = Cells(r, 11) * Cells(r, 14) Next End With End Sub 掛け算を入れたい行は、下記のようになっています。 M列=K列×L列 O列=K列×N列 Q列=K列×P列 S列=K列×R列 U列=K列×T列 W列=K列×V列 Y列=K列×X列 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
rurucomさんこんにちは。記述されたコードの中の、Notingが定義されていないのが原因ではないでしょうか。たとえば、空白であれば、"" という記述でOKです。以下に、例を示してみましたので、試してみてください。この例では、ある列の最終行を取得する関数を作っています。また、空白や文字列などがデータに混在していて、計算できない場合は、エラーを無視しして進みますので、結果的に空白のセルが返されるはずです。 Sub TEST() Dim r As Long '計算結果を書き込む行番号 Dim Srow As Long '計算結果を書き込む最下段の行番号 Dim cul As Integer '計算結果を書き込む列番号 On Error Resume Next 'エラーが発生しても処理を進める With Sheets("syukei") 'culの値を12(L)から24(X)まで1つ飛びに増加させる For cul = 12 To 24 Step 2 'シートsyukeiのcul列目の最下段を調べる Srow = Myrec("syukei", cul) For r = 6 To Srow If .Cells(r, cul) <> "" Then .Cells(r, cul + 1) = _ .Cells(r, 11) * .Cells(r, cul) End If Next r Next cul End With End Sub Function Myrec(stIndex, c As Integer) As Integer '***使用されている行数を返す関数*** 'stIndex 調べるシートの名前またはインデクス値 'c 調べる列番号 Myrec = Sheets(stIndex).Range(Sheets(stIndex).Cells _ (ActiveSheet.Rows.Count, c).End(xlUp).Address).Row End Function 上記の2つのステートメントを貼り付けて実行してみてください。 不具合がある場合は再度ご質問ください。
その他の回答 (1)
- X-Terra
- ベストアンサー率48% (25/52)
For r = 6 To Srow If (IsEmpty(Cells(r, 1)) Or IsEmpty(Cells(r, 2))) = True Then Cells(r, 3) = "#n/a" Else Cells(r, 3) = Cells(r, 1) * Cells(r, 2) End If Next にしてみてはいかがでしょう? #ただし、cells(r,*) の*は、適宜列にあわせて決めてください。 あと、同じ演算を何回もやるようなので、For ... Nextにまとめて記述してしまうのも良い手だと思いますよ。
お礼
ありがとうございました。 For~Nextやってみました。アドバイスありがとうございました。
お礼
ありがとうございました。 うまくいきました!!