Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1796 / 13645 ツリー ←次へ | 前へ→

【71844】空白あり)Loop処理で行うVBAの作成 saya 12/4/18(水) 9:48 質問[未読]
【71845】Re:空白あり)Loop処理で行うVBAの作成 saya 12/4/18(水) 9:56 発言[未読]
【71847】Re:空白あり)Loop処理で行うVBAの作成 UO3 12/4/18(水) 11:11 発言[未読]
【71860】Re:空白あり)Loop処理で行うVBAの作成 saya 12/4/18(水) 16:24 お礼[未読]
【71848】Re:空白あり)Loop処理で行うVBAの作成 毛虫(通過中) 12/4/18(水) 11:12 回答[未読]
【71849】Re:空白あり)Loop処理で行うVBAの作成 毛虫(通過中) 12/4/18(水) 11:21 発言[未読]
【71856】Re:空白あり)Loop処理で行うVBAの作成 UO3 12/4/18(水) 14:19 発言[未読]
【71861】Re:空白あり)Loop処理で行うVBAの作成 毛虫(通過中) 12/4/18(水) 16:30 発言[未読]
【71864】Re:空白あり)Loop処理で行うVBAの作成 UO3 12/4/19(木) 11:39 発言[未読]
【71850】Re:空白あり)Loop処理で行うVBAの作成 UO3 12/4/18(水) 11:26 発言[未読]

【71844】空白あり)Loop処理で行うVBAの作成
質問  saya  - 12/4/18(水) 9:48 -

引用なし
パスワード
   初めて投稿させていただきます。
私はまだVBAの勉強を始めたばかりでまだまだこれから勉強していくつもりです。
皆様のお力を貸してください。


単価計算をLoop処理で行うVBAマクロの作成です。
数量、金額があったりなかったりしています。
2行目から数量と金額を入力しています。


  C列  D列    E列
1行数量  単価計算  契約金額合価
  1          10,880
  空白        
  1          640
  空白        
  1          64,640
  空白        
  1          73,600
  1          73,600
  空白        
  1          73,600
  1          16,640
  1          16,640
  空白        
  空白        
  1          2,560
 
以前に空白のない場合のマクロ作成をしました。
その時の構成がこちらです。
※補足:C列)数量、D列)単価、E列)合価になります。


Sub Macro1()

   Dim intDataCnt As Long

    intDataCnt = 2

 Do While Range("C" & intDataCnt).Value <> ""
     
 Range("D" & intDataCnt).Formula = Range("E" &intDataCnt).Value / Range("C" & intDataCnt).Value

      intDataCnt = intDataCnt + 1

  Loop
End Sub


上記の空白なしの場合の構成を参照して作りたいのですが、
どうしたらいいでしょうか。

【71845】Re:空白あり)Loop処理で行うVBAの作成
発言  saya  - 12/4/18(水) 9:56 -

引用なし
パスワード
   補足です。
If〜Then〜Elseの構成を使用します。

【71847】Re:空白あり)Loop処理で行うVBAの作成
発言  UO3  - 12/4/18(水) 11:11 -

引用なし
パスワード
   ▼saya さん:

こんにちは
このような時のは、同じループ処理でも、For/Nextを使うと便利です。
できるだけ、アップされたコードのイメージをくずさないように書いてみました。
もっと、いろいろな書き方もできますし、さらに、C列、E列の値が数値じゃなかった場合の対処
あるいは、事前にD列の領域をクリアしておいた方がいいけど・・・
 等々のところは手を抜いています。

Sub Macro1_1()

  Dim intDataCnt As Long
  Dim maxRow As Long

  maxRow = Range("C" & Rows.Count).End(xlUp).Row   'C列データ最終行番号
  
  For intDataCnt = 2 To maxRow  '2行目から最終行までループ処理

    If Range("C" & intDataCnt).Value <> "" Then   '空白じゃないときの単価計算を実行
  
      Range("D" & intDataCnt).Formula = Range("E" & intDataCnt).Value / Range("C" & intDataCnt).Value

    End If

  Next
 
End Sub

【71848】Re:空白あり)Loop処理で行うVBAの作成
回答  毛虫(通過中)  - 12/4/18(水) 11:12 -

引用なし
パスワード
   気になったので追っかけてきてしまいました。
あちらを閉じられたと言うことで先ほどとは別案。
For〜Nextでも同じ処理が出来ますよ。

Sub macro3()
  Dim lastRow As Long
  Dim intDataCnt As Long
  
  lastRow = Range("C" & Rows.Count).End(xlUp).Row
  
  For intDataCnt = 2 To lastRow
    If Range("C" & intDataCnt).Value <> "" Then
      Range("D" & intDataCnt).Formula = Range("E" & intDataCnt).Value / Range("C" & intDataCnt).Value
    End If
  Next intDataCnt
End Sub

どうしてもLoopでと仰るなら先ほどのを試してみてください。

【71849】Re:空白あり)Loop処理で行うVBAの作成
発言  毛虫(通過中)  - 12/4/18(水) 11:21 -

引用なし
パスワード
   あわわ・・・VBAの神様と衝突してしまった・・・orz
私の発言は無視してください。

【71850】Re:空白あり)Loop処理で行うVBAの作成
発言  UO3  - 12/4/18(水) 11:26 -

引用なし
パスワード
   ▼saya さん:

もし、「Do/Loop」を使うことが課題であれば、毛虫(通過中)さんがいわれるように
「あちら」で、毛虫通過中@場繋ぎさんから回答されたコードをお使いください。
コードも含めて、sayaさんが削除されていますが、「差分」ボタンをおせば削除前のものが確認できます。

【71856】Re:空白あり)Loop処理で行うVBAの作成
発言  UO3  - 12/4/18(水) 14:19 -

引用なし
パスワード
   ▼毛虫(通過中) さん:

>・・・VBAの神様と・・orz

「神様」は、勘弁してください。
(いやみじゃないとは思いますが・・・)

【71860】Re:空白あり)Loop処理で行うVBAの作成
お礼  saya  - 12/4/18(水) 16:24 -

引用なし
パスワード
   ▼毛虫通過中さん、UO3 さん:

色々な提案ありがとうございました。

やり方は一つではなくたくさんあるのですね。
それが分かっただけでも大きな収穫です。

今後ともよろしくお願いいたします。

毛虫通過中さん:大変ご迷惑をおかけしました。

【71861】Re:空白あり)Loop処理で行うVBAの作成
発言  毛虫(通過中)  - 12/4/18(水) 16:30 -

引用なし
パスワード
   UO3様

いやみなどでは決してありません!
何時も各所でのご活躍を拝見させていただいており、憧れのお方ですのでつい・・・

不愉快な思いをさせてしまったのであれば申し訳ありませんでした。

saya様

レスを汚してしまい、申し訳ありません。

【71864】Re:空白あり)Loop処理で行うVBAの作成
発言  UO3  - 12/4/19(木) 11:39 -

引用なし
パスワード
   ▼毛虫(通過中) さん:

>不愉快な思いをさせてしまったのであれば申し訳ありませんでした。

そんなことはありませんよ〜。
ただ、私のレベルは、常連の回答者の先生方とくらべると、社会人と中学生ぐらいですので
汗、汗、です。

1796 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free