プロが教える店舗&オフィスのセキュリティ対策術

皆様初めまして。日頃から回答内容を参考にさせて頂いております。
今回初めての質問で、足りない点があるかと思いますが、どうぞ最後までお付き合い頂きますようお願い申し上げます。
さて、質問内容はエクセルVBAの繰り返し処理についてです。
正確には、あらゆる条件の中において、「ある条件に該当するセルから次の条件のセルまで、加算しながら文字を入力していく」それを、「総計」の文字があるセルまで繰り返し行っていくというものです。(画像 参照)

画像の表では分かりにくいかと思いますが、ここまでの処理として、別ブックのピボットテーブル
を作業用のブックに貼り付けてからの工程になります。
元データがピボットテーブルの為、各会社毎の間のセルが空白となっており、通常のフィルター操作では、正しく集計できず手間取っております。

当方は、簡単なVBAによる操作や繰り返し処理は、何となく使えておりますが、今回のように、間に
別データがあり、それを1回目の処理の終点として、2回目の処理の始点とする処理を繰り返し行う等のプログラムは、考え方や構文のサンプルが見つけられなかった為、皆様のお知恵をお借りしたいと思っております。

稚拙な文章で、上手く質問内容を表現できておらずお恥ずかしい限りですが、どうぞよろしくお願い申しあげます。

「エクセルVBA繰り返し処理」の質問画像

A 回答 (3件)

こんにちは



よくわかってませんが、A列の空白セルに上と同じ値を入れたいという意味と解釈しました。

>ある条件に該当するセルから次の条件のセルまで、加算しながら文字を入力していく
「加算しながら」の意味が、添付画像を見てもわからないので、加算はしていません。
 A列の「社名」を同じもので埋める処理だけを考慮しています。

対象がA3セルからA列の値の入っている最終行までということで考えれば、最終行の値が「総計」である必要はないので、「総計」であることのチェックも行っていません。

ごく普通に値を順に設定してゆく方法なら
Sub testV9()
 Dim rw As Long, val

 For rw = 3 To Cells(Rows.Count, 1).End(xlUp).Row
  If Cells(rw, 1).Value <> "" Then
   val = Cells(rw, 1).Value
  Else
   Cells(rw, 1).Value = val
  End If
 Next rw
End Sub

関数を利用してもよく、かつ、A3セルが空白なことはないという条件が成立するなら
Sub testVA()
 n = Cells(Rows.Count, 1).End(xlUp).Row - 2
 If n < 1 Then n = 1
 Cells(3, 1).Resize(n, 1).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
私の質問表現が、足りていないのは申しわけありません。

実際に動かすと2回目の部分の「B会社」から「C会社」の間だけがうまくいきません。
構文の内容は、問題が無いように思えるのですが…

しかし、大変参考になりました。
空白かどうかを問う部分から、セルの内容を変数に格納する際のやり方等、
私の考えていた変数格納のやり方では、足りなかった部分を補足して頂けた
ましたので助かりました。

お礼日時:2018/05/25 16:14

自分自身が空白だったら、上と同じものを代入。


そうで無ければ何もしない。

Dim Sh As Worksheet
Set Sh = Worksheets("Sheet1")
Last = Sh1.Range("A65536").End(xlUp).Row '最終行位置取得

For Cnt = 4 To Last

If Sh.Range("A" & Cnt).Value="" Then
Sh.Range("A" & Cnt).Value=Sh.Range("A" & Cnt-1).Value
End If

Next Cnt
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
そのままでは、動きませんでしたが
If Sh.Range("A" & Cnt).Value="" Then
Sh.Range("A" & Cnt).Value=Sh.Range("A" & Cnt-1).Value
End If
この部分の、やり方は確かに私がやりたいやり方です。
調整して、試したいと思います。

お礼日時:2018/05/25 16:14

スマホなんでほとんど画像は見れませんが、おそらくキーブレイク処理の事なんだと思います。



ループの最後にキーとなるセル、ここだと会社名?を変数に格納しておき、次のセルを参照したときにさっきの変数と比較。
一致であればそのまま集計、不一致ならそこまでの合計値を退避し、集計値をクリア。

そんな感じ。
上手くいくかな?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
キーブレイク処理というのは、初めて聞きました。
調べて試したいと思います。

お礼日時:2018/05/25 12:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!