• ベストアンサー

エクセル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列 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • TTak
  • ベストアンサー率52% (206/389)
回答No.1

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つのステートメントを貼り付けて実行してみてください。 不具合がある場合は再度ご質問ください。

rurucom
質問者

お礼

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

その他の回答 (1)

  • X-Terra
  • ベストアンサー率48% (25/52)
回答No.2

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にまとめて記述してしまうのも良い手だと思いますよ。

rurucom
質問者

お礼

ありがとうございました。 For~Nextやってみました。アドバイスありがとうございました。

関連するQ&A

専門家に質問してみよう