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

B列がところどころ結合されているデータがあります。
※ 結合されていない行もあります。

例として、B1~B4(4行)が結合されていた場合、
1行目から4行目までの範囲で列検索を行ないたいと思っています。

Dim i As Long
If Cells(i, "B").MergeCells Then

一部分のみですみません。
行検索を行ない、B列が結合セルだったら、
Rows(i)(1~4行目)の、「列単位」で検索し(列はD列以降が検索対象)、
D列(D1~D4)に一箇所でも「○」が入力されていたら、D1に「○」と入力し、
E列以降の列にも同じ処理を繰り返したいです。

いろいろ試してみたのですがうまくいきませんでした。
検索方法を教えていただけたら幸いです。よろしくお願いします。

質問者からの補足コメント

  • ユーザー定義関数でも大丈夫です。
    できるだけシンプルな方が助かります。
    よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/06/05 11:51

A 回答 (3件)

質問を読み違えていました。

ユーザ定義関数ではできませんので、マクロでの実装です。

Sub sample()
Dim I As Long
Dim J As Long
Dim M As Long
Dim R As Range
I = 1
Do While I <= Cells.SpecialCells(xlCellTypeLastCell).Row
If Cells(I, "B").MergeCells Then
M = Cells(I, "B").MergeArea.Rows.Count
For J = 4 To Cells.SpecialCells(xlCellTypeLastCell).Column
Set R = Range(Cells(I, J), Cells(I + M - 1, J))
If WorksheetFunction.CountIf(R, "○") > 0 Then
Cells(I, J).Value = "○"
End If
Next J
I = I + M
Else
I = I + 1
End If
Loop
End Sub
    • good
    • 0
この回答へのお礼

ママチャリさんいつもありがとうございます。
実行してみたところ、列用変数Jの開始番号が4だとうまくいかず
4→1に変更したところ、うまくいきました。
これであっているのか若干不安です。。

お礼日時:2016/06/05 17:58

変数Jは、最初にD列を指すので、4で良いはずなのですが…。


ちなみに、どこで、どんなエラーがでましたか?
    • good
    • 0
この回答へのお礼

助かりました

できました!4でOKでした。
(さっきはなぜうまくいかなかったのか‥)
セル検索は基礎の基礎なのに、
プロパティがなかなか使いこなせません。
コードを熟読して、もっと勉強します。

本当にありがとうございました。
これからもよろしくお願いいたします。

お礼日時:2016/06/05 20:43

マクロで良いのでしょうか?ユーザ定義関数でも可能ですが、どちらがニーズに合ってますか?

この回答への補足あり
    • good
    • 0

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